Arduino Nano - Knop
Deze tutorial legt uit hoe u een Arduino Nano gebruikt met een knop. We leren in detail:
- Hoe u de knop aansluit op de Arduino Nano
- Hoe u de Arduino Nano programmeert om de status van de knop te lezen
- Hoe u de Arduino Nano programmeert om het indrukken en loslaten van de knop te detecteren
- Hoe u het probleem van “floating input” voorkomt bij gebruik van de knop met Arduino Nano
- Hoe u het “chattering”-probleem voorkomt bij gebruik van de knop met Arduino Nano
De knop wordt ook wel een pushbutton, tactiele knop of momentary switch genoemd. Het is een fundamenteel component dat vaak wordt gebruikt in Arduino-projecten. Het is eenvoudig te gebruiken, maar kan voor beginners verwarrend zijn vanwege mechanische en fysieke aspecten en de verschillende manieren waarop het gebruikt kan worden. Deze tutorial maakt het eenvoudiger voor beginners.
Hardware Benodigd
Of u kunt de volgende kits kopen:
| 1 | × | DIYables Sensorkit (30 sensoren/displays) | |
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
Over de Knop
Beginners komen vaak twee veelvoorkomende problemen tegen bij het gebruik van een knop:
1. Floating input probleem:
- Symptoom: De gelezen waarde van de invoerpin komt niet overeen met de ingedrukte status van de knop.
- Oorzaak: De invoerpin is niet aangesloten op een pull-up of pull-down weerstand.
- Oplossing: Gebruik een pull-up of pull-down weerstand, de stappen hiervoor worden uitgelegd in deze tutorial.
2. Chattering fenomeen:
- Symptoom: De knop wordt maar één keer ingedrukt, maar de Arduino-code detecteert meerdere drukken.
- Oorzaak: Mechanische en fysieke eigenschappen zorgen ervoor dat de knop (of schakelaar) status meerdere keren snel wisselt tussen LOW en HIGH.
- Oplossing: Om dit op te lossen komen debounce-technieken aan bod in de tutorial Arduino Nano - Knop - Debounce. Alleen toepassingen die een precieze detectie van het aantal drukken vereisen, hoeven hier rekening mee te houden.
※ Notiz:
Verwar de knop niet met de volgende:
De Pinout van de Knop
De push button, ook wel pushbutton, tactiele knop of momentary switch genoemd, is een type schakelaar die sluit zodra de knop wordt ingedrukt en open gaat bij loslaten. Er bestaan verschillende soorten push buttons, die grofweg in twee groepen ingedeeld kunnen worden:
- PCB-mount push button (geschikt voor montage op een breadboard)
- Paneelmonteerbare knop (panel-mount push button)

Een PCB-mount knop heeft meestal vier pinnen.

Deze pinnen zijn echter steeds per paar intern verbonden. Daardoor hoeven er eigenlijk maar twee van de vier pinnen gebruikt te worden die niet intern verbonden zijn.
Er zijn vier mogelijke aansluitwijzen voor de knop, waarvan er twee symmetrisch zijn (zoals te zien op de afbeelding).

? Waarom worden er van een knop met vier pinnen toch maar twee pinnen gebruikt?
⇒ Om ervoor te zorgen dat de knop stevig op de PCB (printed circuit board) gemonteerd zit en bestand is tegen indrukking.
Een paneelknop (panel-mount button) heeft meestal twee pinnen.

De push button module heeft een ingebouwde pull-down weerstand, die ervoor zorgt dat de uitgang LOW blijft wanneer de knop niet is ingedrukt. Deze module heeft drie pinnen:
- GND: Verbind deze pin met massa (ground).
- VCC: Verbind deze pin met 5V of 3.3V voeding.
- OUT: Verbind deze pin met een digitale invoer op uw Arduino.
Met deze configuratie geeft de module LOW als de knop NIET is ingedrukt en geeft HIGH wanneer de knop wel wordt ingedrukt.
Hoe Werkt Het
- Wanneer de knop niet is ingedrukt, zijn pin A en pin B niet verbonden.
- Wanneer de knop wel wordt ingedrukt, zijn pin A en pin B met elkaar verbonden.

Arduino Nano - Knop
Een van de pinnetjes van een knop wordt verbonden met VCC of GND. Het andere pinnetje wordt verbonden met een pin van de Arduino Nano. Door de status van die Arduino Nano-pin, die als input is ingesteld, te lezen, kunnen we bepalen of de knop wel of niet is ingedrukt.
Knopstatus en Indrukstatus
De verbinding tussen de knop en Arduino Nano en de configuratie van de Arduino-pin bepalen de relatie tussen de status van de knop en de indrukstatus.
Er zijn twee manieren om een knop met Arduino te gebruiken:
- Eén pin van de knop is aangesloten op VCC, de andere op een Arduino-pin met een pull-down weerstand
- Wanneer de knop wordt ingedrukt, zal de Arduino-pin HIGH zijn. Anders is de Arduino-pin LOW
- In dit geval is een externe weerstand vereist.
- Wanneer de knop wordt ingedrukt, is de Arduino-pin LOW. Anders is deze HIGH
- We kunnen een interne of externe pull-up weerstand gebruiken. De interne weerstand is standaard ingebouwd in de Arduino Nano en kan ingesteld worden met Arduino code.
- Als u géén externe pull-up of pull-down weerstand gebruikt, zal de status van de invoerpin “zwevend” zijn wanneer de knop NIET is ingedrukt. Dit betekent dat de status HIGH of LOW kan zijn (onstabiel), wat leidt tot foutieve detectie.
- Slechte praktijk: Stel de Arduino-pin in als input (pinMode(BUTTON_PIN, INPUT)) zonder externe pull-up of pull-down weerstanden te gebruiken.
- Beste praktijk: Stel de Arduino-pin in als interne pull-up input (pinMode(BUTTON_PIN, INPUT_PULLUP)). Dit vereist geen externe weerstanden.
*ii. Eén pin van de knop is aangesloten op GND, de andere op een Arduino-pin met een pull-up weerstand
※ Notiz:
Voor het gemak van beginners gebruikt deze tutorial de meest eenvoudige methode: het instellen van de Arduino Nano-pin als interne pull-up input zonder externe weerstand. Beginners hoeven zich dus geen zorgen te maken over het aansluiten van pull-up/-down weerstanden. Alles gebeurt met Arduino Nano code.
Bedradingsschema
- Bedradingsschema tussen Arduino Nano en PCB-mount knop

