2015-01-09 67 views
0

我试图做一个控制台C++程序,将能够通过与我的Arduino单片机串口进行通信,但是我有与ReadFile的()函数的一个问题:C++串行通信问题

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

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

ReadFile函数始终返回“假”值,这意味着它没有找到在串口什么。在串行口的另一边,我有我的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()函数未在串口中找到任何信息。

任何碰巧知道为什么?

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

+2

串行通讯不可用的可能原因数量超过了SO答案中的可用空间,以将它们全部列出。 –

+0

I c。你能建议你采取什么方法来调试这种情况吗?可能有几件事你会检查这可能是一个可能的问题? – CodeBlocks

+0

首先尝试使用超级终端或类似的串行终端程序读取数据。用它来找出所有的端口设置。然后让你的程序复制这些设置。 –

回答

1

ReadFile函数始终返回“假”值,这意味着它没有找到任何

不,那是不这意味着什么。 FALSE返回值表示它失败。这是不正常的,您必须实现错误报告代码,以便您可以诊断原因。由于没有理由继续运行,结束程序。除非通过设置读取超时设置串口故意失败。

使用GetLastError()获取基础Windows错误代码。

+0

你是对的!我误读了msdn文档。我会立即检查是否可以按照您的建议查看发生了什么事。 – CodeBlocks

0

你看看使用MS Windows,以便尝试使用portmon先搭上Arduino的输出,那么你可以调试你的C++代码。