#include #include #include #include "rfm.h" #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); } static inline void unlock(void) { uint8_t data[1]; data[0] = UNLOCK; rfm_sendto(ADDR, data, 1); } static inline int is_btn_pressed(unsigned char btn) { if (!((PINB >> btn) & 0x01)) { _delay_us(2000); return !((PINB >> 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); rfm_init(); pcint2_init(); sei(); for (;;) ; return 0; } ISR(PCINT2_vect) { if (is_btn_pressed(LOCK_BTN)) lock(); if (is_btn_pressed(UNLOCK_BTN)) unlock(); }