int closePin = 2; // force close
int bt = 8;
int LED = 13;
uint32_t previousMillis = 0; // time management
uint32_t actMillis = 0; // time management
constexpr uint16_t intervalDoorOpen = 5000; // wie lange soll die Tür offen bleiben
void setup() {
Serial.begin(9600);
pinMode(closePin, INPUT_PULLUP);
pinMode(LED, OUTPUT);
pinMode(bt, INPUT_PULLUP);
}
void doorOpen()
{
Serial.println(F("Tür auf"));
digitalWrite(LED, HIGH);
}
void doorClose()
{
Serial.println(F("Tür zu"));
digitalWrite(LED, LOW);
}
uint16_t showRestInterval(uint32_t const* const prevMillis)
{
uint16_t seconds;
static uint32_t previousMillisShow = 0;
actMillis = millis();
if (actMillis - previousMillisShow > 1000)
{
previousMillisShow = actMillis;
seconds = (intervalDoorOpen - (actMillis - *prevMillis)) / 1000;
Serial.print(F("remaining interval in sec:"));
Serial.println(seconds);
}
return seconds;
}
void loop() {
auswahl();
}
void auswahl () {
static bool printed = false;
if (!printed) {
Serial.println("bt gedrückt?");
printed = true;
}
if (digitalRead(bt) == LOW) {
ablauf();
printed = false;
}
}
void ablauf() {
previousMillis = millis();
doorOpen();
while (millis() - previousMillis <intervalDoorOpen | digitalRead(closePin) == HIGH) {
digitalRead(closePin);
if (!showRestInterval(&previousMillis)) break;
}
doorClose();
auswahl();
}