summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2025-06-10 17:19:43 +0800
committerSadeep Madurange <sadeep@asciimx.com>2025-06-10 17:19:43 +0800
commit723df3f195e90bfdd255f5294867e9e56c456b3b (patch)
treef8f35b7cc97a4a150bbc6907ca6b0ad194934a11
parentfcc9fee1437b0b2bd2b19b014650a4f82b5df456 (diff)
downloadfpm-door-lock-723df3f195e90bfdd255f5294867e9e56c456b3b.tar.gz
Revert "Move logic to main function."
This reverts commit fcc9fee1437b0b2bd2b19b014650a4f82b5df456.
-rw-r--r--main.c111
1 files changed, 38 insertions, 73 deletions
diff --git a/main.c b/main.c
index dbbf086..7329e11 100644
--- a/main.c
+++ b/main.c
@@ -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);
+ }
}