Arduino+Lazarus. Устанавливаем, тестируем.
Итак, наша задача написать простую программу на Lazarus, которая поможет управлять яркостью диода на Arduino. Сразу оговорюсь, что работал на LinuxMint. Под Windows не проверял.
Этапы работы:
1. Установить необходимую библиотеку для Lazarus.
2. Создать программу на Lazarus.
3. Написать скетч для Arduino.
4. Протестировать.
1. Установить необходимую библиотеку для Lazarus.
Для работы с последовательным портом в Lazarus’е необходимо установить библиотеку SynaSer serial library. (прямая ссылка на архив).
Скачиваем, распаковываем в удобное место. Желательно, что бы путь не содержал пробелы и русские символы. Получаем папку с названием Sdpo.
Запускаем Lazarus. В пункте меню «Пакет» выбираем «открыть файл пакета».
Переходим к папке Sdpo и в ней выбираем sdposeriallaz.lpk:
Подтверждаем выбор кнопочкой «Открыть». Появляется новое окно, в котором выбираем «установить» (желтая молния сверху»
Появляется запрос разрешения на пересборку — отвечаем утвердительно:
Несколько томительных секунд ожидания — и IDE Lazarus перезагружается.
В панели компонентов появляется новая закладка и на ней элемент TSdpoSerial:
Начинаем работу над программой на Lazarus’е
В меню файл выбираем «создать…» и в окне — «приложение»:
На форме размещаем компоненты SdpoSerial1, ScrollBar1, Button1. На рисунке я еще Label1 добавил 😉
Для изменения параметров объектов в инспекторе объектов устанавливаем следующие параметы:
Для кнопки: свойство Caption — «Соеденить». (Connect — не модно 🙂 )
Для ScrollBar1: свойство Max делаем равным 255
Для SdpoSerial — как на рисунке.В частности изменено значение BaudRate и Device (этот параметр можно посмотреть при подключении Arduino.
Пишем код: Дважды щелкаем по кнопке Соеденить и в открывшуюся процедуру пишем SdpoSerial1.Active:=true;
Дважды кликаем по компоненту SdpoSerial1 на форме и в процедуру пишем:
procedure TForm1.SdpoSerial1RxData(Sender: TObject);
var rec:string;
begin
sleep(1);
chek:=chr(TrackBar1.Position);
sdposerial1.WriteData(chek);
end;
Если без sleep — то, вероятно, программа целиком погружается в чтение и подвисает.
Последний шаг: в инспекторе объектов выбираем форму и вкладку «события». В ней — событие OnClose… (на картинке снизу выделено немножко не то — надо на два пункта выше)
Щелкаем по многоточию и в процедуре пишем:
procedure TForm1.FormClose(Sender: TObject);
begin
SdpoSerial1.Active:=false;
end;
Всё. Сохраняем, запускаем, исправляем возможные опечатки.
Скетч на ардуино:
int s;
void setup() {
Serial.begin(9600);
pinMode(11, OUTPUT);
}
void loop() {
s=Serial.read();
analogWrite(11,s);
delay(50);
}
Из теста понятно, что диод (а может не диод, а серво-двигатель?) висит на 11-ом пине.
Прошиваем. При этом программа на Lazarus не должна работать (по крайней мере у меня это вызывало отказ загрузки скетча).
Запускаем нашу программу. Можно и без Lazarusa — она есть в папке, куда мы сохраняли проект — тогда просто двойным щелчком:
Igor Stepanov (@Sigorillo)
Авг 12, 2012 @ 10:12:54
Здравствуйте. Возможно просто опечатка, но соедИнение пишется через и.
Igor Stepanov (@Sigorillo)
Авг 14, 2012 @ 12:56:22
Ещё раз здравствуйте. Удалось соединить Lazarus с COM портом, там конечно не Arduino, а LaunchPad на msp430 от Texas Instruments, но все равно спасибо за данное руководство!
Вадим Кузьмин
Ноя 08, 2012 @ 09:28:28
В архиве synaser.zip, полученном по прямой ссылке, файла sdposeriallaz.lpk нет. И вообще ни одного файла .lpk нет. Там исключительно .pas файлы исходников. Где Вы взяли sdposeriallaz.lpk?
shaman
Мар 11, 2013 @ 21:16:05
Зачем вводить людей в заблуждение???
в примере вы используете библиотеку sdpo
http://sourceforge.net/projects/sdpo-cl/files/Sdpo%200.2.0/
а в начале статьи говорите, что используете библиотеку SynaSer
не хорошо…
Nargott
Мар 30, 2013 @ 16:35:09
Я думаю, что имелся ввиду вот этот компонент: http://wiki.freepascal.org/5dpo
Kimoncar
Окт 13, 2014 @ 09:06:56
Написал статью на своем сайте на данную тему, с правильными библиотеками и с видео работы Ардуино+Лазарус. http://kimoncar.ru/lazarus-arduino-uno-ispolzovanie-virtualnogo-com-porta