Arduino — чтение с ком-порта переполнения стека

Я пытаюсь связаться с микроконтроллером 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 время для ответа. Изменяется ли положение читателя, когда я читаю что-то? Когда я читаю что-то из буфера, оно автоматически удаляется из буфера? Кто-нибудь знает, как это сделать?

0

Решение

Вы должны взять код инструмента Windows Arduino Firmata. Он делает все, что вы пытаетесь сделать.

http://firmata.org/wiki/Main_Page

0

Другие решения

Проверьте это еще один вопрос об использовании Boost Asio для чтения последовательных портов: Чтение с последовательного порта с Boost Asio

0

По вопросам рекламы [email protected]