Šoreiz autors aplūko spēļu auto vadību, izmantojot Bluetooth.
Lai nosūtītu komandas, paredzēts izmantot bezmaksas lietotni "S2 Terminal for Bluetooth" vai kādu citu lietotni, kura atbalsta komandu nosūtīšanu simbolu veidā, piemēram, paša izveidotu lietotni.
Kustībai uz priekšu paredzēts nosūtīt simbolus 'F' vai 'f', kustībai pa kreisi - 'L' vai 'l', kustībai pa labi - 'R' vai 'r', kustībai atpakaļ - 'B' vai 'b', bet pārējie simboli nozīmē, ka nepieciešams apturēt motorus.
1.1.att. Elektriskā principiālā shēma motoru vadībai, izmantojot Bluetooth
Elektriskā principiālā shēma motoru vadībai, izmantojot Bluetooth, ir veidota tā, lai tās elektrobarošanai varētu izmantot 7,6-9 V, kur tad, kad baterijas sprieguma vērtība ir mazāka vai vienāda ar 7,5 V, tiek izslēgti motori.
Labāks motoru vadības risinājums būtu impulsa platuma modulācija (PWM), nevis vienkārši augsts vai zems līmenis, taču šoreiz tas parādīts kā piemērs.
int main(void){
DDRB = 0xFF; // Uz izeju
DDRD = 0xFE;
USART_Init(); // Tiek inicializets USART ar BAUDRATE 9600
Init_ADC(); // Tiek inicializets ACP
_delay_ms(2500);
PORTB |= (1<<PB4); // Pazinojums, ka motori ir izslegti
float U_div, U_bat = 0.0;
char input_data;
int cnt=0;
USART_SendString("\rPagrieziens uz labo pusi -> R vai r");
_delay_ms(1000);
USART_SendString("\rPagrieziens uz kreiso pusi -> L vai l");
_delay_ms(1000);
USART_SendString("\rKustiba uz prieksu -> F vai f");
_delay_ms(1000);
USART_SendString("\rKustiba atpakal -> B vai b");
_delay_ms(1000);
while(1){
U_div = Read_ADC(0)*5.0/1024.0;
U_bat = (U_div*10.0+U_div*10.0)/10.0;
if(U_bat<=7.5){
if(cnt==0){
LOW_BAT();
cnt++;
}
else{
_delay_ms(100);
}
}
else{
cnt=0;
NORMAL_BAT();
input_data = USART_RxChar(); // Sanem datus no Bluetooth ierices
if(input_data == 'B' || input_data == 'b'){
USART_SendString("\rAtpakal\r");
_delay_ms(100);
PORTB |= (1<<PB0);
PORTB &= ~(1<<PB1);
PORTB &= ~(1<<PB2);
PORTB |= (1<<PB3);
PORTB &= ~(1<<PB4);
}
else if(input_data == 'R' || input_data == 'r'){
USART_SendString("\rUz labo pusi\r");
_delay_ms(100);
PORTB |= (1<<PB1);
PORTB &= ~(1<<PB0);
PORTB &= ~(1<<PB2);
PORTB &= ~(1<<PB3);
PORTB &= ~(1<<PB4);
}
else if(input_data == 'L' || input_data == 'l'){
USART_SendString("\rUz kreiso pusi\r");
_delay_ms(100);
PORTB |= (1<<PB2);
PORTB &= ~(1<<PB0);
PORTB &= ~(1<<PB1);
PORTB &= ~(1<<PB3);
PORTB &= ~(1<<PB4);
}
else if(input_data == 'F' || input_data == 'f'){
USART_SendString("\rUz prieksu\r");
_delay_ms(100);
PORTB |= (1<<PB1);
PORTB |= (1<<PB2);
PORTB &= ~(1<<PB0);
PORTB &= ~(1<<PB3);
PORTB &= ~(1<<PB4);
}
else{
PORTB &= ~(1<<PB0);
PORTB &= ~(1<<PB1);
PORTB &= ~(1<<PB2);
PORTB &= ~(1<<PB3);
USART_SendString("\rMotori izslegti!\r");
PORTB |= (1<<PB4);
}
USART_SendString("\r");
}
}
return 0;
}