Arduino-opdrachten/Button-2

Uit basis
Naar navigatie springen Naar zoeken springen
Arduino opdrachten

Zie ook Regels en richtlijnen
Zie ook Artikelen bewerken

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

2 schakelaars: LED aan en uit

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

2 schakelaars: LED aan en uit

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

2 schakelaars: LED aan en uit

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:

  1. we initialiseren de input-pinnen voor de buttons als input: pinMode(button, INPUT);.
  2. de input-waarde van een button is dan HIGH als de button ingedrukt is (actief).

We gebruiken 2 buttons:

  1. indrukken van onButton zet de LED uit.
  2. 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.