Projektbil Car-0-line

Startsida - Bilen - Kontrollen - Rapport (PDF)
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; }
Wesley Carter, Simon Antonsson, Gabriel Niedziolka. 2022.