Bibliothek TimerOne.h

Eine einfache Interrupt-Zeitsteuerung ermöglicht die Bibliothek TimerOne.h.
Leider kann man nur eine einzige Prozedur damit aufrufen.
Eine Parameterübergabe an die Interrupt-Funktion wie z.B. blinken(ledpin) ist auch nicht möglich.

Die aktuelle Version von TimerOne.h gibt es hier:

https://code.google.com/archive/p/arduino-timerone/downloads

Hier der Democode:

// Einfache Zeitsteuerung mit Timer-Interrupts
// Quelle: http://playground.arduino.cc/Deutsch/HalloWeltMitInterruptUndTimerlibrary
// Verwendet wird die Bibliothek TimerOne.h
// Download: http://playground.arduino.cc/uploads/Code/TimerOne.zip
// TimerOne.zip entpacken und in den Ordner /Arduino/libraries kopieren

// Die LED ist mit Vorwiderstand 470 Ohm an Digital-Port 13 angeschlossen


#include "TimerOne.h"
#define LEDPIN 13
#define BLINKFREQUENZ 1 // Sekunde

void setup()   {
  pinMode(LEDPIN, OUTPUT);
  Timer1.initialize(BLINKFREQUENZ * 1000000);
  Timer1.attachInterrupt(blinken);
}

// Ganz genial ist es hier gelöst, den Status der LED
// einfach abzufragen (digitalRead) und dann einfach zu negieren.
// Das "spart" globale Variablen, die Speicher "fressen"

void blinken() {
  digitalWrite(LEDPIN, digitalRead(LEDPIN) ^ 1);
}


void loop()    {
  // Hier könnt Ihr nun ganz normal euer Programm
  // einfügen.
  // Die Led wird nun unabhängig von eurem Programmcode
  // jede Sekunde einmal aufblinken.
}

 

 


Sehr schöne Anleitungen, wie man selbst Timer-Interrupt-Routinen hardware-nah programmieren kann, gibt es hier:

https://oscarliang.com/arduino-timer-and-interrupt-tutorial/

http://www.instructables.com/id/Arduino-Timer-Interrupts/

.