Работа над связью между Arduino и ПК (Win 7) в C ++. Нет проблем с установлением связи или просто отправкой или получением данных с помощью WriteFile и ReadFile. Но когда я хочу как-то «скоординировать» общение, у меня возникает проблема.
Цель в течение цикла (упрощенно):
for (int i=0; i < 310; i++)
{
com->send(micro[i]);
}
вызовите процедуру, которая должна отправить данные в arduino, а теперь просто получить обратно эти данные.
int send(string input)
{
DWORD written, read;
char buffer[7] = {' ',' ',' ',' ',' ',' ',' '};
input.append("$");if(!WriteFile(this->comMotor, input.c_str(), input.size(), &written, NULL))
qDebug() << "WriteFile failed"
if(written != input.c_str())
qDebug() << "write problem";do
{
if(!ReadFile(this->comMotor, buffer, sizeof(buffer), &read, NULL))
qDebug() << "ReadFile failed";
if (read)
qDebug() << "buffer: " << buffer;
}while(!read);
Я ожидал, что отправит вход в Arduino, а затем получить строку, как вход без $ назад. Но это не работает .. иногда он читает «ничего» или действительно задерживается, чего я не ожидал, используя активное ожидание ответа. Я думаю, что следующая отправленная строка должна ждать ответа, но, очевидно, это не так.
для завершения, вот код в Arduino:
void loop()
{
if (Serial.available())
{
char c = Serial.read();
if (c == '$')
{
if (readString.length() >0)
{
Serial.println(readString); //prints string to serial port out
int n = readString.toInt(); //convert readString into a number
}
readString=""; //clears variable for new input
}
else
{
readString += c; //makes the string readString
}
}
}
Любой совет, как решить это, или идея, что я делаю не так? Спасибо большое.
РЕДАКТИРОВАТЬ: отредактированный код
Решено — Ульрих был прав, но, к сожалению, я отредактировал только одну функцию. Моя вина.
Так что проблема была действительно в sizeof (input.c_str ()), после того, как он был изменен везде на input.size (), он работает.