87 lines
2.2 KiB
Python
87 lines
2.2 KiB
Python
import time
|
|
import gc
|
|
import pulseio
|
|
gc.collect()
|
|
import adafruit_irremote
|
|
gc.collect()
|
|
from adafruit_motor import motor
|
|
gc.collect()
|
|
from adafruit_seesaw.seesaw import Seesaw
|
|
gc.collect()
|
|
from adafruit_seesaw.pwmout import PWMOut
|
|
gc.collect()
|
|
import neopixel
|
|
gc.collect()
|
|
import audioio
|
|
gc.collect()
|
|
from busio import I2C
|
|
import board
|
|
|
|
|
|
print("Blimp!")
|
|
|
|
# Create Infrared reader
|
|
pulsein = pulseio.PulseIn(board.REMOTEIN, maxlen=100, idle_state=True)
|
|
decoder = adafruit_irremote.GenericDecode()
|
|
REMOTE_FORWARD = [255, 2, 175, 80]
|
|
REMOTE_BACKWARD = [255, 2, 239, 16]
|
|
REMOTE_PAUSE = [255, 2, 127, 128]
|
|
|
|
# Create seesaw object
|
|
seesaw = Seesaw(I2C(board.SCL, board.SDA))
|
|
|
|
# Create one motor on seesaw PWM pins 22 & 23
|
|
motor_a = motor.DCMotor(PWMOut(seesaw, 22), PWMOut(seesaw, 23))
|
|
motor_a.throttle = 0
|
|
|
|
# Neopix!@
|
|
pixels = neopixel.NeoPixel(board.NEOPIXEL, 10)
|
|
|
|
# audio file
|
|
a = audioio.AudioOut(board.A0)
|
|
def play_audio(wavfile):
|
|
f = open(wavfile, "rb")
|
|
wav = audioio.WaveFile(f)
|
|
a.play(wav)
|
|
while a.playing:
|
|
pass
|
|
f.close()
|
|
gc.collect()
|
|
|
|
play_audio("overview.wav")
|
|
t = time.monotonic()
|
|
|
|
while True:
|
|
command = None # assume no remote commands came in
|
|
if len(pulsein) > 25: # check in any IR data came in
|
|
pulses = decoder.read_pulses(pulsein)
|
|
try:
|
|
code = decoder.decode_bits(pulses, debug=False)
|
|
if code in (REMOTE_FORWARD, REMOTE_BACKWARD, REMOTE_PAUSE):
|
|
# we only listen to a few different codes
|
|
command = code
|
|
else:
|
|
continue
|
|
# on any failure, lets just restart
|
|
except:
|
|
continue
|
|
|
|
if command:
|
|
if code == REMOTE_FORWARD:
|
|
play_audio("fan_forward.wav")
|
|
motor_a.throttle = 1 # full speed forward
|
|
pixels.fill((255,0,0))
|
|
elif code == REMOTE_BACKWARD:
|
|
play_audio("fan_backward.wav")
|
|
motor_a.throttle = -1 # full speed backward
|
|
pixels.fill((0,0,255))
|
|
elif code == REMOTE_PAUSE:
|
|
motor_a.throttle = 0 # stop motor
|
|
play_audio("fan_stopped.wav")
|
|
pixels.fill((0,0,0))
|
|
time.sleep(0.5)
|
|
|
|
# play yayayay every 3 seconds
|
|
if (time.monotonic() - t > 3) and motor_a.throttle != 0:
|
|
t = time.monotonic()
|
|
play_audio("yayyayyay.wav")
|