From 0adb6c825ea194c455a377d0570c596d933f317e Mon Sep 17 00:00:00 2001 From: Sadeep Madurange Date: Sun, 17 Nov 2024 13:56:46 +0800 Subject: RF tests. --- door_lock/Makefile | 42 ------------------------ door_lock/Servo.Makefile | 42 ++++++++++++++++++++++++ rf_test/Recv.Makefile | 43 ++++++++++++++++++++++++ rf_test/Send.Makefile | 44 +++++++++++++++++++++++++ rf_test/recv.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ rf_test/send.c | 77 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 291 insertions(+), 42 deletions(-) delete mode 100644 door_lock/Makefile create mode 100644 door_lock/Servo.Makefile create mode 100644 rf_test/Recv.Makefile create mode 100644 rf_test/Send.Makefile create mode 100644 rf_test/recv.c create mode 100644 rf_test/send.c diff --git a/door_lock/Makefile b/door_lock/Makefile deleted file mode 100644 index 018960a..0000000 --- a/door_lock/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -CC = avr-gcc -MCU = atmega328p -TARGET = app - -SRC = servo.c cmd.c serial.c -OBJ = $(SRC:.c=.o) - -CFLAGS = -std=gnu99 -CFLAGS += -Os -CFLAGS += -Wall -CFLAGS += -mmcu=$(MCU) -CFLAGS += -DBAUD=115200 -CFLAGS += -DF_CPU=16000000UL -CFLAGS += -ffunction-sections -fdata-sections - -LDFLAGS = -mmcu=$(MCU) -LDFLAGS += -Wl,--gc-sections - -HEX_FLAGS = -O ihex -HEX_FLAGS += -j .text -j .data - -AVRDUDE_FLAGS = -p $(MCU) -AVRDUDE_FLAGS += -c arduino -AVRDUDE_FLAGS += -P /dev/cuaU0 -AVRDUDE_FLAGS += -D -U - -%.o: %.c - $(CC) $(CFLAGS) -c -o $@ $< - -elf: $(OBJ) - $(CC) $(LDFLAGS) $(OBJ) -o $(TARGET).elf - -hex: elf - avr-objcopy $(HEX_FLAGS) $(TARGET).elf $(TARGET).hex - -upload: hex - avrdude $(AVRDUDE_FLAGS) flash:w:$(TARGET).hex:i - -.PHONY: clean - -clean: - rm *.o *.elf *.hex diff --git a/door_lock/Servo.Makefile b/door_lock/Servo.Makefile new file mode 100644 index 0000000..018960a --- /dev/null +++ b/door_lock/Servo.Makefile @@ -0,0 +1,42 @@ +CC = avr-gcc +MCU = atmega328p +TARGET = app + +SRC = servo.c cmd.c serial.c +OBJ = $(SRC:.c=.o) + +CFLAGS = -std=gnu99 +CFLAGS += -Os +CFLAGS += -Wall +CFLAGS += -mmcu=$(MCU) +CFLAGS += -DBAUD=115200 +CFLAGS += -DF_CPU=16000000UL +CFLAGS += -ffunction-sections -fdata-sections + +LDFLAGS = -mmcu=$(MCU) +LDFLAGS += -Wl,--gc-sections + +HEX_FLAGS = -O ihex +HEX_FLAGS += -j .text -j .data + +AVRDUDE_FLAGS = -p $(MCU) +AVRDUDE_FLAGS += -c arduino +AVRDUDE_FLAGS += -P /dev/cuaU0 +AVRDUDE_FLAGS += -D -U + +%.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + +elf: $(OBJ) + $(CC) $(LDFLAGS) $(OBJ) -o $(TARGET).elf + +hex: elf + avr-objcopy $(HEX_FLAGS) $(TARGET).elf $(TARGET).hex + +upload: hex + avrdude $(AVRDUDE_FLAGS) flash:w:$(TARGET).hex:i + +.PHONY: clean + +clean: + rm *.o *.elf *.hex diff --git a/rf_test/Recv.Makefile b/rf_test/Recv.Makefile new file mode 100644 index 0000000..a517111 --- /dev/null +++ b/rf_test/Recv.Makefile @@ -0,0 +1,43 @@ +CC = avr-gcc +MCU = atmega328p +TARGET = recv + +SRC = recv.c +OBJ = $(SRC:.c=.o) + +CFLAGS = -std=gnu99 +CFLAGS += -Os +CFLAGS += -Wall +CFLAGS += -mmcu=$(MCU) +CFLAGS += -DBAUD=115200 +CFLAGS += -DF_CPU=16000000UL +CFLAGS += -ffunction-sections -fdata-sections + +LDFLAGS = -mmcu=$(MCU) +LDFLAGS += -Wl,--gc-sections + +HEX_FLAGS = -O ihex +HEX_FLAGS += -j .text -j .data + +AVRDUDE_FLAGS = -p $(MCU) +AVRDUDE_FLAGS += -c arduino +AVRDUDE_FLAGS += -P /dev/cuaU0 +AVRDUDE_FLAGS += -D -U + +%.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + +elf: $(OBJ) + $(CC) $(LDFLAGS) $(OBJ) -o $(TARGET).elf + +hex: elf + avr-objcopy $(HEX_FLAGS) $(TARGET).elf $(TARGET).hex + +upload: hex + avrdude $(AVRDUDE_FLAGS) flash:w:$(TARGET).hex:i + +.PHONY: clean + +clean: + rm *.o *.elf *.hex + diff --git a/rf_test/Send.Makefile b/rf_test/Send.Makefile new file mode 100644 index 0000000..f4d4511 --- /dev/null +++ b/rf_test/Send.Makefile @@ -0,0 +1,44 @@ +CC = avr-gcc +MCU = atmega328p +TARGET = send + +SRC = send.c +OBJ = $(SRC:.c=.o) + +CFLAGS = -std=gnu99 +CFLAGS += -Os +CFLAGS += -Wall +CFLAGS += -mmcu=$(MCU) +CFLAGS += -DBAUD=115200 +CFLAGS += -DF_CPU=16000000UL +CFLAGS += -ffunction-sections -fdata-sections + +LDFLAGS = -mmcu=$(MCU) +LDFLAGS += -Wl,--gc-sections + +HEX_FLAGS = -O ihex +HEX_FLAGS += -j .text -j .data + +AVRDUDE_FLAGS = -p $(MCU) +AVRDUDE_FLAGS += -c arduino +AVRDUDE_FLAGS += -P /dev/cuaU0 +AVRDUDE_FLAGS += -D -U + +%.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + +elf: $(OBJ) + $(CC) $(LDFLAGS) $(OBJ) -o $(TARGET).elf + +hex: elf + avr-objcopy $(HEX_FLAGS) $(TARGET).elf $(TARGET).hex + +upload: hex + avrdude $(AVRDUDE_FLAGS) flash:w:$(TARGET).hex:i + +.PHONY: clean + +clean: + rm *.o *.elf *.hex + + 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); + } + } + } + +} diff --git a/rf_test/send.c b/rf_test/send.c new file mode 100644 index 0000000..017d67b --- /dev/null +++ b/rf_test/send.c @@ -0,0 +1,77 @@ +#include +#include +#include +#include + +#define LOCK_BTN PD6 +#define UNLOCK_BTN 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 void usart_send(unsigned char data) +{ + while (!(UCSR0A & (1 << UDRE0))) + ; + UDR0 = data; +} + +int main(void) +{ + usart_init(); + + 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; +} + +static inline void lock(void) +{ + usart_send(SYN); + usart_send(ADDR); + usart_send(LOCK_CMD); + usart_send(LOCK_CMD + ADDR); +} + +static inline void unlock(void) +{ + usart_send(SYN); + usart_send(ADDR); + usart_send(UNLOCK_CMD); + usart_send(UNLOCK_CMD + ADDR); +} + +ISR(PCINT2_vect) +{ + if (is_btn_pressed(LOCK_BTN)) + lock(); + + if (is_btn_pressed(UNLOCK_BTN)) + unlock(); +} -- cgit v1.2.3