Inter­rupt Mor­se­ge­rät Lösung

# define ROT 5 

// nur Port 2 und 3 können mit 
// attachInterrupt angesprochen werden 
# define TASTER 2 

/* 
  je nach Zustand der Variable TasterStatus ist die LED ein- 
  oder ausgeschaltet 
  beim Start des Programms ist sie ausgeschaltet
*/ 
volatile bool TasterStatus = LOW; 

void setup()  
{ 
  pinMode(ROT, OUTPUT); 

  // Eingangspegel auf HIGH setzen 
  pinMode(TASTER, INPUT_PULLUP); 
  
  /*
    wenn der Taster gedrückt wird 
    → Funktion LEDSchalten aufrufen 
    CHANGE → es ist eine Veränderung eingetreten,
    der Taster wurde gedrückt
  */
  attachInterrupt(digitalPinToInterrupt(TASTER), LEDSchalten, CHANGE); 
} 

void loop()  
{ 
  // nichts zu tun 
  // das Programm reagiert nur auf den Interrupt 
} 

void LEDSchalten()  
{ 
  // TasterStatus wird gelesen 
  TasterStatus = digitalRead(TASTER); 

  /*  
    TasterStatus muss "umgedreht" werden 
    weil TasterStatus bei gedrücktem Taster den Wert LOW hat 
    die LED aber leuchten soll 
  */ 
  digitalWrite(ROT, !TasterStatus); 
}