簡體   English   中英

c ++和arduino之間的串行通信

[英]Serial communication between c++ and arduino

我需要使用C ++與arduino進行通信,我已經嘗試過這個代碼用於c ++:

#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;

int j=5;
main()
{
 fstream arduino;
 arduino.open("/dev/ttyACM0",ios::in | ios::out);
 //Opening device file

 if(!arduino)
   cout<<"error";
 arduino<<2;
 arduino.clear();
 arduino>> j;
 cout <<j;
 arduino.close();
 return 0;
}

Arduino代碼:

      int p;
      void setup() 
      {
          pinMode(13,OUTPUT);
          Serial.begin(9600);
       }

       void loop() 
       {
           if(Serial.available())
           {
               p=Serial.read();
               if(p!=-1)
               {
                   Serial.write(1);
                   digitalWrite(13,HIGH);
                   delay(5000);
                }   
            }
            else
            {
                digitalWrite(13,LOW);
                delay(1000);
            } 
        }

所以根據這段代碼,當c ++代碼運行時,arduino上的引腳13的led發光5秒鍾,cout應該打印1.但是led不發光而cout正在打印5(最初看到j = 5)。我正在使用這個程序來測試c ++和arduino之間的串行通信。 但我不知道發生了什么。我們是否還需要任何特殊的串行通信庫? 我的代碼好嗎? 請幫幫我。

如果j保持其舊值,則可能是讀取它的嘗試失敗。 嘗試檢查流狀態,並檢查可能的錯誤情況。 例如:

if(arduino >> j)
    cout << "Value received: " << j << '\n';
else if(arduino.eof())
    cerr << "Premature EOF.\n";
else if(arduino.bad())
    cerr << "Attempt to read from device failed.\n";
else
    cerr << "Logical I/O error.\n";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM