2013-08-30 3 views
1

Я начинаю программировать, и мне нужна помощь для чтения 2 байтов (msb/lsb), которые поступают после запроса (от 0x01 до msb и от 0x02 до lsb) через последовательный порт, а затем, математическая операция и отображение на дисплее 2x16. У меня есть функции моего проекта, которые используют только 1 байт, работающих хорошо. Один пример:arduino 2 байта serial.read

void funcao4() 
{ 
int MAP; 
float MAP1; 
delay(600); 
lcd.clear(); 
lcd.setCursor(0,0); 
lcd.print("MAP[mmHG]"); 


Serial.write(0x06); //request 

if (Serial.available() > 0) 
{ 

MAP = Serial.read() ; //read 
MAP1 = (MAP * 2.8759 + 91); //operation 

lcd.setCursor(0,1); 
lcd.print(MAP1); //display 

} 
} 

Отношения.

+0

Можете ли вы объяснить, что означают аббревиатуры? –

+0

MAP - датчик абсолютного давления от электронной системы впрыска (diag) – marv

ответ

2

Подождите, пока серийный буфер не имеет два байта, а затем прочитать их:

void funcao4() 
{ 
int MAP; 
float MAP1; 
delay(600); 
lcd.clear(); 
lcd.setCursor(0,0); 
lcd.print("MAP[mmHG]"); 


Serial.write(0x06); //request 

while(Serial.available() < 2); //wait until there are two bytes in the buffer 


MAP = Serial.read() << 8 ; //read MSB into MAP 
MAP += Serial.read();  //read LSB into MAP 
MAP1 = (MAP * 2.8759 + 91); //operation 

lcd.setCursor(0,1); 
lcd.print(MAP1); //display 


} 

Этот код блокировки, так что вы можете захотеть изменить из цикла в то время как к задержке, а некоторые если заявления. Кроме того, я не уверен, что ваш ЖК-дисплей сначала печатает MSB или LSB, я предполагал, что MSB.

1
if (Serial.available() >= 2) 
{ 
    MAP = Serial.read() << 8; 
    MAP |= Serial.read(); 
} 
Смежные вопросы