from machine import DAC, TouchPad, Pin
import time
import math
import array
# ──────── SETTINGS ────────
TOUCH_THRESHOLD = 300 # Adjust per fruit/wire
DAC_PIN = 25 # Use GPIO 25 (DAC1), or 26 (DAC2)
# Frequencies for C major scale
frequencies = [262, 294, 330, 349, 392, 440, 494, 523]
# Touch input pins
touch_pins = [4, 15, 13, 12, 14, 27, 33, 32]
# ──────── INIT ────────
touch_sensors = [TouchPad(Pin(p)) for p in touch_pins]
dac = DAC(Pin(DAC_PIN))
sample_rate = 8000 # Hz
# ──────── SINE TABLE ────────
def make_wave(freq):
samples = 100
wave = array.array("B", [0] * samples)
for i in range(samples):
sine = math.sin(2 * math.pi * i / samples)
wave[i] = int(127 + 127 * sine) # 0–255 for DAC
return wave, int(sample_rate / freq * samples)
# ──────── PLAYBACK ────────
def play_tone(freq, duration=0.25):
wave, delay_us = make_wave(freq)
t_end = time.ticks_add(time.ticks_ms(), int(duration * 1000))
while time.ticks_diff(t_end, time.ticks_ms()) > 0:
for val in wave:
dac.write(val)
time.sleep_us(delay_us)
# ──────── MAIN LOOP ────────
while True:
for i in range(8):
touch_val = touch_sensors[i].read()
if touch_val is not None and touch_val < TOUCH_THRESHOLD:
play_tone(frequencies[i], 0.3)
time.sleep_ms(100) # debounce
time.sleep_ms(20)