diff --git a/firmware/core/peripheral.cpp b/firmware/core/peripheral.cpp index 5147d69..e01ef80 100644 --- a/firmware/core/peripheral.cpp +++ b/firmware/core/peripheral.cpp @@ -48,8 +48,9 @@ } break; case DoorPreparedOpen: - if (millis() - preparedTimer > DoorOpenTimeOut) { + if (millis() - preparedTimer > DoorPreparedOpenTimeOut) { digitalWrite(lockMagnetPin, HIGH); + openedTimer = millis(); state = DoorOpened; Serial.println("DoorOpened"); sendEventPacket(DoorDidOpen); @@ -61,6 +62,18 @@ state = DoorLocked; Serial.println("DoorLocked"); sendEventPacket(DoorDidClose); + } else if(millis() - openedTimer > DoorOpenedTimeOut) { + Serial.println("DoorOpenTimedOut"); + state = DoorOpenTimedOut; + return true; + } + break; + case DoorOpenTimedOut: + if (!detect()) { + digitalWrite(lockMagnetPin, HIGH); + state = DoorLocked; + Serial.println("DoorLocked"); + sendEventPacket(DoorDidClose); } break; } diff --git a/firmware/core/peripheral.h b/firmware/core/peripheral.h index 18d9500..5d29c6b 100644 --- a/firmware/core/peripheral.h +++ b/firmware/core/peripheral.h @@ -9,16 +9,17 @@ #define DetectorSwitchDelay 80 #define LongPressThreshold 3000 -#define DoorOpenTimeOut 5000 +#define DoorPreparedOpenTimeOut 5000 +#define DoorOpenedTimeOut 20000 class Door { enum DoorStateDef { - DoorLocked, DoorPreparedOpen, DoorOpened + DoorLocked, DoorPreparedOpen, DoorOpened, DoorOpenTimedOut }; DoorStateDef state; - unsigned long preparedTimer; + unsigned long preparedTimer, openedTimer; unsigned long lastDectTime; unsigned char lastDectVal; bool detect(); //return true if lock detected door opened