/*
erste Gehversuche mit OOP
https://forum.arduino.cc/t/mein-erster-oop-versuch/1235082
https://wokwi.com/projects/392258781793396737
2024-03-13 läuffähig gemacht von noiasca
code im Thread
*/
class TTimer {
private:
using CallBack = void (*)(void); // nimm using statt den typdef
CallBack func;
unsigned long period;
unsigned long currentTime;
unsigned long startTime;
bool t_activ = false;
public:
void activ(bool val) { // timer aktivieren / deaktivieren
t_activ = val;
if (t_activ) {
startTime = millis();
}
}
void onTimer(CallBack func) { // Funktion übergeben die aufgerufen werden soll
this->func = func;
}
void setTimer(unsigned long t_msec) { // Intervall des Timer's
period = t_msec;
}
void tic() {
currentTime = millis();
if (t_activ) {
if (currentTime - startTime >= period) {
startTime = currentTime; // das hat gefehlt funktional
if (func) func(); // das würde ich absichern, falls du den callback nicht übergeben hättest
}
}
}
};
bool toggle;
TTimer myTimer;
constexpr uint8_t outputPin = 13;
void setup() {
Serial.begin(115200);
pinMode(outputPin, OUTPUT); // put your setup code here, to run once:
myTimer.setTimer(400);
myTimer.onTimer(blinken);
myTimer.activ(true);
}
void loop() {
myTimer.tic();
}
void blinken() {
Serial.print("."); // nur debug check obs aufgerufen wird
toggle = !toggle;
toggle ? digitalWrite(outputPin, LOW) : digitalWrite(outputPin, HIGH) ;
}