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