Прием данных из COM порта (Delphi) в Arduino Due
- Войдите на сайт для отправки комментариев
Добрый день, есть необходимость в запуске измерений на ардуино через ком порт, и приеме даных на пк.
Программа на пк реализована на Delphi с библиотекой ComDrv32, считывание производится более-менее корректно, хотя присутствует "мусор" в начале передачи.
Вот кусок кода на Делфи (по нажатию кнопки, в COM порт должна отсылаться условная команда "DO" как сигнал о начале измерений. В ардуино она должна считываться ( я так понимаю посредством Serial.readString()) :
procedure TMainForm.ToolButton2Click(Sender: TObject); begin cpDrv.Port:=pnCOM6; cpDrv.Connect; cpDrv.SendString('DO'); OutgoingRichEdit.Text:='Measuring'; end;
Вот кусок кода на языке Arduino:
beginizm: do // ждёт команды с пк { //читаем serial порт ; //inChar=Serial.read(); //inString=inString+inChar; inString = Serial.readString(); //inString = inString1 + inString; myGLCD.print("WAITING", 180,100); myGLCD.print(inString, 200,120); } while (Serial.available()); //while (inString!="DO"); if (inString!="DO") goto beginizm;
То есть цикл крутится пока не увидит в порту нужной строки.Инициализация переменных произведена в начале программы.
Проблема в том, что на экране arduino всегда висит WAITING, и даже при отправке строки DO c пк измерения не начинаются, в порт ничего со стороны ардуино не идет.
ужас а не код =)
во превых уберите лэйбы и перескоки( всё что связано с оператором goto) - вот правда, никогда не пользуйтесь этим оператором, любой код с goto - плохой код.
Во вторых - уберите из делфи всякие левые библиотеки работы с компортом, делфи прекрасно умеет работать с компортом как с файлом, если надо переконфигурировать порт - это тоже легко реализуется(примеров массы)
В третих,
inString =
Serial
.readString(); не сработает почти никогда так как вы хотите, если вы ищите совпадение среди текста то его и ищите, если же с начала строки - так и ищите с начала строки...
char a,b;
while (1){
if (Serial.avalilable()){
b = Serial.read();
if (a!="D"){
a=b;continue;
}else{
if (b=="0"){break;}else{a="-";}
}
};
дерзайте... если конечно поняли о чем я =)
>во превых уберите лэйбы и перескоки( всё что связано с оператором goto) - вот правда, никогда не пользуйтесь этим оператором, >любой код с goto - плохой код.
Глупые предрассудки :)