Workshop 2
In deze workshop gaan we een drukknop gebruiken.
We gebruiken als basis de opstelling van de workshop Led aan en uit op het breadbord. Hier voegen we een drukknop aan toe.
Benodigdheden
- Microprocessorbord (in deze workshop ESP32-DevKitC Bord)
- 2 x led (kleur maakt niets uit, in deze workshop een rode en een groene led)
- 2 x weerstand van min. 150Ω (max. 1KΩ, in deze workshop 220Ω)
- 1 x weerstand van 10KΩ
- 9 x jumper kabels (in deze workshop 4x zwart, 4x rood en 1x blauw)
- 1 x breadboard
- Programmeer omgeving Arduino IDE
Voor deze onderdelen kun je terecht op websites zoals AZ-Delivery, Hackerstore, Otronic en Ben’s Electronics, waar ik veel van mijn onderdelen koop.
Technische info
Hieronder vind je pagina’s waar dieper wordt ingegaan op de materialen die tijdens deze workshop worden gebruikt, evenals extra informatie.
Breadboard
Aansluiten van de twee leds.
Als je het breadboard van de vorige workshop nog hebt opgesteld, kun je verder gaan naar ‘Aansluiten van de knop’. In afb. 1 zie je dat er twee rode draadjes lopen van GPIO 22 en 23 (plus) naar het breadboard. Vanuit deze rij (verticaal) worden beide draadjes verbonden met een weerstand (220Ω). Deze weerstanden zijn aan de andere zijde verbonden met een van de leds (lange pootje, ook wel anode genoemd). De andere zijde van de leds (korte pootje, ook wel kathode genoemd) worden verbonden met het zwarte draadje. Deze zwarte draadjes zijn weer verbonden met de min rij (bovenste rij met blauwe lijn erboven). Deze rij is door het derde zwarte draadje verbonden met GND (ground/aarde of -) van het microprocessorbord.
Aansluiten van de knop.
We verbinden een rood draadje met de 3,3 Volt (3V3 bij de aansluiting) op de ESP. De andere kant wordt met de plus rij (van de bovenste twee rijen de onderste met de rode lijn eronder) verbonden op het breadboard. Het blauwe draadje wordt verbonden met GPIO 36 op het microprocessorbord en van daaruit op de linkerzijde van de drukknop. De rechterkant van de drukknop wordt door een zwart draadje verbonden met de min rij (bovenste rij met blauwe lijn erboven). We sluiten een weerstand (10KΩ) ook aan de linkerkant van de drukknop. De andere kant van de weerstand wordt door een rood draadje verbonden met de plus rij (van de bovenste twee rijen de onderste met de rode lijn eronder). De weerstand die op deze manier aangesloten wordt, wordt ook wel een pull-up weerstand genoemd.
Opmerking:
De weerstand van de led mag zowel tussen het ledje (kathode) en de min als tussen het ledje (anode) en de plus geplaatst worden.
Programma omschrijving
Arduino programma code (C++)
De Arduino C++ code van het programma.
// Hier maak je een variabele die aangeeft op welke pin het ledje aangesloten zit. int pin1 = 22; // GPIO22 int pin2 = 23; // GPIO23 // Deze pin lees je de status van de drukknop uit int pin3 = 36; // GPIO36 // status van de drukknop wordt in deze variabele opgeslagen int statusPin = 0; // de setup functie wordt een keer uitgevoerd als je het Single Board Computer start of reset. void setup() { // initializeert de digital pinnen 'pin1' en 'pin2' als uitvoer. pinMode(pin1, OUTPUT); pinMode(pin2, OUTPUT); pinMode(pin3, INPUT); } // de loop functie loopt keer op keer opnieuw, het is een eindeloze lus. void loop() { // de status van de drukknop wordt opgeslagen in statusPin statusPin = digitalRead(pin3); /* Op het breadboard wordt gebruik gemaakt van een pull-up weerstand waardoor de uitgelezen waarde 'HIGH' (1 of 'true')is als de drukknop niet ingedrukt is. Dus de leds branden nu. Als je de drukknop indrukt, wordt de waarde die je leest 'LOW' (0 of 'false'). De leds gaan uit. */ digitalWrite(pin1, statusPin ); // laat het ledje branden (HIGH is het voltage niveau, dus 3,3 volt) digitalWrite(pin2, statusPin ); delay(100); }
Uitleg code:
Het programma begint bij regel 1 en gaat daarna verder naar regel 2, 3, 4, 5 en zo voort.
In de regels 2 t/m 9 worden de variabelen gedefinieerd. In regel 9 wordt de variabele ‘pin3’ gedefinieerd en krijgt de waarde 36 toegekend. Dit is dus GPIO36.
setup()
Regel 12 t/m 17 is de ‘setup()’ functie, deze wordt éénmalig uitgevoerd bij elke start of reset (herstart) van het programma.
In regel 9 wordt de status van de drukknop gedefinieerd in variabele ‘statusPin’, deze krijgt de beginwaarde 0. Op regel 16 wordt bepaald dat de GPIO36 als input zal dienen voor de drukknop. Dit wordt met de functie ‘pinMode(pin3, INPUT);’ gedaan.
loop()
Regel 20 t/m 35 is de ‘loop()’ functie, deze wordt na de functie ‘setup()’ uitgevoerd. Deze herhaald zich continue. Dus als regel 34 uitgevoerd is, gaat hij weer naar regel 23. Dit herhaald zich continue en is het eigenlijke uitvoerende gedeelte van het programma.
Regel 23 geven we het commando ‘statusPin = digitalRead(pin3);’ om de status van GPIO36 (pin3) uit te lezen en toe te kennen aan de variabele ‘statusPin’.
Regel 31 en 32 zetten we de leds aan of uit door de waarde van de variabele ‘statusPin’ door te geven met de functies ‘digitalWrite(pin1, statusPin)’ en ‘digitalWrite(pin2, statusPin)’.
Regel 34 gebruiken we het commando ‘delay()’ om een bepaalde tijd te wachten.
Het programma heeft het einde bereikt regel 35 en gaat nu weer terug naar regel 20. Dit gaat zo door totdat je het microprocessorbord uitzet of herstart (reset).
LET OP!!!
C++ is hoofdletter gevoelig, dus ‘digitalRead’ werkt, maar ‘digitalread’ of ‘DigitalRead’ werkt niet.
Bij variabelen is het ook zo, dus Pin1, pin1, PIN1 zijn allemaal verschillende variabelen. Definieer variabelen niet op deze manier, dit is erg verwarrend.
Opdrachten
- Maak een timer programma dat na het indrukken van de drukknop de leds aanzet voor 10 seconden en dan weer uitzet. (lees eerst even over de if-opdracht, dit is een beslissing functie)
- Maak van de drukknop een aan/uit schakelaar. Dus als je hem voor de eerste keer indrukt gaan de leds aan en als je hem weer indrukt gaan de leds uit. En zo verder. (lees eerst even over de bool variabele en !-operator)
Bekijk het filmpje om te zien wat het resultaat is.
Bekijk het filmpje om te zien wat het resultaat is.