#include #include #include #include "rfm.h" #include "serial.h" #define LED_PIN PC1 #define LOCK_BTN PD6 #define UNLOCK_BTN PD7 #define ADDR 0xAA #define LOCK 0xB5 #define UNLOCK 0xAE static inline void lock(void) { uint8_t data[1]; data[0] = LOCK; //rfm_sendto(ADDR, data, 1); serial_write_line("Locked"); PORTB |= (1 << LED_PIN); _delay_ms(500); PORTB &= ~(1 << LED_PIN); } static inline void unlock(void) { uint8_t data[1]; data[0] = UNLOCK; //rfm_sendto(ADDR, data, 1); serial_write_line("Unlocked"); PORTB |= (1 << LED_PIN); _delay_ms(500); PORTB &= ~(1 << LED_PIN); } 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 pcint2_init(void) { PCICR |= (1 << PCIE2); PCMSK2 |= ((1 << PCINT22) | (1 << PCINT23)); } int main(void) { DDRD &= ~((1 << LOCK_BTN) | (1 << UNLOCK_BTN)); PORTD |= (1 << LOCK_BTN) | (1 << UNLOCK_BTN); DDRB |= (1 << LED_PIN); //rfm_init(); serial_init(); pcint2_init(); sei(); for (;;) ; return 0; } ISR(PCINT2_vect) { if (is_btn_pressed(LOCK_BTN)) lock(); if (is_btn_pressed(UNLOCK_BTN)) unlock(); }