C++串行通信问题

C++ Serial Communication Issue

本文关键字:问题 通信 C++      更新时间:2023-10-16

我正在尝试制作一个控制台C++程序,该程序能够通过串行端口与我的Arduino微控制器进行通信,但是我在使用ReadFile()功能时遇到了问题:

这是我的C++控制台程序中的 ReadFile() 函数代码:

            if(ReadFile(myPortHandle, &szBuf, 1, &dwIncommingReadSize, NULL) != 0)
            {
                cout<<"FOUND IT!"<<endl;
                Sleep(100);
            }
            else
            {
                cout<<".";
                Sleep(100);
            }

ReadFile 函数始终返回"False"值,这意味着它在串行端口中找不到任何内容。在串行端口的另一端,我用以下代码连接了我的Arduino:

int switchPin = 4;                       // Switch connected to pin 4
void setup() {
  pinMode(switchPin, INPUT);             // Set pin 0 as an input
  Serial.begin(9600);                    // Start serial communication at 9600 bps
}
void loop() {
  if (digitalRead(switchPin) == HIGH) {  // If switch is ON,
    Serial.write(1);               // send 1 to Processing
  } else {                               // If the switch is not ON,
    Serial.write(0);               // send 0 to Processing
  }
  delay(100);                            // Wait 100 milliseconds
}
每次

按下按钮时,我都会向串行端口发送"1"值,每次不按下按钮时都会发送"0"。基本上,我从我观看的有关如何与程序 Processing 进行串行通信的教程中获得了 Arduino 代码(它完美运行),尽管我无法使用我用C++制作的简单控制台应用程序做同样的事情,因为由于某种原因 ReadFile() 函数在串行端口中找不到任何信息。

有人碰巧知道为什么吗?

PS:C++控制台程序中的完整代码可以在这里找到:https://stackoverflow.com/questions/27844956/c-console-program-serial-communication-arduino

ReadFile 函数始终返回"False"值,这意味着它没有找到任何内容

不,这不是它的意思。 FALSE 返回值指示它失败。 这从来都不正常,您必须实现错误报告代码,以便诊断原因。 并结束程序,因为几乎没有理由继续运行。 除非您通过设置读取超时将串行端口设置为故意失败。

使用 GetLastError() 获取底层 Windows 错误代码。

您希望使用MS Windows,因此请尝试先使用portmon捕获arduino输出,然后您可以调试C++代码。