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

シリアル バッファが 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 に答える