arduino usb delphi
- Войдите на сайт для отправки комментариев
Вс, 14/05/2017 - 18:22
Нужно считывать данные с ацп ардуино, допустим 5 вольт, и передавать их в делфи по юсб.
Полистав форум, нашел тему, код взял от сюда.
http://arduino.ru/forum/programmirovanie/com-port-kak-svyaz-programmy-na...
Порт открывает, закрывает, но больше ничего не происходит. Помогите, что делаю не так, так как проблемму эту нужно решить мне, как можно быстрее.
Спасибо, заранее.
Д
елфи 7
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, AfDataDispatcher, AfComPort, StdCtrls, AfPortControls,
AfViewers, AfDataTerminal;
type
TForm1 = class(TForm)
AfComPort1: TAfComPort;
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
AfPortComboBox1: TAfPortComboBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
rcvStr : string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
AfComPort1.ComNumber := 3;
AfComPort1.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
AfComPort1.Close;
end;
procedure TForm1.Button3Click(Sender: TObject);
var s: string;
begin
try
rcvStr := rcvStr + AfComPort1.ReadString;
if pos('#',rcvStr)<>0 then
begin
s:=copy(rcvStr,0,pos('#',rcvStr)-1);
Memo2.Lines.Add(s);
Delete(rcvStr ,0,pos('#',rcvStr));
end;
except
end;
end;
end.
Ардуино Нано
#define _500ms 500
unsigned long Timer1PreviousMillis = 0;
void setup() {
// put your setup code here, to run once:
}
void loop() {
unsigned long TimerCurrentMillis = millis();
if(TimerCurrentMillis - Timer1PreviousMillis > _500ms)
{
float volt=5.0/1024*analogRead(A0);
Serial.println(String(volt)+ "#");
Timer1PreviousMillis = TimerCurrentMillis;
}
}
тупонул немного, не хватало
Serial.begin(9600);
Скорость передачи задал, теперь передача с ардуино идет, в мониторе порта посмотрел, все как надо.
Но как в делфи считать? Никак не получается. Хоть и добавил команду
AfComPort1.BaudRate:=br9600;
ничего не меняется
Если с номер порта со стороны delphi не промазали, то вроде все так.
А просто в монитор порта, выдает Ваши вольты раз в полсекунды?
UPD: ага. чуть опередили. На всяк случай спрошу: на кнопу3 (после кнопы1)нажимаете?
а если просто :
if pos('#',rcvStr)<>0 then
нет, так тоже не получается. ничего не приходит на ум.
скриншот с IDE с номером порта
http://arduino.ru/forum/programmirovanie/com-port-kak-svyaz-programmy-na...
я пробовал с таймером - результат тот же, ничего!
это имели в виду?
Вот с таймером
делфи
Еще упрощаем:
try
// if pos('#',rcvStr)<>0 then
тоже самое, я вот думаю, может я что-то пропустил и делфи не понимает, что читать?
В качестве бреда, пслушайте в DELPHI разные порты
чтобы я не делал - ничего не меняется
чтобы я не делал - ничего не меняется
А что не меняется-то? Сейчас какое состояние? Программа не получает из порта ни одного байта, программа получает непонятный мусор, ещё что-то?
Вы когда со своей программой экспериментируете Arduino IDE закрываете? Это во-первых. Больше никто не может ком-порт держать? А во-вторых, сделайте по человечески, в той теме есть же работающий пример! Уберите всякие таймеры, оставьте только обработчик события DataRecived. И смотрите событие-то происходит или нет. Если происходит, разбирайтесь, что там за данные пришли. Если не происходит, то что-то всё-таки у компонента порта недонастроили скорее всего.
Вы когда со своей программой экспериментируете Arduino IDE закрываете?
О, и я об этот косяк в своё время шишку набил.
закрываю и ничего не меняется
AfComPort1.ComNumber := 3;
AfComPort1.Open;
AfComPort1.BaudRate:=br9600;
Настройке и открытию порта в обработчике делать нечего. Вынесите в начало программы. В какой-нибудь OnShow главной формы. Ну или по кнопке делайте.
И самое-то главное Вы не написали - событие-то происходит или нет?
У меня вот такое работает :
http://arduino.ru/forum/programmirovanie/com-port-kak-svyaz-programmy-na-delphi-s-arduino#comment-279495
сделал как вы сказали, ничего не меняется. событие происходит, в мемо добавляются пустые строки... может у меня что-то с библиотекой AsyncFreeD что-то не так. потому что она не хотела запускаться и я ее установил вручную.
Возможно и с компонентом что не так, они большинство под древние версии Дельфи писаны. Можно что-то другое поискать. Заведомо к Вашей Дельфи подходящее (какая кстати версия?).
Если с тем что есть дальше поковыряться, то в обработчике события посмотрите чему равен Count - это число принятых байт. Ну и можно прочитать эти байты методом ReadData, черт знает, почему оно как строка не читается.
скажите, а как работает процедура procedure TForm1.AfComPort1DataRecived(Sender: TObject; Count: Integer);
она сама по себе будет обновлять значения ком порта, как таймер?
7 версия у меня, должно работать
DataRecived это событие (Event). Оно возникает, когда в порту есть принятые данные. Count - это количество принятых байт.
Спасибо. я многое узнал.но все же могу понять, что не так. у меня в данном случае просто путое место вылазит
Вот ссылка на архив: https://cloud.mail.ru/public/4XCo/gfagkLxqj
В архиве библиотека ComPort, которая мне показалась наиболее беспроблемной. Под моей Delphi XE3 установилась без единого предупреждения. Под 7 там тоже пакеты есть. Вот с этой библиотекой у меня обмен с ардуино заработал сразу. На ардуино использовался самый примитивный скетч с потенциометром. Скетч в архиве тоже есть. На компе использовалась программка из примеров к библиотеке: \ComPort\Examples\delphi\ComExample.dpr.
Устанавливаем компонент. Компилируем пример. Запускаем. Кнопка Settings. Выбираем com-порт, скорость, остальное у меня уже как надо стояло. Кнопка Open. Нажимаем её и видим как в окошке поехали числа. Ардуино разумеется уже был загружен нашим скетчем и подключен.
В этом проекте делается всё то же самое, что мы здесь пробовали. Только событие у компонента по-другому называется. Но суть вся та же.
Попробуйте, должно работать
Вот ссылка на архив: https://cloud.mail.ru/public/4XCo/gfagkLxqj
В архиве библиотека ComPort, которая мне показалась наиболее беспроблемной. Под моей Delphi XE3 установилась без единого предупреждения. Под 7 там тоже пакеты есть. Вот с этой библиотекой у меня обмен с ардуино заработал сразу. На ардуино использовался самый примитивный скетч с потенциометром. Скетч в архиве тоже есть. На компе использовалась программка из примеров к библиотеке: \ComPort\Examples\delphi\ComExample.dpr.
Устанавливаем компонент. Компилируем пример. Запускаем. Кнопка Settings. Выбираем com-порт, скорость, остальное у меня уже как надо стояло. Кнопка Open. Нажимаем её и видим как в окошке поехали числа. Ардуино разумеется уже был загружен нашим скетчем и подключен.
В этом проекте делается всё то же самое, что мы здесь пробовали. Только событие у компонента по-другому называется. Но суть вся та же.
Попробуйте, должно работать
Какой файл надо открыть из меню Open File для начала? У меня это только файлы DsgnCPortDXE.dpk или DsgnCPortDXE.dproj. Именно они дают после своей загрузки нужный для продолжения (компиляции) диалог. Однако в ходе компиляции DsgnCPortDXE.bpl выдается ошибка:
Compiling DsgnCPortDXE.dproj (Debug, Win32)
dcc32 command line for "DsgnCPortDXE.dpk"
c:\program files\embarcadero\studio\19.0\bin\dcc32.exe -$O- -$W+ -$J+ -$Y- --no-config -M -Q -Z -TX.bpl
-AGenerics.Collections=System.Generics.Collections;Generics.Defaults=System.Generics.Defaults;WinTypes=Winapi.Windows;WinProcs=Winapi.Windows;
DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE -DDEBUG -I"c:\program files\embarcadero\studio\19.0\lib\Win32\release";
C:\Users\Alexander\Documents\Embarcadero\Studio\19.0\Imports;"c:\program files\embarcadero\studio\19.0\Imports";
C:\Users\Public\Documents\Embarcadero\Studio\19.0\Dcp;"c:\program files\embarcadero\studio\19.0\include";C:\TurboPowerAsyncPro_2010_10_13\source;
"C:\Program Files\AsyncPro\packages";"C:\Program Files\Embarcadero\Studio\19.0\bin\ComPort\Source";"C:\Program
Files\Embarcadero\Studio\19.0\bin\ComPort\Source\_recovery" -LEC:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl
-LNC:\Users\Public\Documents\Embarcadero\Studio\19.0\Dcp -NSSystem.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;Vcl;Vcl.Imaging;Vcl.Touch;
Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi; -O"c:\program files\embarcadero\studio\19.0\lib\Win32\release";
C:\Users\Alexander\Documents\Embarcadero\Studio\19.0\Imports;"c:\program files\embarcadero\studio\19.0\Imports";
C:\Users\Public\Documents\Embarcadero\Studio\19.0\Dcp;"c:\program files\embarcadero\studio\19.0\include";C:\TurboPowerAsyncPro_2010_10_13\source;
"C:\Program Files\AsyncPro\packages";"C:\Program Files\Embarcadero\Studio\19.0\bin\ComPort\Source";"C:\Program
Files\Embarcadero\Studio\19.0\bin\ComPort\Source\_recovery" -R"c:\program files\embarcadero\studio\19.0\lib\Win32\release";
C:\Users\Alexander\Documents\Embarcadero\Studio\19.0\Imports;"c:\program files\embarcadero\studio\19.0\Imports";
C:\Users\Public\Documents\Embarcadero\Studio\19.0\Dcp;"c:\program files\embarcadero\studio\19.0\include";C:\TurboPowerAsyncPro_2010_10_13\source;
"C:\Program Files\AsyncPro\packages";"C:\Program Files\Embarcadero\Studio\19.0\bin\ComPort\Source";"C:\Program
Files\Embarcadero\Studio\19.0\bin\ComPort\Source\_recovery" -U"c:\program files\embarcadero\studio\19.0\lib\Win32\release";
C:\Users\Alexander\Documents\Embarcadero\Studio\19.0\Imports;"c:\program files\embarcadero\studio\19.0\Imports";
C:\Users\Public\Documents\Embarcadero\Studio\19.0\Dcp;"c:\program files\embarcadero\studio\19.0\include";C:\TurboPowerAsyncPro_2010_10_13\source;
"C:\Program Files\AsyncPro\packages";"C:\Program Files\Embarcadero\Studio\19.0\bin\ComPort\Source";"C:\Program
Files\Embarcadero\Studio\19.0\bin\ComPort\Source\_recovery" -K00400000 --description:"ComPort Library Delphi XE"
-NBC:\Users\Public\Documents\Embarcadero\Studio\19.0\Dcp -NHC:\Users\Public\Documents\Embarcadero\Studio\19.0\hpp\Win32 DsgnCPortDXE.dpk
[dcc32 Fatal Error] CPortLibDXE.dpk(1): E2225 Never-build package 'CPortLibDXE' must be recompiled
[dcc32 Fatal Error] DsgnCPortDXE.dpk(34): E2202 Required package 'CPortLibDXE' not found
Failed
Elapsed time: 00:00:00.2
Хотя путь к папке с фйалами прописан в настройках Embarcodero Delphi.
Речь как я понимаю идет о требуемом для компиляции файле CPortLibDXE.dcp
Спрашивается где его взять - этот файл - если в установочном пакете, скачанном мною его нет? На всякий случай обшарил весь комп но такого файла на нем просто нет. Что спрашивается делать? Повторяю - установка библиотеки ComPort идет на Embarcodero Delphi Starter - Embarcadero® Delphi 10.2 Version 25.0.26309.314
ПРОБЛЕМА РЕШЕНА С УСТАНОВКОЙ БИБЛИОТЕКИ ComPort на Embarcodero Delphi Starter v. 10.2
0. размещаем папку с разархивированной библиотекой в каком то месте - например - C:\ComPort
1. запускаем IDE Embarcodero Delphi Starter 10.2
2. Tools->Options->Library->в окне пути к библиотеке добавляем пути к подпапкам Sources и DCU, находящимся в папке C:\ComPort.
3. File->Open открываем файл DsgnCPortDXE.dsk, находящийся в папке C:\ComPort\Sources - справа в окне IDE появится окно:
4. на щелкаем правой кнопкой мышки на файле CPortLibDXE.dcp и в меню указываем - remove from project (удалить из проекта)
5. щелкаем правой кнопкой мышки на файле DsgnCPortDXE.bpl и в появившемся меню указываем в начале Compile (сомпилировать), а затем после успешной компиляции опять щелкаем правой кнопкой мышки на файле DsgnCPortDXE.bpl и в появившемся меню указываем Install (установить).
6. File -> Close All -> сохранить изменения
7. создаем новый проект и в инспекторе объектов уже видим установленный пакет с компонентами
можно начинать работать!!!
Какой диалог? Всё устанавливается как обычно. Сначала компилируется рантайм пакет, потом компилируется и устанавливается дизайнтайм пакет. Если уж совсем по шагам, то так:
- Распаковать архив
- В Library path добавить путь к папке Source. Именно к Source.
- Открыть CPortLibDXE.dpk Компилировать (Compile)
- Открыть DsgnCPortDXE.dpk Установить (Install) Пакет скомпилируется и установится.
Если что-то предложат сохранить - не надо. Всё.
Под рукой десятки нет, проверить не могу. Но уж на отсутствие файлов оно точно ругаться не должно.
Ну, Вы уже всё установили, смотрю. Хоть и какими-то окольными путями. Главное результат :)
Какой диалог? Всё устанавливается как обычно. Сначала компилируется рантайм пакет, потом компилируется и устанавливается дизайнтайм пакет. Если уж совсем по шагам, то так:
- Распаковать архив
- В Library path добавить путь к папке Source. Именно к Source.
- Открыть CPortLibDXE.dpk Компилировать (Compile)
- Открыть DsgnCPortDXE.dpk Установить (Install) Пакет скомпилируется и установится.
Если что-то предложат сохранить - не надо. Всё.
Под рукой десятки нет, проверить не могу. Но уж на отсутствие файлов оно точно ругаться не должно.
Надо указывать путь к обеим указанным мною папкам - я это уже проверил. При указании пути только к папке Source вылезет ошибка. По крайней мере на данной версии Delphi. И перед компиляцией НЕОБХОДИМО удалить указанный мною файл - иначе вылезет ошибка - я в этом уже лично убедился - да и в сети тоже самое люди пишут (это касается указанной версии Delphi, а так же 5-7-й). Кто сомневается может проверить. Насчет сохранения спорить не стану - не проверял
Какой диалог? Всё устанавливается как обычно. Сначала компилируется рантайм пакет, потом компилируется и устанавливается дизайнтайм пакет. Если уж совсем по шагам, то так:
- Распаковать архив
- В Library path добавить путь к папке Source. Именно к Source.
- Открыть CPortLibDXE.dpk Компилировать (Compile)
- Открыть DsgnCPortDXE.dpk Установить (Install) Пакет скомпилируется и установится.
Если что-то предложат сохранить - не надо. Всё.
Под рукой десятки нет, проверить не могу. Но уж на отсутствие файлов оно точно ругаться не должно.
Надо указывать путь к обеим указанным мною папкам - я это уже проверил. При указании пути только к папке Source вылезет ошибка (http://www.tutorialdelphi.com/2015/04/Install-Component-Comport-Delphi-XE5-XE6-XE7.html). По крайней мере на данной версии Delphi. И перед компиляцией НЕОБХОДИМО удалить указанный мною файл - иначе вылезет ошибка - я в этом уже лично убедился - да и в сети тоже самое люди пишут (это касается указанной версии Delphi, а так же 5-7-й) - http://www.tutorialdelphi.com/2015/04/Install-Component-Comport-Delphi-XE5-XE6-XE7.html. Кто сомневается может проверить. Насчет сохранения спорить не стану - не проверял
Надо указывать путь к обеим указанным мною папкам - я это уже проверил. При указании пути только к папке Source вылезет ошибка (http://www.tutorialdelphi.com/2015/04/Install-Component-Comport-Delphi-XE5-XE6-XE7.html). По крайней мере на данной версии Delphi. И перед компиляцией НЕОБХОДИМО удалить указанный мною файл - иначе вылезет ошибка - я в этом уже лично убедился - да и в сети тоже самое люди пишут (это касается указанной версии Delphi, а так же 5-7-й) - http://www.tutorialdelphi.com/2015/04/Install-Component-Comport-Delphi-XE5-XE6-XE7.html. Кто сомневается может проверить. Насчет сохранения спорить не стану - не проверял
Я сомневаюсь, и я проверил. Свежеустановленная Delphi 10.2 Starter - достаточно всё сделать по выше описанным мной понятным, логичным и простым шагам, без всякого шаманства. Это я не в претензию Вам, а только в порядке информации - возможно пригодится в будущем. Главное, что у Вас всё получилось.
Я сомневаюсь, и я проверил. Свежеустановленная Delphi 10.2 Starter - достаточно всё сделать по выше описанным мной понятным, логичным и простым шагам, без всякого шаманства. Это я не в претензию Вам, а только в порядке информации - возможно пригодится в будущем. Главное, что у Вас всё получилось.
Возможно, что дело тут связано с различными операционными системами на наших компьютерах - если это конечно так. Или в чем то другом. Но я и другие люди действительно сталкивались с такими проблемами при установке библиотеки. Думаю это надо иметь в виду как один из вариантов при установке библиотеки.
Сумничал МОЛОДЕЦ! Автор выше опубликованного поста просто гений!!! Несколько дней бъюсь с ошибкой при компеляции, уже 100 вариантов библиотек смени, не помогает!!!! Вы бы сперва вникли в суть проблемы, а потом отвечали. И без вас был понятен алгорит стандартной установки, но он ни как не получался, несколько раз переустановил даже делфи, чуть испанский с малазийским не выучил. ОГРОМНОЕ СПАСИБО АВТОРУ ОПУБЛИКОВАВШЕМУ РЕШЕНИЕ ДАННОЙ ПРОБЛЕМЫ К Р А СА Ч И К !!!
Версия WINDOWS 10 КОРПАРАТИВНАЯ Х64
Версия ДЕЛФИ 10.2
(Сори если кого огорчи просто эмоции от радости)
Ууууррррраааааа! Огромное ВАМ человеческое спасибо !!! Благодаря вам все заработало!!!