/*
Forum: https://forum.arduino.cc/t/blink-without-delay-leuchtturm-roter-sand/1328810/25
Wokwi: https://wokwi.com/projects/416378096722296833
Mit einer Klasse gelöst ...
Ergänzung am 08.12.2024
pinMode darf bei AVR Arduinos im Konstruktor einer Klasse aufgerufen werden,
da die Ports bei diesen Prozessoren nicht zuvor initialisiert werden müssen.
Daher wird bei Kompilierung für andere Prozessortypen mittels #ifndef das Kompilieren
unterbrochen und eine Fehlermeldung erzeugt
Mit besten Grüßen an combie:
(siehe https://forum.arduino.cc/t/blink-without-delay-leuchtturm-roter-sand/1328810/45)
*/
#ifndef __AVR__
#error Nur fuer AVR Arduinos!
#endif
const byte feuer1Pin {2};
const byte feuer2Pin {3};
const unsigned long KURZ {1250};
const unsigned long LANG {4000};
class feuerClass {
private:
byte pin;
byte step;
byte blinkType;
unsigned long lastChange = 0;
unsigned long delta = KURZ;
public:
feuerClass(byte aPin,byte blinkT){
pin = aPin;
pinMode(pin,OUTPUT);
blinkType = blinkT;
step = 0;
}
void blink(){
if (millis()-lastChange > delta){
lastChange = millis();
digitalWrite(pin, !(step % 2));
delta = (step == 3) ? LANG : KURZ;
if (blinkType == 4) {
Serial.print(step);
Serial.print('\t');
Serial.print(delta);
Serial.println(step % 2 ? "\tAus" : "\tAn");
}
step++;
step %= blinkType;
}
}
};
feuerClass feuer1(feuer1Pin,2);
feuerClass feuer2(feuer2Pin,4);
void setup() {
Serial.begin(115200);
}
void loop() {
feuer1.blink();
feuer2.blink();
}