/*
https://forum.arduino.cc/t/relais-schliesst-kurz-durch-interrupt/1302723/28
Monoflop with Pause
2024-09-19 by noiasca
code not thread
*/
// Relais an Pin 7, Taster an Pin 6
constexpr uint8_t outputPin {7};
constexpr uint8_t startPin {6};
constexpr uint8_t stopPin {2};
uint32_t previousMillis;
enum State {INIT, ACTIVE, BLOCK} state;
void setup() {
Serial.begin(115200);
// Relais wird als OUTPUT (Ausgang) definiert
pinMode(outputPin, OUTPUT);
// der Taster wird als INPUT (Eingang) deklariert
pinMode(startPin, INPUT);
pinMode(stopPin, INPUT);
}
void loop() {
switch (state) {
case INIT :
if (digitalRead(startPin) == HIGH) {
previousMillis = millis();
digitalWrite(outputPin, HIGH);
state = ACTIVE;
Serial.println(F("ACTIVE"));
}
break;
case ACTIVE:
if ( (digitalRead(stopPin) == HIGH) || ( millis() - previousMillis > 5000)) {
previousMillis = millis();
digitalWrite(outputPin, LOW);
state = BLOCK;
Serial.println(F("BLOCK"));
}
break;
case BLOCK :
if (millis() - previousMillis > 3000) {
state = INIT;
Serial.println(F("INIT"));
}
break;
}
}