updates for pumpkin

a few updates for the pumpkin project. now with a switch and more error handling
This commit is contained in:
Liz 2024-09-23 13:55:11 -04:00
parent d71dd92eb7
commit 99ca7416e0
2 changed files with 55 additions and 34 deletions

View file

@ -2,23 +2,25 @@
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
import time
import microncontroller
import board import board
import audiocore import audiocore
import audiobusio import audiobusio
import audiomixer import audiomixer
import pwmio import pwmio
from digitalio import DigitalInOut, Direction from digitalio import DigitalInOut, Direction, Pull
from adafruit_ticks import ticks_ms, ticks_add, ticks_diff from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
from adafruit_motor import servo from adafruit_motor import servo
import adafruit_vl53l1x import adafruit_vl53l1x
distance_delay = 5 # how often vl53 is read distance_delay = 4 # how often vl53 is read
servo_delays = [2.0, 1.5, 1.0, 0.5] # servo spin delay servo_delays = [2.0, 1.5, 1.0, 0.5] # servo spin delay
distances = [400, 200, 100, 50] # in centimeters distances = [150, 100, 80, 40] # in centimeters
max_audio = 0.5 max_audio = 1
# audio files # audio files
music = audiocore.WaveFile(open("music-loop-3.wav", "rb")) music = audiocore.WaveFile(open("music-loop-1.wav", "rb"))
fx_1 = audiocore.WaveFile(open("laugh-1.wav", "rb")) fx_1 = audiocore.WaveFile(open("happy-halloween.wav", "rb"))
fx_2 = audiocore.WaveFile(open("laugh-2.wav", "rb")) fx_2 = audiocore.WaveFile(open("laugh-2.wav", "rb"))
fx_3 = audiocore.WaveFile(open("laugh-3.wav", "rb")) fx_3 = audiocore.WaveFile(open("laugh-3.wav", "rb"))
@ -39,6 +41,10 @@ external_power = DigitalInOut(board.EXTERNAL_POWER)
external_power.direction = Direction.OUTPUT external_power.direction = Direction.OUTPUT
external_power.value = True external_power.value = True
switch = DigitalInOut(board.EXTERNAL_BUTTON)
switch.direction = Direction.INPUT
switch.pull = Pull.UP
# servo control # servo control
pwm = pwmio.PWMOut(board.EXTERNAL_SERVO, duty_cycle=2 ** 15, frequency=50) pwm = pwmio.PWMOut(board.EXTERNAL_SERVO, duty_cycle=2 ** 15, frequency=50)
servo = servo.ContinuousServo(pwm, min_pulse=750, max_pulse=2250) servo = servo.ContinuousServo(pwm, min_pulse=750, max_pulse=2250)
@ -53,16 +59,25 @@ prop_time = False
servo_throttle = 0 servo_throttle = 0
while True: while True:
try:
if switch.value:
external_power.value = True
if prop_time: if prop_time:
if ticks_diff(ticks_ms(), servo_clock) >= servo_time: if ticks_diff(ticks_ms(), servo_clock) >= servo_time:
# print(servo_throttle) print(servo_throttle)
servo.throttle = servo_throttle servo.throttle = servo_throttle
servo_throttle = not servo_throttle servo_throttle = not servo_throttle
servo_clock = ticks_add(servo_clock, servo_time) servo_clock = ticks_add(servo_clock, servo_time)
if ticks_diff(ticks_ms(), vl53_clock) >= vl53_time: if ticks_diff(ticks_ms(), vl53_clock) >= vl53_time:
if vl53.data_ready: if vl53.data_ready:
# print(f"Distance: {vl53.distance} cm") print(f"Distance: {vl53.distance} cm")
vl53.clear_interrupt() vl53.clear_interrupt()
if vl53.distance is None:
prop_time = False
mixer.voice[0].level = 0.0
servo_time = int(servo_delays[0] * 1000)
servo.throttle = 1.0
else:
closest_distance = min(distances, key=lambda x: abs(vl53.distance - x)) closest_distance = min(distances, key=lambda x: abs(vl53.distance - x))
# print(closest_distance) # print(closest_distance)
if vl53.distance <= distances[0]: if vl53.distance <= distances[0]:
@ -71,7 +86,7 @@ while True:
else: else:
prop_time = False prop_time = False
mixer.voice[0].level = 0.0 mixer.voice[0].level = 0.0
servo_time = int(servo_delays[0] * 1000) servo.throttle = 1.0
if closest_distance == distances[1]: if closest_distance == distances[1]:
mixer.voice[1].play(tracks[1], loop=False) mixer.voice[1].play(tracks[1], loop=False)
servo_time = int(servo_delays[1] * 1000) servo_time = int(servo_delays[1] * 1000)
@ -82,3 +97,9 @@ while True:
mixer.voice[3].play(tracks[3], loop=False) mixer.voice[3].play(tracks[3], loop=False)
servo_time = int(servo_delays[3] * 1000) servo_time = int(servo_delays[3] * 1000)
vl53_clock = ticks_add(vl53_clock, vl53_time) vl53_clock = ticks_add(vl53_clock, vl53_time)
else:
external_power.value = False
except Exception as error: # pylint: disable=broad-exception-caught
print(error)
time.sleep(5)
microncontroller.reset()

Binary file not shown.