This image is created using Fritzing. Click to enlarge image
- Bedradingsschema tussen Arduino Nano en paneelknop (twee pinnen)

This image is created using Fritzing. Click to enlarge image
Programmeren voor de Knop
- Gebruik de functie pinMode() om de Arduino Nano-pin in te stellen als interne pull-up input.
- Bijvoorbeeld, pin 2:
- Gebruik vervolgens de functie digitalRead() om de status van de Arduino Nano-pin uit te lezen.
※ Notiz:
Er zijn twee veelvoorkomende gebruiksscenario’s:
- Ten eerste: Als de invoer HIGH is, voer dan één actie uit. Als de invoer LOW is, voer de tegenovergestelde actie uit.
- Ten tweede: Als de invoer wisselt van LOW naar HIGH (of van HIGH naar LOW), voer dan een actie uit.
We kiezen er één op basis van de toepassing. Bijvoorbeeld bij het gebruik van een knop om een LED te bedienen:
- Wilt u dat de LED AAN is als de knop wordt ingedrukt en UIT als de knop NIET wordt ingedrukt, gebruik dan het eerste scenario.
- Wilt u dat de LED elke keer dat u de knop indrukt wisselt tussen AAN en UIT, gebruik dan het tweede scenario.
Detecteren van statusverandering van LOW naar HIGH
Arduino Nano Code
Snelle Stappen
- Verbind uw Arduino Nano via USB met een computer.
- Start de Arduino IDE, selecteer het juiste bord en de juiste poort.
- Kopieer onderstaande code en open deze in Arduino IDE.
- Klik op de knop Upload in Arduino IDE om de code te compileren en naar Arduino Nano te uploaden.

- Open de Seriële Monitor.
- Druk meerdere keren op de knop en laat los.
- Bekijk de resultaten in de Seriële Monitor.
1 is HIGH, 0 is LOW.
Code Uitleg
Bekijk de regel-voor-regel uitleg in de commentaren van de broncode!
Arduino Nano Code Wijzigen
Laten we de code aanpassen zodat deze het indrukken en loslaten van de knop kan herkennen.
Snelle Stappen
- Pas de code als volgt aan:
- Klik op de knop Upload in Arduino IDE om de code te compileren en te uploaden naar het Arduino Nano bord.

- Open de Seriële Monitor.
- Druk de knop in en houd vast.
- Laat de knop los en bekijk het resultaat in de Seriële Monitor.
※ Notiz:
- Zelfs als u de knop maar één keer indrukt en loslaat, kan de output in de Seriële Monitor meerdere druk- en loslaatmeldingen tonen. Dit is het typische gedrag van een knop en wordt het "chattering fenomeen" genoemd. Voor een oplossing verwijzen wij naar de tutorial Arduino Nano - Knop Debounce.
- Wij hebben een bibliotheek ontwikkeld, ezButton, om het werken met meerdere knoppen eenvoudiger te maken voor beginners. Meer informatie vindt u in de ezButton bibliotheek tutorial.
- Voor de knopmodule stelt u de pin in met pinMode(BUTTON_PIN, INPUT). De module geeft LOW wanneer niet ingedrukt en HIGH tijdens indrukken.
Video Tutorial
We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.
Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u het gebruik van de knop met Arduino Nano helemaal onder de knie te krijgen.
Daag uzelf uit
- Wanneer de knop wordt ingedrukt, gaat de LED aan.
- Wanneer de knop niet ingedrukt is, gaat de LED uit.
- Elke keer dat u de knop indrukt, wisselt de LED tussen AAN en UIT.
Aanvullende Kennis
Wanneer is het gepast om een pull-down of pull-up weerstand te gebruiken voor een inputpin? En wanneer juist niet?
- Als een sensor slechts gesloten of open kan zijn, is een pull-up of pull-down weerstand nodig om de signalen LOW en HIGH te maken. Voorbeelden hiervan zijn pushknoppen, schakelaars en magneetschakelaars (deursensoren).
- Als een sensor twee gedefinieerde spanningsniveaus heeft (LOW en HIGH), is geen pull-up of pull-down weerstand nodig. Bijvoorbeeld bewegingssensoren en touch sensoren.