[英]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.