#include #include #include #include #include #include "portbits.h" #include "global.h" #include "rf12.h" #define F_CPU 10000000UL #include #define RF_BAUDRATE 15000 // Baudrate des RFM12 unsigned char data[128]; unsigned char tdiv=30; unsigned char lastpins=0; inline uint8_t debounce(volatile uint8_t *port, uint8_t pin) { if ( ! (*port & (1 << pin)) ) { /* Pin wurde auf Masse gezogen, 100ms warten */ _delay_ms(200); // max. 262.1 ms _delay_ms(200); if ( *port & (1 << pin) ) { /* Anwender Zeit zum Loslassen des Tasters geben */ _delay_ms(200); _delay_ms(200); return 1; } } return 0; } int main(void) { DDRD &= ~( 1 << PD0 ); // PD0 auf Eingang DDRC=0xff; PORTC=0; PORTB=1; PORTD=31; DDRC=63; DDRD=238; sei(); rf12_init(); // RF12 + IO Ports initialisieren rf12_config(RF_BAUDRATE, RF12FREQ(433.92), 0, QUIET); // Baudrate, Frequenz, Leistung (0=max, 7=min), Umgebungsbedingungen (QUIET, NORMAL, NOISY) rf12_rxmode(); // Empfang starten for (;;) { unsigned char pins; check_rx_packet(); pins=PIND; if (pins!=lastpins) { tx_data(&pins,1); lastpins=pins; } if (rx_data_in_buffer()) { unsigned char count; count=rx_data(data); PORTC=data[0]; } if (debounce(&PIND, PD0)) // Taster an PIN PD0 gedrueckt PORTC = PINC ^ ( 1 << PC0 ); // LED an PC0 an bzw aus } }