Na de LED aan en uitschakelen kan je er ook een knop (of digitale input in het algemeen) bij betrekken. Ook hier is een voorbeeldprogramma beschikbaar. Om dit voorbeeldprogramma te openen ga je naar BESTAND -> VOORBEELDEN -> 2. DIGITAL -> BUTTON.
Onderstaande is een voorbeeldprogramma, je moet 2 vervangen door het nummer waar een drukknop op is aangesloten op het KAEDU shield en 13 moet je vervangen door een nummer waar een LED op is aangesloten op het KAEDU shield.
Bijvoorbeeld verander je 2 naar 12 (de meest rechtse drukknop) en 13 naar 3 (rode led nr2)
Later geven we de voorkeur aan de naam BUTTON4 ipv buttonPin en LEDR2 ipv ledPin
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
}
else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}
Hier zie je meteen het gebruik van de tip bij het startprogramma om bovenaan te schrijven welke input en output met de pin verbonden is in plaats van overal de pin te vermelden. Op deze manier kan je bovenaan het nummer veranderen zonder te moeten zoeken waar overal het nummer is vermeld.
Een tweede nieuwigheid is dat men hier ook int Buttonstate = 0 schrijft. Dit doet men om de toestand van de knop op te slaan en met deze opgeslagen toestand verder te werken. Buttonstate is namelijk de naam van een geheugen waar men in eerste instantie de waarde 0 in stopt. Er zijn verschillende soorten geheugens net zoals er bij het versturen van een pakket ook verschillende soorten doosjes zijn. Bij doosjes is omdat het te versturen materiaal allemaal een andere grootte heeft, bij geheugens is dit net hetzelfde. Het type int wordt veelvuldig gebruikt.
Je ziet nu dat er bij setup naast een output nu ook een input vermeld word.
In plaats van direct de output aan te sturen gaat men nu eerst naar de toestand van de knop kijken. Om een led aan of uit te sturen gebruikte men digitalWrite, om van een knop te kijken of hij aan of uit is zal men dus gelijkaardig digitalRead gebruiken. Als het programma deze instructie uitvoert en de knop was op dat moment niet ingedrukt dan zit er een 0 in het geheugen ButtonState, was de knop wel ingedrukt dan was dit een 1.
Naast een knop inlezen en de led aan te sturen gebruikt men in dit voorbeeld ook al direct een controlestructuur, dit is om afhankelijk van de toestand van een geheugen andere code uit te voeren. In dit voorbeeld stelt men de vraag of de knop ingedrukt is IF = ALS en HIGH = INGEDRUKT. Is dit het geval dan voert men de code uit tussen {}
In dit geval is dat de LED aanzetten.
Je krijgt dus in de Nederlandse taal de volgende zin : Als de drukknop is ingedrukt zet je de LED aan.
Achter die code volgt de zin ELSE = ANDERS. Met andere woorden in het andere geval doe je wat bij de Else tussen {} staat. In dit geval is dat de LED uitschakelen.
Je krijgt dus in de Nederlands taal de volgende zin : In het andere geval zet je de LED uit.
Het totale programma zal dus de toestand van de knop bekijken en dan als de drukknop ingedrukt is de LED aanzetten en als dit niet het geval is de LED uitzetten. Aangezien dat programma in loop staat zal dit continu herhaald worden. Met andere woorden vanaf je de knop loslaat gaat de LED uit en vanaf je hem indrukt gaat de LED aan.
TIPS :
Je kan ervoor zorgen dat je een groene en rode led kan gebruiken door bij setup 1 zin bij te plaatsen ? In de loop moet je dan 2 zinnen bij plaatsen.
Je kan dan bij de code die uitgevoerd wordt bij de IF bijvoorbeeld de groene led aanzetten en de rode led uit.
In het geval dat de knop niet ingedrukt is (dus bij Else) kan je dan de groene led uitzetten en de rode led aan.
ONDERZOEK :
– Test eens uit wat het gevolg is als je de 3 lijnen van else{ } in commentaar zet.
Zet deze lijnen daarna terug uit commentaar.
– Test eens uit als je schrijft buttonState == LOW
– Test eens uit als je schrijft buttonState != LOW
Volgende les : uitleg over de controlestructuren (if, if else, if else if)
Je hebt net kennis gemaakt met de controlestructuur IF ELSE, wil je meer controlestructuren leren dan kan je deze tutorial volgen.
Vorige les : Gebruik maken van de Arduino software
Hoe je de Arduino software kan gebruiken wordt hier uitgelegd.
5 reacties op “Digitale input met Arduino”-
-
-
-
-
Overzicht tutorials en demonstraties – Projects4edu
(13 mei 2017 - 17:45)[…] BASIS uitleg Arduino UNO : 1) Starten met Arduino, het laten knipperen van een LED. 2) Instellingen voor de verbinding tussen PC en Arduino UNO ter voorbereiding van programmatie. 3) Starten met Arduino, reageren op het indrukken van een knop. […]
Arduino Uno Rev3 programmeren – Projects4edu
(10 juni 2017 - 15:18)[…] Nu je een uitgang aangestuurd hebt kan je beginnen met het lezen van een input. […]
Tutorial : Arduino programmeertaal codewoorden – Projects4edu
(26 juli 2017 - 15:27)[…] te kunnen registeren terwijl digitaal gebruikt zal worden voor de toestand van een drukknop. DIGITAAL : digitalRead() ANALOOG : […]
Arduino tutorial : controle structuren. – Projects4edu
(31 juli 2017 - 16:39)[…] Hoe we een drukknop inlezen en met die toestand iets doen staat vermeld in deze tutorial. […]
Videotutorial : Gebruik maken van digitale input (KAEDU) – Projects4edu
(5 mei 2018 - 12:55)[…] tutorial in tekstvorm bekijken kan hier. Als de uitdaging geslaagd is dan zou je ongeveer dit resultaat moeten hebben, resultaat is […]