Для работы с последовательным портом в среде программирования Delphi7 ниже приводится простенький пример, который может быть использован и для связи с Arduino.
Для начала нужно создать проект (File\New\Application), далее в форму добавляются два однострочных редактора (TEdit) для отправки и приема данных. И два списка (TComboBox) для выбора последовательного порта и задания скорости. Ну и три кнопки. Эти компоненты могут быть расставлены следующим образом:
Рисунок 33. Форма программы работы с COM
Далее, необходимо подключить библиотеку для работы с последовательным портом (ComPort).
Для этого нужно перейти в код программы и в разделе Uses добавить ComPort.
Данная библиотека или модуль содержит три подпрограммы, которые облегчают работу с последовательным портом:
procedure ComInit(proc:TProcRx; COM:string; speed:LongWord);
Запускает поток, в котором программа считывает с последовательного порта и кладет в буфер. При окончании строки (встречи символа с кодом 13), программа передает результат передает результат в указанную процедуру, которая автоматически вызывается. Процедура должна принимать один строковый параметр.
procedure ComWrite(A:byte);
Отправляет в последовательный порт 1 байт
procedure ComStop;
Останавливает считывание с последовательного порта.
Нажав на форму двойным щелчком, попадаем в обработчик события TForm1.FormCreate(Sender: TObject);
И его нужно привести в следующий вид:
var i:Integer;
begin
for i:=0 to ComPorts.Count-1 do//Цикл по доступным портам
ComboBox1.Items.Add(ComPorts[i]);//Добавление их в Combobox
ComboBox2.Text:='9600';//Задание скорости поумолчанию
if ComPorts.Count<>0 then ComboBox1.Text:=ComboBox1.Items[0]
else ComboBox1.Text:='Что-то не нашел. Впишите сами';
end;
Объект ComPorts содержит в себе список найденных в системе последовательных портов. Таким образом, при запуске программы происходит их добавление в список Combobox, чтоб пользователь смогу выбрать из доступных портов.
Далее необходимо написать обработчик для кнопки «Запустить», в которой нужно вызвать процедуру инициализации последовательного порта, но перед этим, необходимо создать процедуру, которая будет обрабатывать принятую строку:
procedure ReciveCom(st:string);
begin
Form1.edit1.text:=st; {записывает принятую строку в однострочный редактор Edit1.}
end;
Теперь уже можно инициализировать связь с COM-портом:
procedure TForm1.Button1Click(Sender: TObject);
begin
ComInit(ReciveCom, ComboBox1.Text, StrToInt(ComboBox2.Text));
end;
Таким образом, при приеме строки, будет вызываться процедура ReciveCom, в которую будет передана принятая строка.
Ну и в конце желательно не забывать останавливать чтение с последовательного порта:
ComStop;
Обработчик для кнопки «отправить» можно оформить следующим образом:
procedure TForm1.Button3Click(Sender: TObject);
var i:Integer;
begin
for i:=1 to Length(Edit2.text) do
ComWrite(Ord(Edit1.text[i]));
end;
Здесь запускается цикл по всем символам в текстовом поле, и по очереди отправляются в последовательный порт.
Библиотека работы с последовательным портом на Delphi