Add prearm state and abstract buttons

master
Tanner Collin 6 years ago
parent f56be14c80
commit 5c2938ad4f
  1. 44
      firmware/firmware.ino

@ -36,10 +36,10 @@ enum wifiStates
enum lockStates
{
LOCK_OFF,
LOCK_PREARM,
LOCK_ARMED,
LOCK_ON_PRESSED,
LOCK_ON,
LOCK_OFF_PRESSED,
} lockState = LOCK_OFF;
enum commStates
@ -112,6 +112,14 @@ void processWifiState()
}
}
bool greenButton() { return digitalRead(GREEN_BUTTON_PIN) == BUTTON_CLOSED; }
bool redButton() { return digitalRead(RED_BUTTON_PIN) == BUTTON_CLOSED; }
void greenLEDOn() { digitalWrite(GREEN_LED_PIN, LED_ON); }
void greenLEDOff() { digitalWrite(GREEN_LED_PIN, LED_OFF); }
void redLEDOn() { digitalWrite(RED_LED_PIN, LED_ON); }
void redLEDOff() { digitalWrite(RED_LED_PIN, LED_OFF); }
void processLockState()
{
switch (lockState) {
@ -121,25 +129,33 @@ void processLockState()
digitalWrite(RELAY_PIN, RELAY_OPEN);
break;
case LOCK_PREARM:
if (!greenButton() && !redButton()) {
if (LOGGING) Serial.println("[INFO] Arming interlock.");
lockState = LOCK_ARMED;
} else {
lockState = LOCK_OFF;
}
break;
case LOCK_ARMED:
digitalWrite(GREEN_LED_PIN, LED_OFF);
digitalWrite(RED_LED_PIN, LED_ON);
digitalWrite(RELAY_PIN, RELAY_OPEN);
if (digitalRead(RED_BUTTON_PIN) == BUTTON_CLOSED) {
if (redButton()) {
if (LOGGING) Serial.println("[INFO] Unarming interlock.");
lockState = LOCK_OFF_PRESSED;
} else if (digitalRead(GREEN_BUTTON_PIN) == BUTTON_CLOSED) {
} else if (greenButton()) {
if (LOGGING) Serial.println("[INFO] On button pressed.");
lockState = LOCK_ON_PRESSED;
}
break;
case LOCK_ON_PRESSED:
if (digitalRead(RED_BUTTON_PIN) == BUTTON_CLOSED) {
if (LOGGING) Serial.println("[ERROR] Both buttons pressed, aborting.");
if (redButton()) {
if (LOGGING) Serial.println("[ERROR] Off button pressed, aborting.");
lockState = LOCK_OFF_PRESSED;
} else if (digitalRead(GREEN_BUTTON_PIN) == BUTTON_OPEN) {
} else if (!greenButton()) {
if (LOGGING) Serial.println("[INFO] Turning machine on.");
lockState = LOCK_ON;
}
@ -150,14 +166,8 @@ void processLockState()
digitalWrite(RELAY_PIN, RELAY_CLOSED);
if (digitalRead(RED_BUTTON_PIN) == BUTTON_CLOSED) {
if (redButton()) {
if (LOGGING) Serial.println("[INFO] Off button pressed.");
lockState = LOCK_OFF_PRESSED;
}
break;
case LOCK_OFF_PRESSED:
if (digitalRead(RED_BUTTON_PIN) == BUTTON_OPEN) {
if (LOGGING) Serial.println("[INFO] Turning machine off.");
lockState = LOCK_OFF;
}
break;
@ -229,11 +239,9 @@ void processCommState()
if (LOGGING) Serial.println(payload);
String action = deserializeJson(payload);
if (action == "arm" && lockState == LOCK_OFF && digitalRead(GREEN_BUTTON_PIN) == BUTTON_OPEN) {
lockState = LOCK_ARMED;
} else if (action == "disarm" && lockState == LOCK_ARMED) {
lockState = LOCK_OFF;
} else if (action == "disarm" && lockState == LOCK_ON) {
if (action == "arm" && lockState == LOCK_OFF) {
lockState = LOCK_PREARMED;
} else if (action == "disarm") {
lockState = LOCK_OFF;
}

Loading…
Cancel
Save