diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2025-06-10 17:19:43 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2025-06-10 17:19:43 +0800 |
| commit | 723df3f195e90bfdd255f5294867e9e56c456b3b (patch) | |
| tree | f8f35b7cc97a4a150bbc6907ca6b0ad194934a11 | |
| parent | fcc9fee1437b0b2bd2b19b014650a4f82b5df456 (diff) | |
| download | fpm-door-lock-723df3f195e90bfdd255f5294867e9e56c456b3b.tar.gz | |
Revert "Move logic to main function."
This reverts commit fcc9fee1437b0b2bd2b19b014650a4f82b5df456.
| -rw-r--r-- | main.c | 111 |
1 files changed, 38 insertions, 73 deletions
@@ -39,26 +39,6 @@ #define LED_DDR DDRB #define LED_PORT PORTB -static volatile int enroll = 0; -static volatile int lock_in = 0; -static volatile int lock_out = 0; -static volatile int unlock_in = 0; -static volatile int unlock_out = 0; - -static inline void lock(void) -{ - OCR1A = PWM_MID; - _delay_ms(100); - OCR1A = PWM_TOP; -} - -static inline void unlock(void) -{ - OCR1A = PWM_MAX - 50; - _delay_ms(100); - OCR1A = PWM_TOP; -} - /* Measure vcc by measuring known internal 1.1v bandgap * reference voltage against AVCC. */ @@ -84,8 +64,6 @@ uint16_t getvcc(void) int main(void) { - uint16_t id; - /* disable watchdog timer */ cli(); wdt_reset(); @@ -97,11 +75,6 @@ int main(void) LED_DDR |= (1 << LED_PIN); LED_PORT &= ~(1 << LED_PIN); - for (int i = 0; i < 4; i++) { - LED_PORT ^= (1 << LED_PIN); - _delay_ms(70); - } - /* init input ports */ INPUT_DDR &= ~((1 << BACK_LOCK_PIN) | (1 << BACK_UNLOCK_PIN) | (1 << FRONT_LOCK_PIN) | (1 << FRONT_UNLOCK_PIN) | @@ -129,38 +102,6 @@ int main(void) sei(); for (;;) { - if (lock_in) { - lock(); - fpm_led(BREATHE, RED, 1); - lock_in = 0; - } else if (lock_out) { - lock(); - fpm_led(BREATHE, RED, 1); - lock_out = 0; - } else if (unlock_in) { - unlock(); - fpm_led(BREATHE, BLUE, 1); - unlock_in = 0; - } else if (unlock_out) { - if (fpm_match()) { - unlock(); - fpm_led(BREATHE, BLUE, 1); - } else { - fpm_led(BREATHE, RED, 1); - } - unlock_out = 0; - } else if (enroll) { - id = fpm_match(); - if (id == 1 || id == 2) { - fpm_led(BREATHE, BLUE, 1); - _delay_ms(1000); - if (fpm_enroll()) - fpm_led(BREATHE, BLUE, 1); - } else - fpm_led(BREATHE, RED, 1); - enroll = 0; - } - if (getvcc() < VCC_MIN) LED_PORT |= (1 << LED_PIN); @@ -172,6 +113,20 @@ int main(void) return 0; } +static inline void lock(void) +{ + OCR1A = PWM_MID; + _delay_ms(100); + OCR1A = PWM_TOP; +} + +static inline void unlock(void) +{ + OCR1A = PWM_MAX - 50; + _delay_ms(100); + OCR1A = PWM_TOP; +} + static inline int is_pressed(uint8_t btn) { if (!((PIND >> btn) & 0x01)) { @@ -183,23 +138,33 @@ static inline int is_pressed(uint8_t btn) ISR(FPM_INT_VEC) { - cli(); - unlock_out = 1; - sei(); + if (fpm_match()) { + unlock(); + fpm_led(BREATHE, BLUE, 1); + } else { + fpm_led(BREATHE, RED, 1); + } } ISR(BTN_INT_VEC) { - cli(); - - if (is_pressed(FRONT_LOCK_PIN)) - lock_out = 1; - else if (is_pressed(BACK_LOCK_PIN)) - lock_in = 1; - else if (is_pressed(BACK_UNLOCK_PIN)) - unlock_in = 1; - else if (is_pressed(ENROLL_PIN)) - enroll = 1; + uint16_t id; - sei(); + if (is_pressed(FRONT_LOCK_PIN)) { + lock(); + fpm_led(FLASH, RED, 1); + } else if (is_pressed(BACK_LOCK_PIN)) { + lock(); + } else if (is_pressed(BACK_UNLOCK_PIN)) { + unlock(); + } else if (is_pressed(ENROLL_PIN)) { + id = fpm_match(); + if (id == 1 || id == 2) { + fpm_led(BREATHE, BLUE, 1); + _delay_ms(1000); + if (fpm_enroll()) + fpm_led(BREATHE, BLUE, 1); + } else + fpm_led(BREATHE, RED, 1); + } } |
