簡體   English   中英

Arduino的C#串行通訊問題

[英]C# Serial Communications issues with Arduino

我一直在用一些代碼來應對通信速度。

所以我想提高代碼和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#,就會發生此問題。 我認為哪些排除了硬件問題。

嘗試一次從PC發送一個字符,然后使用Serial.read()將一個字符讀入arduino的緩沖區中。 有時,以高波特率從PC發送整個文本對於arduino來說太過分了。

謝謝您的投入。

認為我已經找到了解決方案,盡管不清楚原因。

我認為這是由於Serial.Avalible()命令造成的。 似乎我需要先發送一些數據才能使其注冊端口是開放的。

因此,將我的C#代碼修改為:有效

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();
}

非常感謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM