我正在尝试编写一个简单的c#控制台应用程序来从串口读取/写入,该串口与我连接的Arduino进行通信。我遇到的问题是我可以写到Arduino没问题,但我无法收到任何数据。我的串口SerialDataReceivedEventHandler
也没有被解雇,但我猜这两个问题是相关的。
我知道导致问题的不是我的Arduino,因为在使用Arduino IDE时我能够毫无问题地接收数据。以下是我现在的代码:
SerialPort sPort = new SerialPort();
sPort.PortName = SerialPort.GetPortNames()[0];
sPort.BaudRate = 9600;
sPort.Parity = Parity.None;
sPort.DataBits = 8;
sPort.StopBits = StopBits.One;
sPort.RtsEnable = false;
sPort.Handshake = Handshake.None;
sPort.DataReceived += new SerialDataReceivedEventHandler(sPort_dataReceived);
sPort.ErrorReceived += new SerialErrorReceivedEventHandler(sPort_ErrorReceived);
sPort.Open();
Console.Read();
sPort.Write("tt_calib");
while (true)
{
if (sPort.ReadExisting() != string.Empty)
Console.WriteLine(sPort.ReadExisting());
}
我知道我没有关闭此代码中的端口,这不是问题,因为我每次都能重新运行并打开它。这段代码也不是最终的形式,我试图让读取事件工作,这样我就能以不同的方式对各种消息作出反应。我已经阅读了似乎每个问题的内容,但我找不到任何解决方案似乎都可以解决问题。
这是在Windows 8.1上运行的C#.NET 4.5控制台应用程序
答案 0 :(得分:5)
它最终成为一个愚蠢的简单问题。而不是sPort.RtsEnable = false;
它应该是true
。现在所有事件都会触发,我可以阅读。
答案 1 :(得分:0)
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.Write(indata);
}
答案 2 :(得分:0)
我遇到了完全相同的问题,最后意识到我的硬件流控制设置是可配置的bios,而我的设置是 DISABLED ! h