From 0adb6c825ea194c455a377d0570c596d933f317e Mon Sep 17 00:00:00 2001 From: Sadeep Madurange Date: Sun, 17 Nov 2024 13:56:46 +0800 Subject: RF tests. --- rf_test/recv.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 rf_test/recv.c (limited to 'rf_test/recv.c') diff --git a/rf_test/recv.c b/rf_test/recv.c new file mode 100644 index 0000000..e5764a7 --- /dev/null +++ b/rf_test/recv.c @@ -0,0 +1,85 @@ +#include +#include +#include +#include + +#define LOCK_LED PD6 +#define UNLOCK_LED PD7 + +#define SYN 0xA4 +#define ADDR 0x01 +#define LOCK_CMD 0x02 +#define UNLOCK_CMD 0x03 + +static void usart_init(void) +{ + UBRR0H = UBRRH_VALUE; + UBRR0L = UBRRL_VALUE; +#if USE_2X + UCSR0A |= (1 << U2X0); +#else + UCSR0A &= ~(1 << U2X0); +#endif + UCSR0B = (1 << TXEN0) | (1 << RXEN0); + UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); +} + +static unsigned char usart_recv(void) +{ + while((UCSR0A & (1 << RXC0)) == 0); + return UDR0; +} + +static void led_init(void) +{ + DDRD |= (1 << LOCK_LED) | (1 << UNLOCK_LED); + PORTD |= (1 << LOCK_LED) | (1 << UNLOCK_LED); +} + +int main(void) +{ + usart_init(); + led_init(); + + sei(); + + for (;;) + ; + + return 0; +} + +static inline int is_btn_pressed(unsigned char btn) +{ + if (!((PIND >> btn) & 0x01)) { + _delay_us(2000); + return !((PIND >> btn) & 0x01); + } + + return 0; +} + +ISR(USART_RX_vect) +{ + unsigned char addr, data, chk; + + addr = usart_recv(); + data = usart_recv(); + chk = usart_recv(); + + if(chk == (addr + data)) + { + if(addr == ADDR) + { + if(data == LOCK_CMD) { + PORTC |= (1 << LOCK_LED); + PORTC &= ~(1 << UNLOCK_LED); + + } else if (data == UNLOCK_LED) { + PORTC |= (1 << UNLOCK_LED); + PORTC &= ~(1 << LOCK_LED); + } + } + } + +} -- cgit v1.2.3