Izmantojot UART saskarni, lietotājiem ar datora palīdzību ir iespējams veikt sensoru datu nolasīšanu un dažādu iekārtu vadību. Visas komandas tiek nosūtītas, izmantojot UART saskarni un COM portu. Arī dati tiek saņemti, izmantojot UART.
Šoreiz autors ir izveidojis elektrisko principiālo shēmu, ar kuras palīdzību ir iespējams nolasīt temperatūras un spiediena sensoru datus, ja nepieciešams, tad, izmantojot UART, var ieslēgt vai izslēgt kādu no iekārtām, piemēram, mirgojošu apgaismojumu.
1.1.att. Datu un komandu sūtīšanai paredzētā elektriskā principiālā shēma
int main(void){
char input_data;
DDRC = 0x01;
DDRB = 0x37;
DDRD = 0x7C;
USART_Init(); // Tiek inicializets USART ar BAUDRATE 9600
InitLCD(0);
Init_ADC();
while(1){
// Saņem komandu, kuru vēlāk pārbauda
_delay_ms(100);
input_data = USART_RxChar();
Data_check(input_data);
_delay_ms(20);
USART_SendString("\r");
USART_SendString("Sanemts!\r");
}
return 0;
}
void Data_check(char input_data){
float temperatura=0, pressure=0;
char data_char[6];
switch(input_data){
case ('0'):
LCDClear();
LCDWriteStringXY(1,0,"Gaisma ieslegta");
LCDWriteStringXY(1,1,"Komanda: '0'");
PORTD |= (1<<PD2);
_delay_ms(2000);
PORTD &= ~(1<<PD2);
LCDWriteStringXY(1,0,"Gaisma izslegta");
_delay_ms(1500);
LCDClear();
break;
case ('1'):
LCDClear();
LCDWriteStringXY(1,0,"Motors ieslegts");
LCDWriteStringXY(1,1,"Komanda: '1'");
PORTD |= (1<<PD3);
_delay_ms(1500);
PORTD &= ~(1<<PD3);
LCDWriteStringXY(1,0,"Motors izslegts");
_delay_ms(1500);
LCDClear();
break;
case ('2'):
LCDClear();
LCDWriteStringXY(1,0,"Temperatura oC");
LCDWriteStringXY(1,1,"Komanda: '2'");
_delay_ms(1000);
LCDClear();
LCDWriteStringXY(2,0,"Temperatura");
LCDWriteStringXY(9,1," oC");
temperatura = Read_ADC(1)/2.05;
USART_SendString("\r");
float_to_string(temperatura, data_char,2);
USART_SendString("Nolasita temperatura: ");
USART_SendString(data_char);
USART_SendString(" oC\r");
if(temperatura>=99){
LCDWriteStringXY(3,1,data_char);
}
else{
LCDWriteStringXY(5,1,data_char);
}
_delay_ms(2000);
LCDClear();
break;
case ('3'):
LCDClear();
LCDWriteStringXY(1,0,"Mirgojosa LED");
LCDWriteStringXY(1,1,"Komanda: '3'");
PORTD |= (1<<PD4);
_delay_ms(5000);
PORTD &= ~(1<<PD4);
LCDClear();
LCDWriteStringXY(1,0,"Mirgojosa LED");
LCDWriteStringXY(1,1,"izslegta");
_delay_ms(1500);
LCDClear();
break;
case ('4'):
LCDClear();
LCDWriteStringXY(1,0,"Spiediens kPa");
LCDWriteStringXY(1,1,"Komanda: '4'");
_delay_ms(1000);
LCDClear();
LCDWriteStringXY(3,0,"Spiediens");
LCDWriteStringXY(9,1," kPa");
pressure = (((Read_ADC(2)*5.0/1023.0)-0.475)/0.045)+21.1;
USART_SendString("\r");
float_to_string(pressure, data_char,2);
USART_SendString("Nolasitais spiediens: ");
USART_SendString(data_char);
USART_SendString(" kPa\r");
if(pressure>=99){
LCDWriteStringXY(3,1,data_char);
}
else{
LCDWriteStringXY(5,1,data_char);
}
_delay_ms(2000);
LCDClear();
default:
USART_SendString("\r");
USART_SendString("Nederiga komanda!\r");
break;
}
}
1.2.att. Kad nosūta komandu, lai ieslēgtu gaismu
1.3.att. Kad nosūta komandu, lai ieslēgtu motoru
1.4.att. Kad nosūta komandu, lai ieslēgtu gaismu
1.5.att. Kad nosūta komandu, lai nolasītu temperatūru
1.6.att. Kad nosūta komandu, lai nolasītu spiedienu