Arduino, Delphi, COMPort
- Войдите на сайт для отправки комментариев
Пт, 07/06/2019 - 07:20
Здравствуйте участники форума!
Пишу программу, которая управляет ардуино с компьютера (Вкл/Выкл реле, управляет шим сигналом).
Вопрос такой:
Мне надо отправлять условно говоря символ "0" чтобы вкл. реле1
если "1" то выл. реле1, управляю шим так: если выбрана скорость 85 то отправляю с Delphi "9", если 170 то "8" и тд.
проблема такая: могу отправлять только 0..9 после этого порт видет только последний символ, например "10" увидет как "0" подскажите как это исправить?
Общение делфи с ардуино происходит по средствам компонента comdrv32
Отправляю с Delphi так:
if RadioGroup1.ItemIndex=1 then
begin
CommPortDriver1.Sendstring('9');
end;
принемаю на Arduino так:
void loop()
{
if (Serial.available()>0)
//{byte in_data=Serial.parseInt();
{ int in_data=Serial.read()-'0';
if (in_data ==0)
{
Serial.println("Pin8 ON");
digitalWrite (pin8, HIGH);
Serial.println("Pin10 ON");
digitalWrite (pin10, HIGH);
}
if (in_data ==1)
{
digitalWrite(DV_VKL, 0);
Serial.println("Pin8 OFF");
digitalWrite (pin8, LOW);
Serial.println("Pin10 OFF");
digitalWrite (pin10, LOW);
}
наверное проблема с типом данных, в ардуино разобрался как менять данные с int на char а в делфи не пойму как?
Отправляю с Delphi так:
Отправь через обычный терминал.
void loop() { if( Serial.available() ) { int in_data = Serial.read(); switch( in_data ) { case '0': Serial.println("Pin8 ON"); digitalWrite (pin8, HIGH); Serial.println("Pin10 ON"); digitalWrite (pin10, HIGH); break; case '1': digitalWrite(DV_VKL, 0); Serial.println("Pin8 OFF"); digitalWrite (pin8, LOW); Serial.println("Pin10 OFF"); digitalWrite (pin10, LOW); break; default: Serial.print("ERROR! Unknown byte: " ); Serial.println( in_data ); } } }Дельфи через ком порт выдаёт ascii char. Запусти вот это кусочек и посмотри что прилетает из компорта.
if (Serial.available() > 0) { int i = Serial.read(); Serial.print(i); Serial.print(" "); Serial.print(i, HEX); Serial.println(" "); }Проблема в том, что Serial.read считывает очередной (один!) байт из буфера последовательного порта. А вы, отправляя с компьютера строку из двух байт, рассчитываете получить их на Ардуино в виде числа.
Если вам для управления Ардуино хватит 256 значений, то отправляйте их таким способом:
CommPortDriver1.Sendstring(chr(ваше_значение));
А в скетче уберите - '0' в пятой строке.
VladimirTsibrov
ОГРОМНОЕ ВАМ СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!
я так и думал, что надо с типом данных работать но не знал как в делфи конвнтировать тип данных.
ВСЕМ ВАМ БОЛЬШОЕ СПАСИБО!!!! ОЧЕНЬ ПОМОГЛИ!!!