diff --git a/Dune_Thumper/code.py b/Dune_Thumper/code.py new file mode 100644 index 000000000..1533d060f --- /dev/null +++ b/Dune_Thumper/code.py @@ -0,0 +1,59 @@ +# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries +# +# SPDX-License-Identifier: MIT + +import time +import board +import audiocore +import audiobusio +import audiomixer +import pwmio +from digitalio import DigitalInOut, Direction +from adafruit_ticks import ticks_ms, ticks_add, ticks_diff +from adafruit_motor import servo +import adafruit_lis3dh + +time.sleep(2) + +# enable external power pin +# provides power to the external components +external_power = DigitalInOut(board.EXTERNAL_POWER) +external_power.direction = Direction.OUTPUT +external_power.value = True + +# i2s playback +wave_file = open("dune_thumper_sfx.wav", "rb") +wave = audiocore.WaveFile(wave_file) +audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA) +mixer = audiomixer.Mixer(voice_count=1, sample_rate=22050, channel_count=1, + bits_per_sample=16, samples_signed=True) +audio.play(mixer) +mixer.voice[0].play(wave, loop=True) +mixer.voice[0].level = 0 + +# servo control +pwm = pwmio.PWMOut(board.EXTERNAL_SERVO, frequency=10) +prop_servo = servo.ContinuousServo(pwm) +servo_move = False + +i2c = board.I2C() +int1 = DigitalInOut(board.ACCELEROMETER_INTERRUPT) +lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c, int1=int1) +lis3dh.range = adafruit_lis3dh.RANGE_2_G + +clock = ticks_ms() +prop_time = 4000 + +while True: + if not servo_move: + mixer.voice[0].level = 0.0 + prop_servo.throttle = 0.0 + else: + prop_servo.throttle = 0.5 + mixer.voice[0].level = 0.5 + if ticks_diff(ticks_ms(), clock) >= prop_time: + servo_move = False + if lis3dh.shake(shake_threshold=20): + servo_move = True + clock = ticks_ms() + clock = ticks_add(clock, prop_time) diff --git a/Dune_Thumper/dune_thumper_sfx.wav b/Dune_Thumper/dune_thumper_sfx.wav new file mode 100644 index 000000000..4c9ad046f Binary files /dev/null and b/Dune_Thumper/dune_thumper_sfx.wav differ