1

我是编程初学者,我需要一些帮助来通过串行读取请求(0x01 到 msb 和 0x02 到 lsb)之后的 2 个字节(msb/lsb),然后进行数学运算并在 2x16 显示器上显示. 我的项目功能只使用 1 个字节,效果很好。一个例子:

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

}
}   

问候。

4

2 回答 2

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


}  

此代码是阻塞的,因此您可能希望将 while 循环更改为延迟和一些 if 语句。另外,我不确定您的 LCD 是先打印 MSB 还是 LSB,我假设为 MSB。

于 2013-08-30T20:56:25.540 回答
1
if (Serial.available() >= 2) 
{
    MAP = Serial.read() << 8;
    MAP |= Serial.read();
}
于 2013-08-30T20:57:29.597 回答