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();
}
非常感谢
我一直在与一些代码的通信速度作斗争。
所以我想提高代码和 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();
}
非常感谢