3

C# プログラムから Arduino に数値を送信する際に問題があります (一度に 1 つの値)。128 未満の値を送信しても問題ないことに気付きましたが、問題はより高い値で始まりました。

C# 行:

shinput = Convert.ToInt16(line2); // shinput = short.
byte[] bytes = BitConverter.GetBytes(shinput);
arduino.Write(bytes, 0, 2);

Arduino ライン:

Serial.readBytes(reciver,2);
inByte[counter]= reciver[0]+(reciver[1]*256);

どんな助けでも本当に感謝します。

4

1 に答える 1

0

既知の値でテストして、適切な通信を既知の順序で確認できます。

arduino.Write(new byte[]{ 145}, 0, 1);
arduino.Write(new byte[]{ 240}, 0, 1);

それから

Serial.readBytes(reciver,1); //check reciver == 145
Serial.readBytes(reciver,1); //check reciver == 240

これが正しいと仮定して、エンディアンをテストします

arduino.Write(new byte[]{ 145, 240}, 0, 2);

それから

Serial.readBytes(reciver,1); //check reciver == 145
Serial.readBytes(reciver,1); //check reciver == 240

最終的には、バイト reciver[1] * 256 があり、より大きな値を格納できる値にキャストする必要がある可能性があります。

((int) reciver[1] * 256)

だからこれを試してください:

Serial.readBytes(reciver,2); 
inShort[counter] = (short) reciver[0] | ((short) reciver[1]) << 8;
于 2013-03-02T14:14:06.713 に答える