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/
.