从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