Skip to content

Commit

Permalink
Merge pull request #1904 from adafruit/tva_time_baton
Browse files Browse the repository at this point in the history
TVA time baton code and sounds
  • Loading branch information
TheKitty authored Oct 22, 2021
2 parents fa1a841 + 143554d commit daa0947
Show file tree
Hide file tree
Showing 15 changed files with 138 additions and 0 deletions.
138 changes: 138 additions & 0 deletions TVA_Time_Baton_PropMaker/code.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
# SPDX-FileCopyrightText: 2019 Kattni Rembor for Adafruit Industries
#
# SPDX-License-Identifier: MIT
"""
Prop-Maker based Light Up Prop.
Adafruit invests time and resources providing this open source code.
Please support Adafruit and open source hardware by purchasing
products from Adafruit!
Written by Kattni Rembor for Adafruit Industries
Copyright (c) 2019 Adafruit Industries
Licensed under the MIT license.
All text above must be included in any redistribution.
"""
import time
import random
import digitalio
import audioio
import audiocore
import busio
import board
import adafruit_rgbled
import adafruit_lis3dh

# CUSTOMISE COLORS HERE:
MAIN_COLOR = (20, 10, 0) # Default is red
HIT_COLOR = (255, 100, 0) # Default is white

# CUSTOMISE SENSITIVITY HERE: smaller numbers = more sensitive to motion
HIT_THRESHOLD = 650
SWING_THRESHOLD = 125

# Set to the length in seconds of the "on.wav" file
POWER_ON_SOUND_DURATION = 1.5

POWER_PIN = board.D10

enable = digitalio.DigitalInOut(POWER_PIN)
enable.direction = digitalio.Direction.OUTPUT
enable.value = False

# Pin the Red LED is connected to
RED_LED = board.D11

# Pin the Green LED is connected to
GREEN_LED = board.D12

# Pin the Blue LED is connected to
BLUE_LED = board.D13

# Create the RGB LED object
led = adafruit_rgbled.RGBLED(RED_LED, GREEN_LED, BLUE_LED)

audio = audioio.AudioOut(board.A0) # Speaker

# Set up accelerometer on I2C bus, 4G range:
i2c = busio.I2C(board.SCL, board.SDA)
accel = adafruit_lis3dh.LIS3DH_I2C(i2c)
accel.range = adafruit_lis3dh.RANGE_4_G

COLOR_HIT = HIT_COLOR # "hit" color is HIT_COLOR set above
COLOR_SWING = MAIN_COLOR # "swing" color is MAIN_COLOR set above


def play_wav(name, loop=False):
"""
Play a WAV file in the 'sounds' directory.
:param name: partial file name string, complete name will be built around
this, e.g. passing 'foo' will play file 'sounds/foo.wav'.
:param loop: if True, sound will repeat indefinitely (until interrupted
by another sound).
"""
print("playing", name)
try:
wave_file = open('sounds/' + name + '.wav', 'rb')
wave = audiocore.WaveFile(wave_file)
audio.play(wave, loop=loop)
except: # pylint: disable=bare-except
return


# List of swing wav files without the .wav in the name for use with play_wav()
swing_sounds = [
'swing1',
'swing2',
'swing3',
'swing4',
'swing5',
'swing6'
]

# List of hit wav files without the .wav in the name for use with play_wav()
hit_sounds = [
'hit1',
'hit2',
'hit3',
'hit4',
'hit5',
'hit6'
]

mode = 0 # Initial mode = OFF

# Main loop
while True:
if mode == 0: # If currently off...
enable.value = True
play_wav('on') # Power up!
led.color = MAIN_COLOR
time.sleep(POWER_ON_SOUND_DURATION)
play_wav('idle', loop=True) # Play idle sound now
mode = 1 # Idle mode

elif mode >= 1: # If not OFF mode...
x, y, z = accel.acceleration # Read accelerometer
accel_total = x * x + z * z
# (Y axis isn't needed, due to the orientation that the Prop-Maker
# Wing is mounted. Also, square root isn't needed, since we're
# comparing thresholds...use squared values instead.)
if accel_total > HIT_THRESHOLD: # Large acceleration = HIT
play_wav(random.choice(hit_sounds)) # Start playing 'hit' sound
COLOR_ACTIVE = COLOR_HIT # Set color to fade from
mode = 3 # HIT mode
elif mode == 1 and accel_total > SWING_THRESHOLD: # Mild = SWING
play_wav(random.choice(swing_sounds)) # Randomly choose from available swing sounds
led.color = MAIN_COLOR # Set color to main color
mode = 2 # SWING mode
elif mode == 1:
# Idle color
led.color = MAIN_COLOR
elif mode > 1: # If in SWING or HIT mode...
if audio.playing: # And sound currently playing...
if mode == 2: # If SWING,
led.color = MAIN_COLOR
else:
led.color = HIT_COLOR # Set color to hit color
else: # No sound now, but still SWING or HIT modes
play_wav('idle', loop=True) # Resume idle sound
mode = 1 # Return to idle mode
Binary file added TVA_Time_Baton_PropMaker/sounds/hit1.wav
Binary file not shown.
Binary file added TVA_Time_Baton_PropMaker/sounds/hit2.wav
Binary file not shown.
Binary file added TVA_Time_Baton_PropMaker/sounds/hit3.wav
Binary file not shown.
Binary file added TVA_Time_Baton_PropMaker/sounds/hit4.wav
Binary file not shown.
Binary file added TVA_Time_Baton_PropMaker/sounds/hit5.wav
Binary file not shown.
Binary file added TVA_Time_Baton_PropMaker/sounds/hit6.wav
Binary file not shown.
Binary file added TVA_Time_Baton_PropMaker/sounds/idle.wav
Binary file not shown.
Binary file added TVA_Time_Baton_PropMaker/sounds/on.wav
Binary file not shown.
Binary file added TVA_Time_Baton_PropMaker/sounds/swing1.wav
Binary file not shown.
Binary file added TVA_Time_Baton_PropMaker/sounds/swing2.wav
Binary file not shown.
Binary file added TVA_Time_Baton_PropMaker/sounds/swing3.wav
Binary file not shown.
Binary file added TVA_Time_Baton_PropMaker/sounds/swing4.wav
Binary file not shown.
Binary file added TVA_Time_Baton_PropMaker/sounds/swing5.wav
Binary file not shown.
Binary file added TVA_Time_Baton_PropMaker/sounds/swing6.wav
Binary file not shown.

0 comments on commit daa0947

Please sign in to comment.