Ceci est un autre programme de démonstration pour le SnowPi écrit par Thomas.
Un tweet vidéo peut être trouvé à | @MrTomsWorld Twitter.
#!/usr/bin/python
# Thomas 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()
