#include /* * Definierar alla knappars pins och register så * att koden blir lättare att förstå. */ #define B_UP (PIND & (1 << 4)) #define B_DOWN (PIND & (1 << 3)) #define B_LEFT (PIND & (1 << 5)) #define B_RIGHT (PIND & (1 << 6)) void usart0_init(); void pin_init(); void usart0_transmit(uint8_t); uint8_t button_read_reliably_up(); uint8_t button_read_reliably_down(); uint8_t button_read_reliably_left(); uint8_t button_read_reliably_right(); int main(void) { usart0_init(); pin_init(); while (1) { /* * Skickar en nyckel (136) som "låser upp" bilen */ usart0_transmit(136); /* * Om någon av knapparna är nedtryckta så skickas * en siffra (1 = fram, 2 = bak, 3 = vänster, 4 = höger). * Är ingen knapp nedtryckt skickas 0. Siffran avkodas * sedan i bilens processor. En LED-lampa tänds även * så länge ett knapptryck registreras. */ if (button_read_reliably_up() != 0) { PORTA = 1; usart0_transmit(1); } else if (button_read_reliably_down() != 0) { PORTA = 1; usart0_transmit(2); } else if (button_read_reliably_left() != 0) { PORTA = 1; usart0_transmit(3); } else if (button_read_reliably_right() != 0) { PORTA = 1; usart0_transmit(4); } else { PORTA = ~1; usart0_transmit(0); } } } /* * Initiering av alla pins på ATMEGA1284 */ void pin_init() { DDRA |= 1; DDRC |= (1 << 7); DDRD |= 0; PORTC = (1 << 7); } /* * Initiering av USART */ void usart0_init() { UCSR0B |= 0x08; UCSR0C |= 0x03; UBRR0 = 103; } /* * Sänder data */ void usart0_transmit(uint8_t data) { while (!(UCSR0A & (1<