Arduino-opdrachten/Button-2
Button-2
Leerdoelen | drukknopschakelaar, pulldown weerstand |
Voorkennis | Blink-1, Button-0 |
Onderdelen |
LED, weerstand 220 ohm (rood-rood-bruin-goud), weerstand 10K ohm (bruin-zwart-oranje-goud), drukknopschakelaar x 2 |
Libraries en functies |
Inleiding
Door twee knoppen te gebruiken: één voor het aanzetten en één voor het uitzetten van de LED, krijgen we een eenvoudig programma. Deze opzet heeft ook nog als voordeel dat het niet uitmaakt hoe vaak of hoe lang je een knop indrukt.
Als je een knop vaker achtereen indrukt, heeft dat hetzelfde resultaat als wanneer je de knop éénmaal indrukt. Dit gedrag noemen we wel idempotent. Een ander voorbeeld hiervan is het laden van een webpagina in een browser: als je een pagina meerdere malen achtereen laadt, krijg je (in principe) steeds hetzelfde resultaat. Het opsturen van een formulier vanuit de browser is niet idempotent: de browser vraagt dan ook of je zeker weet dat je dat wilt.
Opbouwen van de schakeling
Begin met de schakeling van Button-1.
Voeg naast de schakelaar nog een tweede toe, op dezelfde manier:
- plaats een drukknopschakelaar over de middenlijn;
- plaats een weerstand van 10kOhm tussen de linkerkolom van deze schakelaar en de 0V-rij (pulldown-weerstand);
- plaats een (gele) draad tussen de linkerkolom van deze schakelaar en pin 3 van de Arduino;
- verbind de rechterkolom van deze schakelaar met de 5V rij.
Testen
Je kunt de werking van een schakelaar testen door een LED te plaatsen tussen de kolommen van deze schakelaar, met de kathode (korte pootje) in de linkerkolom (van de pulldown-weerstand). De LED moet dan direct gaan branden (pulldown-weerstand als serieweerstand). Als je de schakelaar indrukt moet de LED uitgaan.
Schema
Het schema is vrijwel gelijk aan dat van Button-1:
- een schakelaar met pulldown-weerstand verbonden aan pin 2;
- een schakelaar met pulldown-weerstand verbonden aan pin 3;
- een LED met serieweerstand verbonden aan pin 13.
Programma
const int onButton = 2; // pin nr of "on" button
const int offButton = 3; // pin nr of "off" button
const int led = 13; // pin nr of LED
void setup() {
pinMode(led, OUTPUT); // initialize LED pin as output
pinMode(onButton, INPUT); // initialize button pin as input
pinMode(offButton, INPUT); // initialize button pin as input
}
void loop() {
if (digitalRead(onButton) == HIGH) {
digitalWrite(led, HIGH);
}
if (digitalRead(offButton) == HIGH) {
digitalWrite(led, LOW);
}
}
Uitleg van het programma
We gebruiken in dit geval de interne pullup-weerstanden van de Arduino. We hoeven dan geen externe weerstanden te gebruiken. Voor het programma betekent dit het volgende:
- we initialiseren de input-pinnen voor de buttons als input:
pinMode(button, INPUT);
. - de input-waarde van een button is dan
HIGH
als de button ingedrukt is (actief).
We gebruiken 2 buttons:
- indrukken van
onButton
zet de LED uit. - indrukken van
offButton
zet de LED aan.
Merk op dat we in dit geval geen delay
nodig hebben: het maakt niet uit hoe lang je een knop ingedrukt houdt.
Vragen en opdrachten
Eerste experimenten
Wat gebeurt er als je beide knoppen ingedrukt houdt?
- Hint: plaats een
delay(100);
aan het eind van elk IF-statement.
Verdiepingsvragen
Hoe verder?
Deze schakeling kun je gebruiken voor Arduino-opdrachten/Button-dimmer.