Back to: Multiplier Event Luxembourg
import math
import time
from adafruit_circuitplayground import cp
# These are the frequencies of the three notes.
note1 = 261.63
note2 = 293.66
note3 = 329.63
# If the balance board tilts beyond "tilt" degrees, different notes will be played.
tilt = 7
# Time (in seconds) to keep a horizontal position before note2 is played.
# This allows to switch from note1 to note3 (or vice versa) without playing note2.
horizontal = 0.7
# Initialise note, now and sound.
note = 0
now = time.monotonic()
sound = False
# Loop forever
while True:
if cp.button_a:
sound = True
elif cp.button_b:
cp.stop_tone()
cp.pixels.fill((0, 0, 0))
sound = False
if not sound:
continue
# Initialise a_x, a_y, and a_z.
a_x = 0
a_y = 0
a_z = 0
# Take 10 measurements for a_x, a_y, and a_z.
for count in range(10):
x, y, z = cp.acceleration
a_x = a_x + x
a_y = a_y + y
a_z = a_z + z
time.sleep(0.02)
# Calculate the average of the 10 measurements.
a_x = a_x / 10
a_y = a_y / 10
a_z = a_z / 10
# Compute acceleration using norm.
acceleration = math.sqrt(a_x*a_x + a_y*a_y + a_z*a_z)
# Compute 𝛼 (atan returns radians), convert it to degrees,
# then convert it to an integer.
alpha = int(math.degrees(math.atan(a_x / a_z)))
# The board's tilt determines the note played and the color of the NeoPixels.
if alpha > tilt:
if note != 3:
note = 3
cp.stop_tone()
cp.pixels.fill((220, 20, 60))
cp.start_tone(note3)
now = time.monotonic()
elif alpha < -tilt:
if note != 1:
note = 1
cp.stop_tone()
cp.pixels.fill((0, 128, 0))
cp.start_tone(note1)
now = time.monotonic()
else:
if note != 2:
note = 2
cp.stop_tone()
if (now + horizontal) > time.monotonic():
cp.pixels.fill((255, 99, 71))
cp.start_tone(note2)
