diff --git a/bitlair_doorduino/bitlair_doorduino.ino b/bitlair_doorduino/bitlair_doorduino.ino index 41ca375..6fc58e9 100644 --- a/bitlair_doorduino/bitlair_doorduino.ino +++ b/bitlair_doorduino/bitlair_doorduino.ino @@ -7,9 +7,10 @@ #include "Entropy.h" #include "sha1.h" -#define PIN_HORN 6 -#define PIN_OPEN 5 -#define PIN_CLOSE 4 +#define PIN_CLOSE 4 +#define PIN_OPEN 5 +#define PIN_LOCK 6 +#define PIN_UNLOCK 7 #define PIN_1WIRE 13 #define PIN_LEDGREEN 10 @@ -147,7 +148,8 @@ void setup() pinMode(PIN_OPEN, OUTPUT); pinMode(PIN_CLOSE, OUTPUT); - pinMode(PIN_HORN, OUTPUT); + pinMode(PIN_LOCK, OUTPUT); + pinMode(PIN_UNLOCK, OUTPUT); pinMode(PIN_LEDGREEN, OUTPUT); pinMode(PIN_LEDRED, OUTPUT); @@ -492,8 +494,45 @@ void ParseCMD(char* cmdbuf, uint8_t cmdbuffill) } } -#define TOGGLE_TIME 2500 -#define BUTTON_TIME 250 +void OpenLock() { + // Lock motor has 200ms lead time and 200ms overlap + digitalWrite(PIN_LOCK, HIGH); + DelayLEDs(200); + digitalWrite(PIN_OPEN, HIGH); + DelayLEDs(200); + digitalWrite(PIN_LOCK, LOW); + DelayLEDs(4800); + digitalWrite(PIN_OPEN, LOW); + DelayLEDs(100); + + // Back up a bit + digitalWrite(PIN_CLOSE, HIGH); + DelayLEDs(400); + digitalWrite(PIN_CLOSE, LOW); + DelayLEDs(100); + + // Unlock motor + digitalWrite(PIN_UNLOCK, HIGH); + DelayLEDs(100); + digitalWrite(PIN_UNLOCK, LOW); +} + +void CloseLock() { + // Lock motor has 200ms lead time and 200ms overlap + digitalWrite(PIN_LOCK, HIGH); + DelayLEDs(200); + digitalWrite(PIN_CLOSE, HIGH); + DelayLEDs(200); + digitalWrite(PIN_LOCK, LOW); + DelayLEDs(4800); + digitalWrite(PIN_CLOSE, LOW); + DelayLEDs(100); + + // Unlock motor + digitalWrite(PIN_UNLOCK, HIGH); + DelayLEDs(100); + digitalWrite(PIN_UNLOCK, LOW); +} void ToggleLock() { @@ -501,25 +540,13 @@ void ToggleLock() { g_lockopen = false; Serial.println("closing lock"); - for (uint8_t i = 0; i < 3; i++) - { - digitalWrite(PIN_CLOSE, HIGH); - DelayLEDs(BUTTON_TIME); - digitalWrite(PIN_CLOSE, LOW); - DelayLEDs(TOGGLE_TIME - BUTTON_TIME); - } + CloseLock(); } else { g_lockopen = true; Serial.println("opening lock"); - for (uint8_t i = 0; i < 3; i++) - { - digitalWrite(PIN_OPEN, HIGH); - DelayLEDs(BUTTON_TIME); - digitalWrite(PIN_OPEN, LOW); - DelayLEDs(TOGGLE_TIME - BUTTON_TIME); - } + OpenLock(); } DelayLEDs(4000); @@ -529,7 +556,8 @@ void ToggleLock() bool HasMainsPower() { - return digitalRead(PIN_MAINS_POWER) == HIGH; + return true; + //return digitalRead(PIN_MAINS_POWER) == HIGH; } void loop()