You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.9 KiB
76 lines
1.9 KiB
#include "lock.h" |
|
|
|
void processLockState() |
|
{ |
|
static uint16_t lockArmedTimeoutCount; |
|
|
|
if (lockState != LOCK_ARMED) lockArmedTimeoutCount = 0; |
|
|
|
switch (lockState) { |
|
case LOCK_OFF: |
|
if (LEDState != LED_ERROR) LEDState = LED_OFF; |
|
|
|
relayOff(); |
|
break; |
|
case LOCK_PREARM: |
|
if (!greenButton() && !redButton()) { |
|
if (SERIAL_LOGGING) Serial.println("[INFO] Arming interlock."); |
|
logEvent(LOG_LOCK_ARMED); |
|
lockState = LOCK_ARMED; |
|
} else { |
|
if (SERIAL_LOGGING) Serial.println("[ERROR] Buttons held, aborting."); |
|
logEvent(LOG_LOCK_ERROR); |
|
LEDState = LED_ERROR; |
|
lockState = LOCK_OFF; |
|
} |
|
break; |
|
case LOCK_ARMED: |
|
if (LEDState != LED_ERROR) LEDState = LED_ARMED; |
|
|
|
relayOff(); |
|
lockArmedTimeoutCount++; |
|
|
|
if (redButton()) { |
|
if (SERIAL_LOGGING) Serial.println("[INFO] Unarming interlock."); |
|
logEvent(LOG_LOCK_DISARM); |
|
lockState = LOCK_OFF; |
|
} else if (greenButton()) { |
|
if (SERIAL_LOGGING) Serial.println("[INFO] On button pressed."); |
|
lockState = LOCK_ON_PRESSED; |
|
} |
|
|
|
if (lockArmedTimeoutCount > LOCK_ARMED_TIMEOUT) { |
|
if (SERIAL_LOGGING) Serial.println("[INFO] Arming timed out, disarming."); |
|
logEvent(LOG_LOCK_TIMEOUT); |
|
lockState = LOCK_OFF; |
|
LEDState = LED_ERROR; |
|
} |
|
break; |
|
case LOCK_ON_PRESSED: |
|
if (redButton()) { |
|
if (SERIAL_LOGGING) Serial.println("[ERROR] Off button pressed, aborting."); |
|
logEvent(LOG_LOCK_ERROR); |
|
lockState = LOCK_OFF; |
|
} else if (!greenButton()) { |
|
if (SERIAL_LOGGING) Serial.println("[INFO] Turning machine on."); |
|
logEvent(LOG_LOCK_ON); |
|
lockState = LOCK_ON; |
|
} |
|
break; |
|
case LOCK_ON: |
|
if (LEDState != LED_ERROR) LEDState = LED_ON; |
|
|
|
relayOn(); |
|
|
|
if (redButton()) { |
|
if (SERIAL_LOGGING) Serial.println("[INFO] Off button pressed."); |
|
logEvent(LOG_LOCK_OFF); |
|
lockState = LOCK_OFF; |
|
} |
|
break; |
|
default: |
|
if (SERIAL_LOGGING) Serial.println("[ERROR] Invalid lock state."); |
|
lockState = LOCK_OFF; |
|
break; |
|
} |
|
}
|
|
|