diff options
| -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; |
