Adafruit_Learning_System_Gu.../Crickits/yayayay_flier/code.py
2022-02-22 15:38:21 -05:00

96 lines
2.5 KiB
Python

# SPDX-FileCopyrightText: 2018 Limor Fried for Adafruit Industries
#
# SPDX-License-Identifier: MIT
# pylint: disable=wrong-import-position
import time
import gc
import pulseio
from busio import I2C
import board
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()
import audiocore
gc.collect()
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 = audiocore.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
# pylint: disable=bare-except
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")