2015-01-09 66 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++代碼。