Я использую C++ Builder 6 с установленным компонентом TComPort и Arduino. Вещь, что я пытаюсь сделать это следующим образом:Ожидание, пока рутина закончится на Arduino
for (int a = 0; a < n; a++){
Edit1->Text = "first";
ComPort->WriteString("a");
//wait till process on Arduino is finished
//receive char from Arduino and continue
Edit1->Text = "scnd";
ComPort->WriteString("b");
//wait till process on Arduino is finished
}
Arduino код (корпус):
case 'b':
digitalWrite(ledPin2, HIGH);
delay(1000);
Serial.write('2');
digitalWrite(ledPin2, LOW);
break;
Я пытался использовать OnRxChar, но есть проблема с получением строки из Arduino. Иногда они «пустые», а иногда они правильные (2). Может ли кто-нибудь вести меня, какая лучшая функция я могу использовать?
Edit: ComPort имеет функцию Read(void *,int,bool)
, но я понятия не имею, что void*
и int
обозначает (я новичок).
Редакция 2: Решение! Это то, что я сделал:
1-я функция; Timer1-> Enabled = false; {инструкции}; ComPort-> Write ('a');
2-я функция OnRxChar; {инструкции}; Timer1-> Enabled = true;
3-я функция Таймер; вернуться к 1-й функции
Когда я использовал Sleep вместо Timer, все замораживание приложения. Я надеюсь, что это будет полезно кому-то :) Я провожу неделю, чтобы понять: P
Когда я отправляю строку в Arduino, он включает светодиод. Моя проблема заключается в том, как дождаться окончания процесса Arduino и перейти к следующей строке на C++. – Mike
Помогло ли мое обновление? – zmo
Я пытался сделать это с циклом while, но он запустил программу, когда он попал внутрь цикла:/Я нашел другое решение: я использую ComPort1-> Read (buff, 1, true); и программа ждет символа char (это здорово!), но мне нужно добавить ShowMessage для выполнения строк в функции Read, иначе просто пропустите их:/ – Mike