与Arduino的C#串行通信问题

时间:2016-09-11 17:32:57

标签: c# arduino serial-port .net-4.5 baud-rate

我一直在努力解决使用某些代码的通信速度。

所以我想提高代码和功能的波特率。 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();
}

因此运行String Read会返回“Recived \ r \ n”。 将波特率更改为19200,然后以“”返回。

为什么会出现这种情况?

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

谢谢你输入。

认为我找到了解决方案,但不清楚原因。

我认为这是由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();
}

非常感谢