diff --git a/zuno/zuno.ino b/zuno/zuno.ino index bf01407..fe99453 100644 --- a/zuno/zuno.ino +++ b/zuno/zuno.ino @@ -83,7 +83,7 @@ bool lock_disable = false; #define RFID_START_BYTE 0x02 // start byte #define RFID_STOP_BYTE 0x03 // stop byte #define RFID_TAG_BYTES 10 // number of bytes in package that represent the tag -#define RFID_TAGS 5 // Number of tags to be supported to store in EEPROM +#define RFID_TAGS 10 // Number of tags to be supported to store in EEPROM #define EEPROM_CURRENT_TAG_ADDRESS 0 // Addres for storing current address in the tag memory #define EEPROM_TAG_START_ADDRESS 1 // Start addres for storing RFID tags int rfid_current_checksum = 0; @@ -105,6 +105,17 @@ ZUNO_SETUP_CHANNELS( ZUNO_SENSOR_BINARY_DOOR_WINDOW(getterDoor) ); +void load_rfid_keys() { + int address = EEPROM_TAG_START_ADDRESS; + for (int i = 0; i < RFID_TAGS; i++) { + for (int j = 0; j < RFID_TAG_BYTES; j++) { + rfid_tags[i][j] = EEPROM.read(address); + address++; + } + } + CONSOLE_SERIAL.println("RFID tags loaded from EEPROM"); +} + void update_rfid() { int rfid_read = 0; if (RFID_SERIAL.available()) { @@ -118,9 +129,10 @@ void update_rfid() { // Check for package end if (rfid_read == RFID_STOP_BYTE) { if (rfid_store_tag) { - int rfid_eeprom_pos = rfid_store_tag_nbr * RFID_TAG_BYTES; + int rfid_eeprom_pos = rfid_store_tag_nbr-1 * RFID_TAG_BYTES; for (int i = 0; i < RFID_TAG_BYTES; i++) { EEPROM.write(rfid_eeprom_pos, rfid_package[i + 1]); + rfid_tags[rfid_store_tag_nbr-1][i] = rfid_package[i + 1]; rfid_eeprom_pos++; } @@ -140,10 +152,10 @@ void update_rfid() { if (tag_ok == true) { CONSOLE_SERIAL.println("RFID tag verified"); if (sensor_door_locked){ - set_servo(SERVO_UNLOCK, i+1); + set_servo(SERVO_UNLOCK, SOURCE_RFID); } else{ - set_servo(SERVO_LOCK, i+1); + set_servo(SERVO_LOCK, SOURCE_RFID); } break; } @@ -309,11 +321,12 @@ void setup() { pinMode(SERVO_ENABLE_PIN, OUTPUT); // setup pin as output digitalWrite(SERVO_ENABLE_PIN, LOW); - - set_servo(SERVO_CENTER, SOURCE_SYSTEM); CONSOLE_SERIAL.begin(9600); RFID_SERIAL.begin(9600); + + load_rfid_keys(); + set_servo(SERVO_CENTER, SOURCE_SYSTEM); } // the loop routine runs over and over again forever: @@ -327,7 +340,7 @@ void loop() { // Check button status if (btn_lock == true){ if (rfid_store_tag_nbr > 0 && rfid_store_tag == false){ - int rfid_eeprom_pos = rfid_store_tag_nbr * RFID_TAG_BYTES; + int rfid_eeprom_pos = rfid_store_tag_nbr-1 * RFID_TAG_BYTES; for (int i = 0; i < RFID_TAG_BYTES; i++) { EEPROM.write(rfid_eeprom_pos,0xFF); rfid_eeprom_pos++; @@ -366,7 +379,7 @@ void loop() { // Check if sensor changed and report to Z-Wave if (sensor_door_closed_changed){ sensor_door_closed_changed = false; - zunoSendReport(8); + zunoSendReport(4); } // Check if servo needs to be centered or turned off @@ -495,20 +508,11 @@ void setterLockDisable(byte value) { } byte getterLockDisable(void) { - if (lock_disable || sensor_not_home_activated){ - return true; - } - else{ - return false; - } -} - -byte getterDoor(void) { - return sensor_door_closed; + return lock_disable; } void setterStoreRFID(byte value) { - if (rfid_store_tag_nbr == 0 && value > 0){ + if (rfid_store_tag_nbr == 0 && value > 0 && value < RFID_TAGS + 1){ rfid_store_tag_nbr = value; rfid_timeout_timestamp = current_timestamp + 30000; } @@ -522,4 +526,7 @@ byte getterStoreRFID(void) { return rfid_store_tag_nbr; } +byte getterDoor(void) { + return sensor_door_closed; +}