Cart 0

Ryanteck SnowPi - Demo 1

This is another demo program for the SnowPi written by Tony Goodhew.

A video tweet can be found at |@MrTomsWorld twitter.

#!/usr/bin/python

# Tony Goodhew 19 November 2015

# Uses SnowPi and switch with 10K Ohm pull up on GPIO #16

# PWM brightness control of nose

 

# Import required libraries

import RPi.GPIO as GPIO

import time

import random

random.seed()

 

# Tell GPIO library to use GPIO references

GPIO.setmode(GPIO.BCM)

sw = 16

GPIO.setup(sw,GPIO.IN)

 

LEDs = [7,8,9,22,18,17,23,24] # Not nose

# Setup LED pins as outputs

for x in range(8):

    GPIO.setup(LEDs[x], GPIO.OUT)

    GPIO.output(LEDs[x], False)

# Light white and blue LEDs

for x in range(8):

    GPIO.output(LEDs[x], True)

 

# Set up PWM on nose to control brightness    

LED = 25 

freq = 200 # PWM frequency - 200 times /sec

dutyCycle = 0 # percentage of time on - range 0 to 100

GPIO.setup(LED,GPIO.OUT)

pwmLED = GPIO.PWM(LED,freq)

pwmLED.start(0)

 

def spin():   #Clockwise

    for i in range(6):

        GPIO.output(LEDs[i],0) # White Off

    for n in range(6):

        for i in range(6):

            GPIO.output(LEDs[i],1)

            time.sleep(0.07)

            GPIO.output(LEDs[i],0)

    for i in range(6):

        GPIO.output(LEDs[i],1) #White ON

    return

 

def spin2():   # Counter Clockwise

    for i in range(6):

        GPIO.output(LEDs[i],0) # White OFF

    for n in range(6):

        for i in range(5,-1,-1):

            GPIO.output(LEDs[i],1)

            time.sleep(0.07)

            GPIO.output(LEDs[i],0)

    for i in range(6):

        GPIO.output(LEDs[i],1) # White ON

    return

 

def wink():

    GPIO.output(LEDs[7],0)

    time.sleep(0.2)

    GPIO.output(LEDs[7],1)

    return

 

def wink2():

    GPIO.output(LEDs[6],0)

    time.sleep(0.2)

    GPIO.output(LEDs[6],1)

    return

 

def upDown():                  # Up and Down

    for i in range(6):

        GPIO.output(LEDs[i],0) # White OFF

    for i in range(4):

        for n in range(3):

            GPIO.output(LEDs[n],1)

            GPIO.output(LEDs[5-n],1)

            time.sleep(0.1)

            GPIO.output(LEDs[n],0)

            GPIO.output(LEDs[5-n],0)

            time.sleep(0.1)

        for m in range(3):

            n = 2-m

            GPIO.output(LEDs[n],1)

            GPIO.output(LEDs[5-n],1)

            time.sleep(0.1)

            GPIO.output(LEDs[n],0)

            GPIO.output(LEDs[5-n],0)

            time.sleep(0.1)    

    for i in range(6):

        GPIO.output(LEDs[i],1) # White ON

    return

 

def wobble():                  # Side to side

    for i in range(6):

        GPIO.output(LEDs[i],0) # White OFF

    for i in range(6):

        GPIO.output(7,1)

        GPIO.output(8,1)

        GPIO.output(9,1)

        time.sleep(0.1)

        GPIO.output(7,0)

        GPIO.output(8,0)

        GPIO.output(9,0)

        time.sleep(0.1)

        GPIO.output(22,1)

        GPIO.output(18,1)

        GPIO.output(17,1)

        time.sleep(0.1)

        GPIO.output(22,0)

        GPIO.output(18,0)

        GPIO.output(17,0)

        time.sleep(0.1)

    for i in range(6):

        GPIO.output(LEDs[i],1) # White ON

    return

 

# ==== Main begins ==== 

pwmLED.ChangeDutyCycle(100) # Nose full brightness

wobble()

upDown()

spin()

wink()

spin2()

wink2()

 

print("Hold button down to stop")

 

# === Loop ===

swVal = GPIO.input(sw)

while swVal == 1:

    for brite in range(0,90,5):

        pwmLED.ChangeDutyCycle(brite) # Brighter nose

        time.sleep(0.1)

    n = random.randint(0,5)

    if n == 0:

        spin()

    if n == 1:

        spin2()

    if n == 2:

        wink()

    if n == 3:

        wink2()

    if n == 4:

        wobble()

    if n == 5:

        upDown()

    for brite in range(90,0,-5):

        pwmLED.ChangeDutyCycle(brite) # Dimmer nose

        time.sleep(0.1)    

    swVal = GPIO.input(sw) # Check switch for stopping

 

# === Tidy up ===

print("Halted by button")

# Reset GPIO settings

GPIO.cleanup()


Older Post Newer Post

Related Posts

How to lock your Raspberry Pi Screen
How to lock your Raspberry Pi Screen
Many of you will be familiar with the Windows screensaver/lock screen.  If you are going to leave your PC alone for a...
Read More
Using Neopixels with the Raspberry Pi
Using Neopixels with the Raspberry Pi
Let’s be honest. Lights are cool. Multi coloured lights are very cool. Controllable multi coloured lights are awesome...
Read More
Using a Logitech Harmony Remote
Using a Logitech Harmony Remote
Our IR receiver works with LIRC and is able to receive the signal from almost any remote, if configured properly. Ma...
Read More