Projektbil Car-0-line

Källkod och kretsschema för kontrollen.
#include
void adc_init();
uint16_t adc_read();
void uart_init();
void uart_transmit(uint8_t);
uint16_t tempDataF;
uint16_t tempDataH;
uint8_t packet;
int main(void){
DDRA = 0x00; //sätter A till inport
DDRB = 0x01; //sätter första på B till utport
PORTB = 0x01; //sätter en 1 till TX
uart_init();
adc_init();
while (1){
uart_transmit(packet);
packet = 0; // data att sända, plusas up och skickas sedan i början av while loopen
/* Protocol
0010 0000 == Fram
0001 0000 == Bak
0000 1000 == Höger
0000 0100 == Vänster
0000 0010 == Tuta
0000 0001 == Lampor
*/
ADMUX &= (0b11111110); //port 0 fram & bak
tempDataF = adc_read();
if(tempDataF > 900){ //ger värde 32 om joystick är fram
packet += 32;
}else if(tempDataF < 100){ //ger värde 16 om joystick är bak
packet += 16;
}
ADMUX |= (0b01000001); //port 1 höger & vänster
tempDataH = adc_read();
if(tempDataH > 900){ //ger värde 4 om joystick är vänster
packet += 4;
}else if(tempDataH < 100){ //ger värde 8 om joystick är höger
packet += 8;
}
uint8_t joyMask = (0b00000100); // mask för port PA2
uint8_t buttonMask = (0b00001000); // mask för port PA3
uint8_t joyButton = PINA & joyMask; // gör om input för portA med hjälp av mask
uint8_t buttonButton = PINA & buttonMask; // gör om input för portA med hjälp av mask
if( joyButton == (0b00000100)){ //port 2 tuta, ger värde 2
packet += 2;
}
if( buttonButton == (0b00001000)){ //port 3 lampor, ger värde 1
packet += 1;
}
}
}
void adc_init(){
ADMUX |= (0b01000000); //(page 331)
ADCSRA |= (0b10000111); //(page 334)
}
uint16_t adc_read(){
ADCSRA |= (1 << ADSC); // stänger av om den inte är använd
while (ADCSRA & (1 << (ADSC))){} // sätt igång när den byter värde
return ADC;
}
void uart_init(){
UCSR0B |= (0b00001000);
UBRR0 = 207;
}
void uart_transmit(uint8_t packet){
while (!(UCSR0A & (1 << UDRE0))){} // om den har något i sig vänta till man kan sända
UDR0 = packet;
}