Я пытаюсь связаться с микроконтроллером Arduino. Это очень легко сделать в C #, но я не могу понять это в C ++. Вот мой код Arduino …
void loop()
{
if (Serial.available() > 0)
{
byte input = Serial.read();
Serial.write(input);
}
}
Поэтому все, что вы отправляете в arduino, просто будет отправлено вам обратно.
Я могу прочитать запись с помощью библиотеки fstream. Проблема в том, когда я пытаюсь прочитать из буфера, и ничего там нет.
int main(int argc, char** argv)
{
fstream filestr;
filestr.open ("COM4", fstream::in | fstream::out | fstream::trunc);
if (!filestr.is_open())
{
cout << "error opening port";
}
else
{
cout << "port opened";
}
char* input = new char();
cin >> input;
filestr.write(input, 1);
filestr.flush();
char * buffer = new char [1];
buffer[0] = -1;
filestr.read (buffer,1);
while ((int)buffer[0] == -1)
{
filestr.read (buffer,1);
}
cout << buffer[0];
cin >> input;
filestr.close();
return 0;
}
Поэтому я посылаю ему некоторые данные и начинаю читать в цикле, пока arduino не ответит обратно. Первое чтение ничего не вернет, потому что у arduino не было времени ответить, поэтому я продолжаю читать, пока не получит данные. Но я, кажется, никогда не получаю ответ. Это сработает, если я поставлю небольшую задержку перед первым чтением и дам arduino время для ответа. Изменяется ли положение читателя, когда я читаю что-то? Когда я читаю что-то из буфера, оно автоматически удаляется из буфера? Кто-нибудь знает, как это сделать?
Вы должны взять код инструмента Windows Arduino Firmata. Он делает все, что вы пытаетесь сделать.
Проверьте это еще один вопрос об использовании Boost Asio для чтения последовательных портов: Чтение с последовательного порта с Boost Asio