My Account

Wish List (0)

Saved Carts

Compare

Approved Re-Seller
Follow us on Facebook! Follow us on Twitter! Follow us on Instagram!

Ryanteck SnowPi - Demo 1

November 01, 2017

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()
Last update: November 01, 2017

Comments

Leave a Comment

Leave a Reply

* Name:
* Comment:
* E-mail: (Not Published)
Website: (Site url with http://)
Verification code: