/*
https://forum.arduino.cc/t/parallel-schalten/1125240
based on my_xy_projekt
*/
struct Actor {
uint8_t outPin;
unsigned long onTime;
unsigned long offTime;
unsigned long switchTime;
};
Actor actors[2];
const size_t numActors = sizeof(actors) / sizeof(actors[0]);
const bool off = LOW; // Relaisbausteine sind oftmals LOW - aktiv...
//unsigned long merker;
//byte schritt = 0;
void setup() {
Serial.begin(115200);
Serial.println(F("\r\nStart..."));
actors[0].outPin = 13;
actors[1].outPin = 12;
for (size_t b = 0; b < numActors; b++) { // durchzählen
pinMode(actors[b].outPin, OUTPUT); // initialisieren
digitalWrite(actors[b].outPin, off); // setzen
}
actors[0].onTime = 1000;
actors[0].offTime = 2000;
actors[1].onTime = 3000;
actors[1].offTime = 4000;
actors[0].switchTime = millis() + 2000; // erste Auslösezeit festlegen
actors[1].switchTime = millis() + 3000;
}
void loop() {
uint32_t myTime = millis(); // aktuelle Zeit merken
for (size_t b = 0; b < numActors; b++) { // Durchzählen
if (digitalRead(actors[b].outPin) == off) { // Der PIN zustand ist gesetzt
if (myTime - actors[b].switchTime > actors[b].offTime) { // und die Zeit abgeaufen?
digitalWrite(actors[b].outPin, !off); // Pin neu setzen
actors[b].switchTime = myTime; // Zeit merken
}
}
else { // PIN zustand ist nicht gesetzt
if (myTime - actors[b].switchTime > actors[b].onTime) { // und Zeit abgelaufen
digitalWrite(actors[b].outPin, off); //
actors[b].switchTime = myTime; //
}
}
}
}