#include uint8_t usart0_receive(); void usart0_init(); void pin_init(); void forward(); void reverse(); void turn_left(); void turn_right(); void stop(); int main(void) { pin_init(); usart0_init(); uint8_t key = 0; uint8_t press_recieved = 0; while (1) { PORTD |= (1 << 2); PORTD |= (1 << 3); key = usart0_receive(); /* * Kollar om nyckeln har tagits emot och startar * endast då. Detta för att undvika störningar. */ if (key == 136) { press_recieved = usart0_receive(); /* * Läser av press_recieved som innehåller det som * tagits emot av kontrollen. 1 = fram, 2 = back, * 3 = vänster, 4 = höger. Allt annat leder till stopp. * En LED-lampa tänds även så länge bilen kör i någon riktning. */ if (press_recieved == 1) { PORTA = 1; forward(); } else if (press_recieved == 2) { PORTA = 1; reverse(); } else if (press_recieved == 3) { PORTA = 1; turn_left(); } else if (press_recieved == 4) { PORTA = 1; turn_right(); } else { PORTA = ~1 stop(); } } } } /* * Initering av USART */ void usart0_init() { UCSR0B |= 0x10; UCSR0C |= 0x03; UBRR0 = 103; } /* * Initiering av alla pins på ATMEGA1284 */ void pin_init() { DDRA |= 0X01; DDRC |= 0x01; DDRD |= 0; PORTD |= (1 << 3); PORTD |= (1 << 2); PORTC |= 0; } /* * Tar emot data och returnerar denna */ uint8_t usart0_receive() { while (!(UCSR0A & (1 << RXC0))); return UDR0; } /* * Skickar signal till h-bryggan som * i sin tur skickar signal till motorerna * som för bilen framåt. */ void forward() { PORTD |= (1 << 7); PORTD &= ~(1 << 6); PORTD |= (1 << 4); PORTD &= ~(1 << 5); } /* * Skickar signal till h-bryggan som * i sin tur skickar signal till motorerna * som sedan för bilen bakåt. */ void reverse() { PORTD |= (1 << 5); PORTD &= ~(1 << 4); PORTD |= (1 << 6); PORTD &= ~(1 << 7); } /* * Skickar signal till h-bryggan som * i sin tur skickar signal till motorerna * som sedan vänder bilen åt vänster. */ void turn_left() { PORTD &= ~(1 << 7); PORTD &= ~(1 << 6); PORTD |= (1 << 5); PORTD |= (1 << 4); } /* * Skickar signal till h-bryggan som * i sin tur skickar signal till motorerna * som sedan vänder bilen åt höger. */ void turn_right() { PORTD |= (1 << 6); PORTD |= (1 << 7); PORTD &= ~(1 << 4); PORTD &= ~(1 << 5); } /* * Skickar signal till h-bryggan som * i sin tur skickar signal till motorerna * som sedan stoppar bilen. */ void stop() { PORTD &= ~(1 << 6); PORTD &= ~(1 << 7); PORTD &= ~(1 << 5); PORTD &= ~(1 << 4); }