0

我正在将一个字符从 Visual Studio 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);

      }
  }

}

我被困了很长时间。感谢任何帮助

4

2 回答 2

0

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

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

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

于 2013-05-17T23:18:02.240 回答
0

尝试使用 int 而不是 char 读取等效的 Ascii (33)。还要换行

if(Serial.available() > 0)

if(Serial.available())

给你一些参考。这里

于 2013-05-17T18:55:13.973 回答