From b6ad9c455bf25417cb684ee26cdcf9cd2c16f919 Mon Sep 17 00:00:00 2001 From: Christoffer Martinsson Date: Mon, 19 Feb 2018 15:21:59 +0100 Subject: [PATCH] Updated code --- zuno/zuno.ino | 218 ++++++++++++-------------------------------------- 1 file changed, 50 insertions(+), 168 deletions(-) diff --git a/zuno/zuno.ino b/zuno/zuno.ino index 67a23dc..bf01407 100644 --- a/zuno/zuno.ino +++ b/zuno/zuno.ino @@ -23,14 +23,10 @@ const int LED_UNLOCK_PIN = 6; #define SERVO_CENTER 3 #define SOURCE_EXTERNAL 0 -#define SOURCE_RFID_1 1 -#define SOURCE_RFID_2 2 -#define SOURCE_RFID_3 3 -#define SOURCE_RFID_4 4 -#define SOURCE_RFID_5 5 -#define SOURCE_ZWAVE 6 -#define SOURCE_BUTTONS 7 -#define SOURCE_SYSTEM 8 +#define SOURCE_RFID 1 +#define SOURCE_ZWAVE 2 +#define SOURCE_BUTTONS 3 +#define SOURCE_SYSTEM 4 #define SERVO_TRIM 2 @@ -94,13 +90,8 @@ int rfid_current_checksum = 0; int rfid_package[RFID_PACKAGE_LENGHT]; int rfid_package_pos = 0; int rfid_tags[RFID_TAGS][RFID_TAG_BYTES]; -bool rfid_store_tag = false; int rfid_store_tag_nbr = 0; -bool rfid_tag_1 = false; -bool rfid_tag_2 = false; -bool rfid_tag_3 = false; -bool rfid_tag_4 = false; -bool rfid_tag_5 = false; +bool rfid_store_tag = false; ServoController servo(12); @@ -110,17 +101,12 @@ ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_ALWAYS_AWAKE); ZUNO_SETUP_CHANNELS( ZUNO_SWITCH_BINARY(getterLock, setterLock), ZUNO_SWITCH_BINARY(getterLockDisable, setterLockDisable), - ZUNO_SWITCH_BINARY(getterRfidTag1, setterRfidTag1), - ZUNO_SWITCH_BINARY(getterRfidTag2, setterRfidTag2), - ZUNO_SWITCH_BINARY(getterRfidTag3, setterRfidTag3), - ZUNO_SWITCH_BINARY(getterRfidTag4, setterRfidTag4), - ZUNO_SWITCH_BINARY(getterRfidTag5, setterRfidTag5), + ZUNO_SWITCH_MULTILEVEL(getterStoreRFID, setterStoreRFID), ZUNO_SENSOR_BINARY_DOOR_WINDOW(getterDoor) ); void update_rfid() { int rfid_read = 0; - // Pass through BMC -> LCD communication if (RFID_SERIAL.available()) { while (RFID_SERIAL.available() > 0) { rfid_read = RFID_SERIAL.read(); @@ -131,30 +117,16 @@ void update_rfid() { } // Check for package end if (rfid_read == RFID_STOP_BYTE) { - if (rfid_store_tag == true) { + if (rfid_store_tag) { int rfid_eeprom_pos = rfid_store_tag_nbr * RFID_TAG_BYTES; for (int i = 0; i < RFID_TAG_BYTES; i++) { EEPROM.write(rfid_eeprom_pos, rfid_package[i + 1]); rfid_eeprom_pos++; } - if (rfid_store_tag_nbr == 0){ - rfid_tag_1 = true; - } - else if (rfid_store_tag_nbr == 1){ - rfid_tag_2 = true; - } - else if (rfid_store_tag_nbr == 2){ - rfid_tag_3 = true; - } - else if (rfid_store_tag_nbr == 3){ - rfid_tag_4 = true; - } - else if (rfid_store_tag_nbr == 4){ - rfid_tag_5 = true; - } - - zunoSendReport(3 + rfid_store_tag_nbr); + rfid_store_tag = false; + rfid_store_tag_nbr = 0; + zunoSendReport(3); } else { // Check for match of RFID tag @@ -354,13 +326,29 @@ void loop() { // Check button status if (btn_lock == true){ - set_servo(SERVO_LOCK, SOURCE_BUTTONS); - btn_lock = false; - btn_unlock = false; + if (rfid_store_tag_nbr > 0 && rfid_store_tag == false){ + int rfid_eeprom_pos = rfid_store_tag_nbr * RFID_TAG_BYTES; + for (int i = 0; i < RFID_TAG_BYTES; i++) { + EEPROM.write(rfid_eeprom_pos,0xFF); + rfid_eeprom_pos++; + } + rfid_store_tag_nbr = 0; + zunoSendReport(3); + } + else{ + set_servo(SERVO_LOCK, SOURCE_BUTTONS); + btn_lock = false; + btn_unlock = false; + } } else if (btn_unlock == true){ - set_servo(SERVO_UNLOCK, SOURCE_BUTTONS); - btn_unlock = false; + if (rfid_store_tag_nbr > 0 && rfid_store_tag == false){ + rfid_store_tag = true; + } + else{ + set_servo(SERVO_UNLOCK, SOURCE_BUTTONS); + btn_unlock = false; + } } // Check if sensor changed and report to Z-Wave @@ -393,28 +381,11 @@ void loop() { } // Check if store RFID has timed out - if (rfid_store_tag) { + if (rfid_store_tag_nbr > 0) { if (current_timestamp >= rfid_timeout_timestamp) { - - if (rfid_store_tag_nbr == 0){ - rfid_tag_1 = false; - } - else if (rfid_store_tag_nbr == 1){ - rfid_tag_2 = false; - } - else if (rfid_store_tag_nbr == 2){ - rfid_tag_3 = false; - } - else if (rfid_store_tag_nbr == 3){ - rfid_tag_4 = false; - } - else if (rfid_store_tag_nbr == 4){ - rfid_tag_5 = false; - } - - rfid_store_tag = false; - zunoSendReport(3 + rfid_store_tag_nbr); - + rfid_store_tag = false; + rfid_store_tag_nbr = 0; + zunoSendReport(3); } } @@ -451,8 +422,13 @@ void loop() { } } else if (servo_status == SERVO_DISABLE){ + // Indicate RFID storing mode + if (rfid_store_tag_nbr > 0){ + digitalWrite(LED_LOCK_PIN, HIGH); + digitalWrite(LED_UNLOCK_PIN, HIGH); + } // Indicate that the lock/unlock is disabled - if (sensor_not_home_activated == true || lock_disable == true){ + else if (sensor_not_home_activated == true || lock_disable == true){ if (current_timestamp >= activity_timestamp) { if (activity_flash == 0){ digitalWrite(LED_LOCK_PIN, HIGH); @@ -531,113 +507,19 @@ byte getterDoor(void) { return sensor_door_closed; } -void setterRfidTag1(byte value) { - if (value == 0){ - int rfid_eeprom_pos = 0 * RFID_TAG_BYTES; - for (int i = 0; i < RFID_TAG_BYTES; i++) { - EEPROM.write(rfid_eeprom_pos,0xFF); - rfid_eeprom_pos++; - } - rfid_tag_1 = false; +void setterStoreRFID(byte value) { + if (rfid_store_tag_nbr == 0 && value > 0){ + rfid_store_tag_nbr = value; + rfid_timeout_timestamp = current_timestamp + 30000; } - else{ - if (rfid_store_tag == false){ - rfid_store_tag_nbr = 0; - rfid_store_tag = true; - rfid_timeout_timestamp = current_timestamp + 10000; - } + else if (value == 0){ + rfid_store_tag_nbr = 0; + rfid_store_tag = false } } -byte getterRfidTag1(void) { - return rfid_tag_1; +byte getterStoreRFID(void) { + return rfid_store_tag_nbr; } -void setterRfidTag2(byte value) { - if (value == 0){ - int rfid_eeprom_pos = 1 * RFID_TAG_BYTES; - for (int i = 0; i < RFID_TAG_BYTES; i++) { - EEPROM.write(rfid_eeprom_pos,0xFF); - rfid_eeprom_pos++; - } - rfid_tag_2 = false; - } - else{ - if (rfid_store_tag == false){ - rfid_store_tag_nbr = 1; - rfid_store_tag = true; - rfid_timeout_timestamp = current_timestamp + 10000; - } - } -} - -byte getterRfidTag2(void) { - return rfid_tag_2; -} - -void setterRfidTag3(byte value) { - if (value == 0){ - int rfid_eeprom_pos = 2 * RFID_TAG_BYTES; - for (int i = 0; i < RFID_TAG_BYTES; i++) { - EEPROM.write(rfid_eeprom_pos,0xFF); - rfid_eeprom_pos++; - } - rfid_tag_3 = false; - } - else{ - if (rfid_store_tag == false){ - rfid_store_tag_nbr = 2; - rfid_store_tag = true; - rfid_timeout_timestamp = current_timestamp + 10000; - } - } -} - -byte getterRfidTag3(void) { - return rfid_tag_3; -} - -void setterRfidTag4(byte value) { - if (value == 0){ - int rfid_eeprom_pos = 3 * RFID_TAG_BYTES; - for (int i = 0; i < RFID_TAG_BYTES; i++) { - EEPROM.write(rfid_eeprom_pos,0xFF); - rfid_eeprom_pos++; - } - rfid_tag_4 = false; - } - else{ - if (rfid_store_tag == false){ - rfid_store_tag_nbr = 3; - rfid_store_tag = true; - rfid_timeout_timestamp = current_timestamp + 10000; - } - } -} - -byte getterRfidTag4(void) { - return rfid_tag_4; -} - -void setterRfidTag5(byte value) { - if (value == 0){ - int rfid_eeprom_pos = 4 * RFID_TAG_BYTES; - for (int i = 0; i < RFID_TAG_BYTES; i++) { - EEPROM.write(rfid_eeprom_pos,0xFF); - rfid_eeprom_pos++; - } - rfid_tag_5 = false; - } - else{ - if (rfid_store_tag == false){ - rfid_store_tag_nbr = 4; - rfid_store_tag = true; - rfid_timeout_timestamp = current_timestamp + 10000; - } - } -} - -byte getterRfidTag5(void) { - return rfid_tag_5; -}