Skip to content

Commit 24406bf

Browse files
authored
Merge pull request #2887 from adafruit/pumpkin_update
updates for pumpkin
2 parents d71dd92 + 35a8608 commit 24406bf

File tree

2 files changed

+55
-34
lines changed

2 files changed

+55
-34
lines changed

Spinning_Ikea_Pumpkin/code.py

+55-34
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,25 @@
22
#
33
# SPDX-License-Identifier: MIT
44

5+
import time
6+
import microncontroller
57
import board
68
import audiocore
79
import audiobusio
810
import audiomixer
911
import pwmio
10-
from digitalio import DigitalInOut, Direction
12+
from digitalio import DigitalInOut, Direction, Pull
1113
from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
1214
from adafruit_motor import servo
1315
import adafruit_vl53l1x
1416

15-
distance_delay = 5 # how often vl53 is read
17+
distance_delay = 4 # how often vl53 is read
1618
servo_delays = [2.0, 1.5, 1.0, 0.5] # servo spin delay
17-
distances = [400, 200, 100, 50] # in centimeters
18-
max_audio = 0.5
19+
distances = [150, 100, 80, 40] # in centimeters
20+
max_audio = 1
1921
# audio files
20-
music = audiocore.WaveFile(open("music-loop-3.wav", "rb"))
21-
fx_1 = audiocore.WaveFile(open("laugh-1.wav", "rb"))
22+
music = audiocore.WaveFile(open("music-loop-1.wav", "rb"))
23+
fx_1 = audiocore.WaveFile(open("happy-halloween.wav", "rb"))
2224
fx_2 = audiocore.WaveFile(open("laugh-2.wav", "rb"))
2325
fx_3 = audiocore.WaveFile(open("laugh-3.wav", "rb"))
2426

@@ -39,6 +41,10 @@
3941
external_power.direction = Direction.OUTPUT
4042
external_power.value = True
4143

44+
switch = DigitalInOut(board.EXTERNAL_BUTTON)
45+
switch.direction = Direction.INPUT
46+
switch.pull = Pull.UP
47+
4248
# servo control
4349
pwm = pwmio.PWMOut(board.EXTERNAL_SERVO, duty_cycle=2 ** 15, frequency=50)
4450
servo = servo.ContinuousServo(pwm, min_pulse=750, max_pulse=2250)
@@ -53,32 +59,47 @@
5359
servo_throttle = 0
5460

5561
while True:
56-
if prop_time:
57-
if ticks_diff(ticks_ms(), servo_clock) >= servo_time:
58-
# print(servo_throttle)
59-
servo.throttle = servo_throttle
60-
servo_throttle = not servo_throttle
61-
servo_clock = ticks_add(servo_clock, servo_time)
62-
if ticks_diff(ticks_ms(), vl53_clock) >= vl53_time:
63-
if vl53.data_ready:
64-
# print(f"Distance: {vl53.distance} cm")
65-
vl53.clear_interrupt()
66-
closest_distance = min(distances, key=lambda x: abs(vl53.distance - x))
67-
# print(closest_distance)
68-
if vl53.distance <= distances[0]:
69-
prop_time = True
70-
mixer.voice[0].level = max_audio
62+
try:
63+
if switch.value:
64+
external_power.value = True
65+
if prop_time:
66+
if ticks_diff(ticks_ms(), servo_clock) >= servo_time:
67+
print(servo_throttle)
68+
servo.throttle = servo_throttle
69+
servo_throttle = not servo_throttle
70+
servo_clock = ticks_add(servo_clock, servo_time)
71+
if ticks_diff(ticks_ms(), vl53_clock) >= vl53_time:
72+
if vl53.data_ready:
73+
print(f"Distance: {vl53.distance} cm")
74+
vl53.clear_interrupt()
75+
if vl53.distance is None:
76+
prop_time = False
77+
mixer.voice[0].level = 0.0
78+
servo_time = int(servo_delays[0] * 1000)
79+
servo.throttle = 1.0
80+
else:
81+
closest_distance = min(distances, key=lambda x: abs(vl53.distance - x))
82+
# print(closest_distance)
83+
if vl53.distance <= distances[0]:
84+
prop_time = True
85+
mixer.voice[0].level = max_audio
86+
else:
87+
prop_time = False
88+
mixer.voice[0].level = 0.0
89+
servo.throttle = 1.0
90+
if closest_distance == distances[1]:
91+
mixer.voice[1].play(tracks[1], loop=False)
92+
servo_time = int(servo_delays[1] * 1000)
93+
elif closest_distance == distances[2]:
94+
mixer.voice[2].play(tracks[2], loop=False)
95+
servo_time = int(servo_delays[2] * 1000)
96+
elif closest_distance == distances[3]:
97+
mixer.voice[3].play(tracks[3], loop=False)
98+
servo_time = int(servo_delays[3] * 1000)
99+
vl53_clock = ticks_add(vl53_clock, vl53_time)
71100
else:
72-
prop_time = False
73-
mixer.voice[0].level = 0.0
74-
servo_time = int(servo_delays[0] * 1000)
75-
if closest_distance == distances[1]:
76-
mixer.voice[1].play(tracks[1], loop=False)
77-
servo_time = int(servo_delays[1] * 1000)
78-
elif closest_distance == distances[2]:
79-
mixer.voice[2].play(tracks[2], loop=False)
80-
servo_time = int(servo_delays[2] * 1000)
81-
elif closest_distance == distances[3]:
82-
mixer.voice[3].play(tracks[3], loop=False)
83-
servo_time = int(servo_delays[3] * 1000)
84-
vl53_clock = ticks_add(vl53_clock, vl53_time)
101+
external_power.value = False
102+
except Exception as error: # pylint: disable=broad-except
103+
print(error)
104+
time.sleep(5)
105+
microncontroller.reset()
98.7 KB
Binary file not shown.

0 commit comments

Comments
 (0)