从Arduino处理和C#串行读取垃圾/垃圾值
我到处找了找,但找不到解决这个问题的办法。我用我能想到的最简单的例子来测试这个。这是处理代码:从Arduino处理和C#串行读取垃圾/垃圾值,c#,serial-port,arduino,processing,C#,Serial Port,Arduino,Processing,我到处找了找,但找不到解决这个问题的办法。我用我能想到的最简单的例子来测试这个。这是处理代码: void setup() { Serial.begin(9600); } void loop() { for(int i =48;i<51;i++) { Serial.write(i); //writes 0-2 in ascii and 48-51 in bytes. } } 有时它会打印正确的值: 48 binary:00110000 49
void setup() {
Serial.begin(9600);
}
void loop() {
for(int i =48;i<51;i++) {
Serial.write(i); //writes 0-2 in ascii and 48-51 in bytes.
}
}
有时它会打印正确的值:
48 binary:00110000
49 binary:00110001
50 binary:00110010
48 binary:00110000
49 binary:00110001
50 binary:00110010
看起来每个字节都向左移动了3位,尽管我不明白为什么每次运行程序时它的行为都不一样。有趣的是,如果我让arduino发送0,1,2,它就不会打印垃圾
我真的想用C#读取数据。这是基于此示例的C#代码的核心部分:
它打印了一些正确的值,但经常漏掉数字,并散布着垃圾:
130 binary: 10000010
138 binary: 10001010
48 binary: 00110000
49 binary: 00110001
50 binary: 00110010
146 binary: 10010010
49 binary: 00110001
50 binary: 00110010
49 binary: 00110001
50 binary: 00110010
146 binary: 10010010
49 binary: 00110001
50 binary: 00110010
48 binary: 00110000
138 binary: 10001010
146 binary: 10010010
不正确数据的二进制值与正在处理的二进制值完全相同。在这里,3位移位在运行时似乎是随机的,而不是每次运行时都是一致的。我曾尝试在发送串行命令之间设置高达200ms的延迟。这有点帮助,但我仍然得到至少10%的垃圾数据。我正在尝试运行一个控制循环,所以我能承受的最长延迟是3毫秒。
我能做些什么来解决这个问题
谢谢
如果我在串行监视器上查看输出,它将正确打印
有时它会打印正确的值:
48 binary:00110000
49 binary:00110001
50 binary:00110010
48 binary:00110000
49 binary:00110001
50 binary:00110010
这表明配置有误,例如尝试4800波特。也许还可以检查其他属性(停止位、握手)。在混乱了一段时间后,我发现设置serialPort.DtrEnable=true;修正了C#的问题。但我仍然没有处理的解决方案。
if (serialPort.BytesToRead >0)
{
byte temp = (byte)serialPort.ReadByte();
Console.WriteLine(temp +"\t binary: " +byte2Binary(temp));
}
130 binary: 10000010
138 binary: 10001010
48 binary: 00110000
49 binary: 00110001
50 binary: 00110010
146 binary: 10010010
49 binary: 00110001
50 binary: 00110010
49 binary: 00110001
50 binary: 00110010
146 binary: 10010010
49 binary: 00110001
50 binary: 00110010
48 binary: 00110000
138 binary: 10001010
146 binary: 10010010