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()