/* Toggle-schakelaar
  Met een toggle-functie kun je met dezelfde handeling een actuator
  zowel in- als uitschakelen. Voorbeeld:
  knop kort indrukken, LED aan, knop kort indrukken, LED uit etc.
 
Verbind de drukknopschakelaar met +5V en pin D2
Verbind een pull-down weerstand tussen D2 en GND
Gebruik de on-board LED L op poort D13 als LED
*/
 
// Twee constanten vertegenwoordigen pinnen D2 en D13:
const int buttonPin = 2;     // Pinnummer drukknopschakelaar (D12)
const int LedPin =  13;      // Pinnummer LED (D13)
 
// Variabele vertegenwoordigt status van de drukknopschakelaar:
int buttonState = 0;
 
// Twee extra variabelen voor de toggle-functie
int teller = 0;             // teller telt aantal knopindrukken
int buttonState_oud = 0;    // vorige status van de drukknop
 
void setup() {
// Initialiseer digitale poort D13 als uitgang (OUTPUT):
pinMode(LedPin, OUTPUT);
// Initialiseer digital poort D2 als ingang (INPUT):
pinMode(buttonPin, INPUT);
}
 
void loop() {
// Lees de status van de drukknopschakelaar:
buttonState = digitalRead(buttonPin);
 
// vergelijk de status met de vorige status
 if (buttonState != buttonState_oud) {
   // als de status is veranderd, controleer dan HOE
   if (buttonState == 1) {
     // is de verandering van UIT naar AAN
     // verhoog dan de teller met 1:
     teller=teller+1;
   } else {
     // is de verandering van AAN naar UIT
   }
   // Pauzeer na elke knopindruk om bouncing te elimineren
   delay(50);
 }
 // pas de status aan voor de volgende loop
 buttonState_oud = buttonState;
 
// schakel LED aan of uit op basis van teller
 if (teller % 2 == 0) {
   digitalWrite(LedPin, HIGH);
 } else {
   digitalWrite(LedPin, LOW);
 }
}