// WERKEN MET EEN INTERRUPT
//
// Een interrupt kan de normale gang van een programma onderbreken
// daarom dus ook de Engelse naam een INTERRUPT
//
// In de setup geef je aan dat je een bepaalde pin zal gebruiken
// als sensor om de interrupt service routine ISR te starten.
// deze sensor registreert dan mogelijks één van volgende scenario's
// FALLING RISING CHANGE
// FALLING als de pin van HIGH naar LOW gaat
// RISING als de pin van LOW naar HIGH gaat
// CHANGE in de twee gevallen.
//
// Bij de arduino zijn slechts twee pinnen (2 en 3) eenvoudig te
// gebruiken als hardware-interrupts. Alle pinnen zijn te gebruiken
// maar dit vergt complexere code.
//
// Indien een ISR start onderbreekt deze de LOOP-functie onmiddellijk.
// een ISR is echter onderworpen aan een aantal regels
//
// Een ISR is zo kort mogelijk
// Je kan geen parameters naar een ISR sturen
// Een ISR kan geen waarde terugsturen dus altijd VOID
// De millis zijn niet beschikbaar
// Delays mogen niet gebruikt worden tenzij met microseconden delayMicroseconds()
// Variabelen die gebruikt worden moeten geinitialiseerd worden met "volatile"
// Niet alle pins hebben een interrupt mogelijkheid (enkel 2 en 3)
#define ledPin 7
volatile bool interruptFlag;
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
attachInterrupt(digitalPinToInterrupt(2), IRS_switchLed, FALLING);
}
void loop() {
if (digitalRead(ledPin)) {
Serial.println("start van Void Loop");
delay(3000);
Serial.println("eind van Void Loop");
delay(10);
Serial.println(interruptFlag);
}
}
void IRS_switchLed() {
digitalWrite(ledPin, !digitalRead(ledPin));
interruptFlag = !interruptFlag;
}