blob: 4832a03a7fe5d1cc2a74f2cfaa9e985afc26367c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
/*
* example_usage.c
*
*/
#define bit_clr(a,b) ((a) &=~(1<<(b)))
#define bit_set(a,b) ((a) |= (1<<(b)))
#define bit_tst(a,b) ((a) & (1<<(b)))
#define bit_change(a,b) ((a) ^= (1<<(b)))
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define Soft_UART_TX_PORT PORTD
#define Soft_UART_TX_DDR DDRD
#define Soft_UART_TX_PIN 3
#define Soft_UART_Baud 9600
#include "Soft_UART_Timer1.h"
#include "r503.h"
#define FPM_PIN PD3
#define FPM_INTVEC INT1_vect
static inline void uart_write(const char *s)
{
for (; *s; s++) {
Soft_UART_send_byte(*s);
}
Soft_UART_send_byte('\r');
Soft_UART_send_byte('\n');
}
static inline void init_touch(void)
{
DDRD &= ~(1 << FPM_PIN);
EICRA = 0b00000000;
EIMSK = (1 << INT1);
}
int main(void)
{
struct fpm_cfg cfg;
cli();
Soft_UART_init();
bit_set(DDRB,5);
init_touch();
sei();
fpm_init();
fpm_get_cfg(&cfg);
if (fpm_get_count() == 0) {
if (fpm_enroll()) {
fpm_led_on(BLUE);
_delay_ms(500);
fpm_led_off();
_delay_ms(500);
} else {
fpm_led_on(RED);
_delay_ms(500);
fpm_led_off();
_delay_ms(500);
}
}
while (1)
{
_delay_ms(2000);
}
return 0;
}
ISR(FPM_INTVEC)
{
cli();
if (fpm_match()) {
fpm_led_on(BLUE);
_delay_ms(1000);
fpm_led_off();
_delay_ms(500);
} else {
fpm_led_on(RED);
_delay_ms(1000);
fpm_led_off();
_delay_ms(500);
}
sei();
}
|