将数据从c#程序发送到Arduino
本文关键字:Arduino 程序 数据 | 更新日期: 2023-09-27 18:01:46
我有一个问题,从c#程序发送数字到Arduino(一个值在时间)。我注意到,如果我发送的值低于128是ok的,问题开始于更高的值。
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);
您可以尝试使用已知值进行测试,以确保以已知顺序进行适当的通信;
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
假设这是正确的,现在测试Endianness
arduino.Write(new byte[]{ 145, 240}, 0, 2);
然后Serial.readBytes(reciver,1); //check reciver == 145
Serial.readBytes(reciver,1); //check reciver == 240
最后很可能是你有一个字节接收器[1]* 256,你需要将它转换成一个可以存储较大值的值:
((int) reciver[1] * 256)
所以试试这个:
Serial.readBytes(reciver,2);
inShort[counter] = (short) reciver[0] | ((short) reciver[1]) << 8;