diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2024-11-23 15:06:13 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2024-11-23 15:06:13 +0800 |
| commit | 6b31b3f77b05286ca56590dde14717541f4cb5ba (patch) | |
| tree | 38390bb597837bda1eff9f7a2e54688a27613ef7 /rf_test/recv.c | |
| parent | 956a9c26e42d842a0c49c3bf9aa3f71c00c49488 (diff) | |
| download | smart-home-6b31b3f77b05286ca56590dde14717541f4cb5ba.tar.gz | |
wip: attempt with basic RF modules.
Diffstat (limited to 'rf_test/recv.c')
| -rw-r--r-- | rf_test/recv.c | 87 |
1 files changed, 37 insertions, 50 deletions
diff --git a/rf_test/recv.c b/rf_test/recv.c index a908bbe..9cb3daa 100644 --- a/rf_test/recv.c +++ b/rf_test/recv.c @@ -1,80 +1,67 @@ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> -#include <util/setbaud.h> #define TEST_LED PB1 #define LOCK_LED PD6 #define UNLOCK_LED PD7 -#define SYN 0xA1 -#define FIN 0xB2 -#define LOCK 0xC3 -#define UNLOCK 0xD3 +#define SYN 0xAA +#define LOCK 0xB5 +#define UNLOCK 0xAE -static void usart_init(void) -{ - UBRR0H = UBRRH_VALUE; - UBRR0L = UBRRL_VALUE; - UCSR0B = (1 << RXEN0) | (1 << RXCIE0); - UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); -} +#define SIGPIN PB3 +#define SIGLEN 200 + +static volatile unsigned char data = 0; -static unsigned char usart_recv(void) +static inline void led_init(void) { - while((UCSR0A & (1 << RXC0)) == 0); - return UDR0; + DDRB |= (1 << TEST_LED); + DDRD |= (1 << LOCK_LED) | (1 << UNLOCK_LED); } -static void led_init(void) +static inline void pcint2_init(void) { - DDRB |= (1 << TEST_LED); - DDRD |= (1 << LOCK_LED) | (1 << UNLOCK_LED); - PORTD |= (1 << LOCK_LED) | (1 << UNLOCK_LED); + PCICR |= (1 << PCIE2); + PCMSK2 |= (1 << PCINT2); } int main(void) { - usart_init(); + DDRB &= ~(1 << SIGPIN); + PORTB &= ~(1 << SIGPIN); + led_init(); + pcint2_init(); sei(); - for (;;) - ; + for (;;) { + if (data == LOCK) { + PORTD |= (1 << LOCK_LED); + PORTD &= ~(1 << UNLOCK_LED); + } + + if (data == UNLOCK) { + PORTD &= ~(1 << LOCK_LED); + PORTD |= (1 << UNLOCK_LED); + } + + data = 0; + _delay_ms(100); + } return 0; } -ISR(USART_RX_vect) +ISR(PCINT2_vect) { - unsigned char data, buf; - - data = 0; - buf = usart_recv(); - - if (buf == SYN) { - buf = usart_recv(); - - while (buf != FIN) { - buf = usart_recv(); - - if (buf == SYN) { - PORTB ^= (1 << TEST_LED); - return; - } - - if (buf != FIN) - data = buf; - } + int n, bit; - if(data == LOCK) { - PORTD |= (1 << LOCK_LED); - PORTD &= ~(1 << UNLOCK_LED); - } else if (data == UNLOCK) { - PORTD |= (1 << UNLOCK_LED); - PORTD &= ~(1 << LOCK_LED); - } + for (n = 7; n >= 0; n--) { + _delay_ms(SIGLEN); + bit = ((PINB >> SIGPIN) & 1); + data = bit == 1 ? (data | (1 << n)) : (data & ~(1 << n)); } - } |
