c#串行通信问题与Arduino

本文关键字:Arduino 问题 通信 | 更新日期: 2023-09-27 18:06:30

我一直在与一些代码的通信速度作斗争。

所以我想增加这两个代码&Arduino。但是如果我离开9600波特率,数据就会停止发送&正确的行业。所以我设置了一个简单的测试程序。

Arduino代码:

void setup()
{
    Serial.begin(9600);
    Serial.setTimeout(10);
}
void loop()
{
    if (Serial.available())
    {
        String Data = Serial.readStringUntil('#');
        if (Data == "Test")
        {
            Serial.println("Recived");
        }
    }
    delay(1);
}
c#代码:

SerialPort Port = new SerialPort("COM4", 9600);
Port.Open();
if (Port.IsOpen)
{
     Port.Write("Test#");
     System.Threading.Thread.Sleep(1000);
     String Read = Port.ReadExisting();
     Port.Close();
}

所以运行字符串读取返回"received 'r'n"。将波特率更改为19200,它会以"返回。

知道为什么会发生这种情况吗?

编辑:如果我使用Arduino IDE的串行监视器程序,无论使用的波特率如何,这都可以正常工作。只要我使用c#,它就会出现这个问题。我相信这就排除了硬件问题。

c#串行通信问题与Arduino

尝试一次从PC发送一个字符,并使用Serial.read()将字符读取到arduino中的缓冲区中。有时,从PC以高波特率发送整个文本对arduino来说太大了。

感谢您的投入。

我想我已经找到了一个解决办法,虽然不清楚为什么。

我认为这是由于Serial.Avalible()命令。看来我需要先发送一些数据来注册端口是打开的。

所以修改我的c#代码如下:Works

SerialPort Port = new SerialPort("COM4", 9600);
Port.Open();
if (Port.IsOpen)
{
     Port.Write("#");
     Port.Write("Test#");
     System.Threading.Thread.Sleep(1000);
     String Read = Port.ReadExisting();
     Port.Close();
}

Thanks to lot