summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--door_lock/Servo.Makefile (renamed from door_lock/Makefile)0
-rw-r--r--rf_test/Recv.Makefile43
-rw-r--r--rf_test/Send.Makefile44
-rw-r--r--rf_test/recv.c85
-rw-r--r--rf_test/send.c77
5 files changed, 249 insertions, 0 deletions
diff --git a/door_lock/Makefile b/door_lock/Servo.Makefile
index 018960a..018960a 100644
--- a/door_lock/Makefile
+++ b/door_lock/Servo.Makefile
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 <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <util/setbaud.h>
+
+#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 <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <util/setbaud.h>
+
+#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();
+}