diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2025-06-18 09:01:01 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2025-06-18 09:04:47 +0800 |
| commit | 611a9395569b37cdab2bd42b7803f0f5a8191c1d (patch) | |
| tree | b67af3ff11df90750dc4aa681e14a2d10ee540fb | |
| parent | df3be3b3cb0ef947e58cd6b7f38f8ba3ac9fffae (diff) | |
| download | fpm-door-lock-611a9395569b37cdab2bd42b7803f0f5a8191c1d.tar.gz | |
FPM working more reliably.
| -rw-r--r-- | main.c | 55 |
1 files changed, 26 insertions, 29 deletions
@@ -38,16 +38,16 @@ #define BACK_UNLOCK_INT PCINT22 #define BTN_INT_VEC PCINT2_vect -enum { +enum CTRL { NONE = 0, - FLOCK = 1, - BLOCK = 2, - FUNLOCK = 3, - BUNLOCK = 4, + LOCKF = 1, + LOCKB = 2, + ULOCKF = 3, + ULOCKB = 4, ENROLL = 5 }; -static volatile int cmd = NONE; +static volatile enum CTRL cmd = NONE; static inline void lock(void) { @@ -102,6 +102,16 @@ int main(void) WDTCSR |= (1 << WDCE) | (1 << WDE); WDTCSR = 0x00; + fpm_init(); + + /* servo */ + TCCR1A |= (1 << WGM11); + TCCR1B |= (1 << WGM12) | (1 << WGM13); + TCCR1B |= (1 << CS11); + ICR1 = PWM_TOP; + TCCR1A |= (1 << COM1A1); + SERVO_DDR |= (1 << SERVO_PIN); + /* battery check */ LED_DDR |= (1 << LED_PIN); LED_PORT &= ~(1 << LED_PIN); @@ -122,37 +132,26 @@ int main(void) PCMSK2 |= ((1 << FRONT_LOCK_INT) | (1 << ENROLL_INT) | (1 << BACK_LOCK_INT) | (1 << BACK_UNLOCK_INT)); - /* servo */ - TCCR1A |= (1 << WGM11); - TCCR1B |= (1 << WGM12) | (1 << WGM13); - TCCR1B |= (1 << CS11); - ICR1 = PWM_TOP; - TCCR1A |= (1 << COM1A1); - SERVO_DDR |= (1 << SERVO_PIN); - - fpm_init(); flash(); for (;;) { - cli(); - switch(cmd) { - case FLOCK: + case LOCKF: lock(); fpm_led(FLASH, RED, 1); break; - case BLOCK: + case LOCKB: lock(); break; - case FUNLOCK: + case ULOCKF: if (fpm_match()) { - unlock(); fpm_led(BREATHE, BLUE, 1); + unlock(); } else { fpm_led(BREATHE, RED, 1); } break; - case BUNLOCK: + case ULOCKB: unlock(); fpm_led(FLASH, BLUE, 1); break; @@ -178,6 +177,7 @@ int main(void) sleep_bod_disable(); sei(); sleep_cpu(); + cli(); sleep_disable(); } @@ -195,10 +195,7 @@ static inline int is_pressed(uint8_t btn) ISR(FPM_INT_VEC) { - cli(); - if (is_pressed(FRONT_UNLOCK_PIN)) - cmd = FUNLOCK; - sei(); + cmd = ULOCKF; } ISR(BTN_INT_VEC) @@ -206,11 +203,11 @@ ISR(BTN_INT_VEC) cli(); if (is_pressed(FRONT_LOCK_PIN)) - cmd = FLOCK; + cmd = LOCKF; else if (is_pressed(BACK_LOCK_PIN)) - cmd = BLOCK; + cmd = LOCKB; else if (is_pressed(BACK_UNLOCK_PIN)) - cmd = BUNLOCK; + cmd = ULOCKB; else if (is_pressed(ENROLL_PIN)) cmd = ENROLL; |
