我一直在努力解决使用某些代码的通信速度。
所以我想提高代码和功能的波特率。 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#就知道发生了这个问题。我相信哪个可以排除硬件问题。
答案 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();
}
非常感谢