发送到串口的字符不被arduino读取

时间:2013-05-17 18:04:57

标签: c# visual-studio-2010 serial-port arduino arduino-ide

我将视觉工作室C#中的角色发送到串口,我希望arduino能够阅读角色并做一些工作。但是,它没有正确阅读。我已经使用串行监视器测试了arduino程序,它运行正常。这是我的C#代码。

private void startBit_Click(object sender, EventArgs e)
    {
        char start = '!';
        byte[] buffer = new byte[] { Convert.ToByte(start) };
        timerRealTimeData.Enabled = true;
        serialPort1.PortName = "COM29";
        serialPort1.BaudRate = 9600;
        serialPort1.DtrEnable = true;
        serialPort1.Open();
        serialPort1.Write(buffer, 0, 1);
        if (serialPort1.IsOpen)
        {

            Start.Enabled = false;
            Stop.Enabled = true;

        }
    }

这是用于读取串口的arduino代码

char incomingByte;
void setup()
{
  Serial.begin(9600);
  pinMode(13,OUTPUT);

}
 void loop()
 {

 if(Serial.available() > 0) {

  incomingByte = Serial.read();
  if(incomingByte=='!')
      {
        digitalWrite(13,HIGH);
        delay(2000);
        digitalWrite(13,LOW);

      }
  }

}

我长期坚持这一点。感谢任何帮助

2 个答案:

答案 0 :(得分:0)

尝试使用int而不是char来读取等效的Ascii(33)。同时更改行

if(Serial.available() > 0)

if(Serial.available())

为您提供一些参考。 Here

答案 1 :(得分:0)

首先,创建一个打开串口的功能,以及关闭串口的功能。您的单击处理程序startBit_Click将打开串行端口,这意味着如果再次调用该处理程序,则该端口已打开并将生成异常。 (除非你有其他代码未显示关闭串口?)

其次,我猜你通过USB端口连接到arduino? 如果是这样,DtrEnable应为false(默认),因为您没有XON / XOFF软件握手。

您还应该在调试窗口中检查缓冲区,在为缓冲区分配字符后设置断点,并检查您发送的字符是否确实如此。