Считывание данных с Arduino Mega в Delphi

EvgenKir
Offline
Зарегистрирован: 17.09.2013

Здравствуйте.

Возникла такая проблемка, не могу разобраться, как мне в Делфи считывать данные с Ардуинки.

Задача состоит в том, у меня на Ардуино собран датчик температуры на базе DS18b20, их 8 штук.

С них считывается температура и мне нужно в Делфи, закидывать эти значения в таблицу. Главное хотябы сделать с одним датчиком, с остальными разберусь как.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013
zhuki
Offline
Зарегистрирован: 12.10.2011

Я когда то за основу брал  AsyncFree. Ищите по имени.

Val Rubis
Offline
Зарегистрирован: 12.08.2013

В Delphi получаю 8-мизначное число от Ардуино через com port, но при выводе cтрингом число разбивается на несколько частей. Если выводить в Memo выводит в столбик частями. Хотя в терминале выводит в одну строку. Пробовал несколько компонентов для работы с com port, везде одно и то же. На скрины разделены блоки, которые должны быть в одну строку. Не подскажите как победить?

P.S. Я так полагаю, из порта прихдит порционно.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

По таймауту - так и будет. Нужно чтобы разделителем строк был символ - например новой строки "\n".

Val Rubis
Offline
Зарегистрирован: 12.08.2013

Зчем разделитель? Не надо разделитель. На скрине 6 раз отправлены данные. Должно быть 6 строк. Показаны разной длины строки до переноса. Задача устранить перенос в рамках одного 8-мизначного блока, который уходит с Arduino одной строкой.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Вам шашечки или ехать ? Отправляете данные serial.println принимайте что то типа readstring или readline ... не знаю какой там у вас крмпонент или может пользуетесь winapi... 

А теперь чуть чуть бреда... по вашему, бреда.. Если вы ответите - каким образом происходит синхронизация пакетов передачи, а вы передаете пакетами по 8 символов, то я вам сразу отвечу как сделать обмен без /n. 

Val Rubis
Offline
Зарегистрирован: 12.08.2013

Без синхронизации. Serial.print от Arduino. Readstr от клиента. Получил - вывел.... частями

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Что без синхронизации ?  Readstr читает строку до байта со значением 0 или символа возврата каретки и перевода строки , в си это /n. Вы из ардуино этого не отправляете. Поэтому получаете ерунду. Так что раз не понимаете для чего синхронизация, a самое смешное, что не хотите понять, то и решить проблему не сможете. И никто вам не поможет, поскольку бесполезно. 

По сути вы пытаетесь синхронизироваться неявной задержкой, неявной потому что она возникает между отправками ардуин из за невысокого быстродействия последнего. А поскольку механизма отлова этой задержки в дельфи коде нет вы и получаете бред. Попробуйте после каждой отправки ардуиной вставлять задержку примерно в секунду, типа delay(1000). Но только не покзывайте никому это решение, а то смеяться будут.

Кстати это же дерьморешение пофиксит ваше непонимание того, что ваш код может работать быстрее чем происходит отправка 8 байт.

imv14
Offline
Зарегистрирован: 02.04.2014

Тоже разбираюсь с этим вопросом, для работы в делфи пока использую библиотеку bc_port, данные с ардуины посылаю через write, а не print, тогда корректно отображает. Опрашиваю датчики - посылаю данные с каждого датчика отдельно.

maxzik
Offline
Зарегистрирован: 14.05.2014

Val Rubis, скажи пожалуйста, чем ты пользуешься для получения данных с ардуины? В delphi испробовал разные компоненты, данные отправляются, обрабатываются прошивкой правильно, а вот данные с ардуины прочитать ну никак не получается через свои программы на delphi. Монитор порта в IDE Arduina и Putty данные принимают, а в моей программе даже в событие приема данных дебагер не заходит( Или есть какие-то специфические настройки компонентов чтобы данные получать? использовал Comport Library и Asynс Pro. В Comport Lib даже светодиод на TX не моргает. В Async моргает, но OnTriggerAvail все равно не срабатывает.

C ком портом работал и раньше по modbas протоколу, данные замечательно отлавливаются этими же компонентами, а с ардуиной чет никак(

P.S. Arduino Leonardo. Delphi 7 + Async Pro (win32)   и  Delphi XE5 + ComPortLibrary (win64)

 

Val Rubis
Offline
Зарегистрирован: 12.08.2013

Тоже бился с разными компонентами. Перешел на Visual Studio 2013. Там все сразу завелось без бубна и барабана.

maxzik
Offline
Зарегистрирован: 14.05.2014

Val Rubis пишет:

В Delphi получаю 8-мизначное число от Ардуино через com port, но при выводе cтрингом число разбивается на несколько частей. Если выводить в Memo выводит в столбик частями. Хотя в терминале выводит в одну строку. Пробовал несколько компонентов для работы с com port, везде одно и то же. На скрины разделены блоки, которые должны быть в одну строку. Не подскажите как победить?

P.S. Я так полагаю, из порта прихдит порционно.

 

А этого ты все же какими средствами добился? у меня проблема в разбиении не стоит. Проблема в получении в принципе. Тоже бы перешел на студию, но мне нужно будет использовать много наработок из предыдущего проекта, а он на delphi. Переписывать бы не хотелось. Да и нет у меня любви к visual studio(

Val Rubis
Offline
Зарегистрирован: 12.08.2013

Это я получал через пример ComExample из библиотеки ComPort.