【问题标题】:SerialPort.ReadLine() does not read data from USB COM port sent by ArduinoSerialPort.ReadLine() 不会从 Arduino 发送的 USB COM 端口读取数据
【发布时间】:2016-09-09 00:13:15
【问题描述】:

我正在使用 Arduino 将文本数据发送到 COM15(通过微型 USB)。在我的桌面上,我试图从我的 C# 应用程序中读取数据。但是,当我运行它时,控制台什么也没有显示,并且程序停留在“string s = myPort.ReadLine()”这一行。

以下是我的 C# 程序:

static void Main(string[] args)
{
    var myPort = new SerialPort("COM15", 115200);
    myPort.Open();
    while (true)
    {
        var s = myPort.ReadLine(); // execution stucks here waiting forever!
        Console.WriteLine(s);
    }
}

以下是Arduino代码(向COM15发送数据):

int counter = 1;
void setup() {
  // put your setup code here, to run once:
 Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
Serial.println(" Data Loop = " + String(counter));
counter++;
delay(500);
}

arduino 串行监视器确实显示在 COM15 接收到的数据。我还尝试了其他读取 COM 端口的软件,并验证了该端口上的数据可用。

【问题讨论】:

    标签: c# arduino serial-port


    【解决方案1】:

    通过在 myPort.Open() 命令之前添加以下行,我设法解决了我的问题并成功地从 COM 读取:

    myPort.DtrEnable = true;
    

    你可能会问什么是 Dtr 标志。 Dtr 代表“数据终端就绪”,根据Wikipedia

    数据终端就绪 (DTR) 是 RS-232 串行中的控制信号 从数据终端设备 (DTE) 传输的通信,例如 作为计算机,数据通信设备 (DCE),例如 调制解调器,以指示终端已准备好进行通信,并且 调制解调器可能会启动一个通信通道。

    【讨论】:

      【解决方案2】:

      您没有正确读取端口。

      这是一个关于如何正确读取来自 comport 的数据输入的示例。

      public static void Main()
      {
          SerialPort mySerialPort = new SerialPort("COM1");
      
          mySerialPort.BaudRate = 9600;
          mySerialPort.Parity = Parity.None;
          mySerialPort.StopBits = StopBits.One;
          mySerialPort.DataBits = 8;
          mySerialPort.Handshake = Handshake.None; // Some device needs a different handshake.
      
          mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
      
          mySerialPort.Open();
      
          Console.WriteLine("Press any key to continue...");
          Console.WriteLine();
          Console.ReadKey();
          mySerialPort.Close();
      }
      
      private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
      {
          SerialPort sp = (SerialPort)sender;
          string indata = sp.ReadExisting();
          Debug.Print("Data Received:");
          Debug.Print(indata);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多