summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2025-06-18 09:01:01 +0800
committerSadeep Madurange <sadeep@asciimx.com>2025-06-18 09:04:47 +0800
commit611a9395569b37cdab2bd42b7803f0f5a8191c1d (patch)
treeb67af3ff11df90750dc4aa681e14a2d10ee540fb
parentdf3be3b3cb0ef947e58cd6b7f38f8ba3ac9fffae (diff)
downloadfpm-door-lock-611a9395569b37cdab2bd42b7803f0f5a8191c1d.tar.gz
FPM working more reliably.
-rw-r--r--main.c55
1 files changed, 26 insertions, 29 deletions
diff --git a/main.c b/main.c
index ba0c254..ece3165 100644
--- a/main.c
+++ b/main.c
@@ -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;