import machine
import time
# Налаштування пінів (Згідно зі схемою diagram.json)
BUZZER_PIN = 18
POT_TONE_PIN = 34 # Потенціометр тону (GPIO34)
POT_TEMPO_PIN = 35 # Потенціометр темпу (GPIO35)
# Ініціалізація динаміка (ШІМ)
buzzer = machine.PWM(machine.Pin(BUZZER_PIN), freq=440, duty_u16=0)
# Ініціалізація потенціометрів як аналогових входів (ADC)
pot_tone = machine.ADC(machine.Pin(POT_TONE_PIN))
pot_tempo = machine.ADC(machine.Pin(POT_TEMPO_PIN))
# Налаштування розрядності АЦП на 12 біт (значення від 0 до 4095)
pot_tone.width(machine.ADC.WIDTH_12BIT)
pot_tempo.width(machine.ADC.WIDTH_12BIT)
# Налаштування згасання сигналу для повного діапазону напруги 3.3В
pot_tone.atten(machine.ADC.ATTN_11DB)
pot_tempo.atten(machine.ADC.ATTN_11DB)
print("Симуляцію запущено! Крутіть потенціометри в процесі роботи.")
while True:
# 1. Зчитуємо значення з обох ручок (від 0 до 4095)
val_tone = pot_tone.read()
val_tempo = pot_tempo.read()
# 2. Перетворюємо значення тону на частоту звуку (від 100 Гц до 2000 Гц)
# Формула масштабування: min_freq + (діапазон * (значення / max_adc))
frequency = int(100 + (1900 * (val_tone / 4095)))
# 3. Перетворюємо значення темпу на тривалість паузи (від 50 мс до 800 мс)
duration = int(50 + (750 * (val_tempo / 4095)))
# 4. Відтворюємо звук із розрахованою частотою
buzzer.freq(frequency)
buzzer.duty_u16(32768) # Вмикаємо звук на 50% гучності
# Звук триває половину часу від загального такту темпу
time.sleep_ms(int(duration / 2))
# 5. Робимо паузу (затишшя) між звуками
buzzer.duty_u16(0)
time.sleep_ms(int(duration / 2))