2016-06-01 8 views
1

мне нужно общаться с Arduino с помощью C++, я попробовал этот код на C++:Последовательная связь между C++ и Arduino

#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++-код запускает вывод 13 на arduino slow в течение 5 секунд, а cout должен печатать 1. Но вместо этого светодиод не светится, а cout печатает 5, которые (см. это изначально j = 5). Я использую эту программу для тестовую последовательную связь между C++ и arduino. Но я не знаю, что происходит. Также нам нужна любая специальная библиотека для последовательной связи? Является ли мой код в порядке? Пожалуйста, помогите мне.

+0

@MANDY: Перед запуском программы на C++ убедитесь, что вы настраиваете правильную скорость передачи, контроль четности, управление потоком и т. Д. Например, утилита 'stty' может помочь с этим. –

ответ

0

Если 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"; 
+0

извините, я новичок в C++. Я получил ошибку - «Преждевременный EOF». Как исправить это? – MANDY

+0

Я не знаю, что происходит на самом деле, но я подозреваю, что устройство Arduino может посылать один байт (или короче вашего ПК), а на ПК требуется как минимум 'sizeof (int)' байты (обычно 4 байта), чтобы выполнить чтение переменной переменной типа int. Другая возможная причина заключается в том, что на ПК нет ничего. Попробуйте изменить тип входных переменных на 'char', и посмотрите, успешно ли чтение. – Paulo1205

+0

Я попытался изменить int на char, но он показывает ту же ошибку. – MANDY