from machine import Pin, PWM
import time
# --- Instellingen ---
# Definieer de pinnen voor de knoppen (INPUT met interne PULL_UP)
# Als de knop niet is ingedrukt = 1 (High)
# Als de knop wel is ingedrukt = 0 (Low, verbonden met GND)
knop1 = Pin(22, Pin.IN, Pin.PULL_UP) # Voor 500Hz
knop2 = Pin(21, Pin.IN, Pin.PULL_UP) # Voor 600Hz
knop3 = Pin(19, Pin.IN, Pin.PULL_UP) # Voor 700Hz
# Definieer de buzzer pin (GPIO 15)
buzzer_pin = Pin(25)
buzzer = PWM(buzzer_pin)
# Zet buzzer initieel uit
buzzer.duty(0)
# Variabele om bij te houden welke frequentie nu actief is
# 0 betekent dat de buzzer stil is
huidige_freq = 0
print("Systeem start... Druk op een knop.")
# buzzer.freq(888)
# buzzer.duty(512)
while True:
gewenste_freq = 0
# Check welke knop is ingedrukt.
# We checken op waarde 0 omdat de knop naar GND schakelt.
if knop1.value() == 0:
gewenste_freq = 500
elif knop2.value() == 0:
gewenste_freq = 600
elif knop3.value() == 0:
gewenste_freq = 700
else:
# Geen knop ingedrukt
gewenste_freq = 0
# --- Optimalisatie Logica ---
# Pas de PWM alleen aan als de situatie is veranderd
if gewenste_freq != huidige_freq:
# Update de status variabele
huidige_freq = gewenste_freq
if huidige_freq > 0:
# Er moet geluid komen: stel freq in en zet volume (duty) aan
buzzer.freq(huidige_freq)
# Duty cycle van 512 is ongeveer 50% (max is 1023)
buzzer.duty(512)
print(f"Toon gestart: {huidige_freq} Hz")
else:
# Er moet stilte zijn: zet duty op 0
# We veranderen de freq niet naar 0 om errors te voorkomen, alleen duty
buzzer.duty(0)
print("Stilte")
# Korte pauze om de CPU te ontlasten en dender (bouncing) iets op te vangen
time.sleep(0.01)
500Hz
600Hz
700Hz