Ga naar hoofdinhoud

3.3 Opdracht: een aan/uit-knop

Tijd om input en output te combineren. In de vorige les ging de LED alleen aan zolang je de knop ingedrukt hield. Nu maak je een echte aan/uit-schakelaar: één keer drukken zet hem aan, nog een keer drukken zet hem uit.

Simulator laden...

Opdracht 3.3.a: Toggle met een knop

Maak een sketch waarbij de LED van stand wisselt elke keer dat je de knop indrukt. Sluit een knop aan op pin 2 en gebruik de LED op pin 13.

Klik hier voor een tip!

Je hebt een variabele nodig die onthoudt of de LED aan of uit is, bijvoorbeeld een bool aan. Wissel die om bij een druk: aan = !aan;. Voeg na een druk een klein delay() toe zodat één druk niet als tien drukken telt.

Klik hier voor de oplossing!
bool aan = false;

void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
}

void loop() {
if (digitalRead(2) == LOW) {
aan = !aan;
digitalWrite(13, aan);
delay(250);
}
}

aan = !aan; draait de waarde om: van false naar true en terug. De delay(250) voorkomt dat één druk meerdere keren telt.

info

Dit kleine delay() is een eenvoudige manier om "denderen" van de knop op te vangen. Een nettere manier (debouncing met millis()) leer je in 6.1 delay vs millis.