from machine import Pin, ADC, PWM
import utime
# Налаштування аналогового входу для фоторезистора (LDR)
ldr = ADC(Pin(34))
ldr.atten(ADC.ATTN_11DB) # Налаштування діапазону напруги (0 - 3.6В)
# Налаштування ШІМ (PWM) для п'єзодинаміка
buzzer = PWM(Pin(25))
# Функція для лінійної інтерполяції (мапування значень)
def map_value(x, in_min, in_max, out_min, out_max):
return int((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
print("Синтезатор запущено! Змінюйте освітленість над датчиком...")
while True:
# Зчитуємо значення освітленості (від 0 до 4095)
light_level = ldr.read()
# Перетворюємо рівень світла в частоту звуку (наприклад, від 200 Гц до 2000 Гц)
# Якщо темно -> звук низький, якщо світло -> звук високий
frequency = map_value(light_level, 0, 4095, 200, 2000)
# Обмеження, щоб частота не виходила за межі безпечних значень
if frequency < 200: frequency = 200
if frequency > 2000: frequency = 2000
# Запуск звуку з розрахованою частотою та гучністю (duty cycle 512 - це 50%)
buzzer.freq(frequency)
buzzer.duty(512)
# Вивід інформації в консоль для перевірки
print(f"Світло: {light_level} | Частота звуку: {frequency} Гц")
# Невелика затримка для плавності звучання
utime.sleep_ms(50)