class TimerOFF
{
private:
uint8_t m_pinOut;
uint32_t m_activeTime;
uint32_t m_ToffTime;
bool m_rising;
public:
TimerOFF(uint32_t _time, uint8_t _pin) {
m_rising = false;
m_ToffTime = _time;
m_pinOut = _pin;
pinMode(m_pinOut, OUTPUT);
}
void run(bool& input) {
if(input && !m_rising) {
m_rising = true;
m_activeTime = millis();
digitalWrite(m_pinOut, HIGH);
}
if(millis() - m_activeTime > m_ToffTime ) {
m_rising = false;
digitalWrite(m_pinOut, LOW);
}
}
};
// Temporizzatore con ritardo alla diseccitazione NON bloccante
#define BUTTON 12
#define LED_GRN 6
#define LED_RED 7
TimerOFF redLed(2000, LED_RED);
TimerOFF greenLed(5000, LED_GRN);
void setup() {
pinMode(BUTTON, INPUT_PULLUP);
}
void loop() {
// Esecuzione del timer con ritardo alla diseccitazione
bool sigInput = digitalRead(BUTTON) == LOW;
redLed.run(sigInput);
greenLed.run(sigInput);
}