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 — она есть в папке, куда мы сохраняли проект — тогда просто двойным щелчком:

наша программа

Всё.

Радуемся.

6 комментариев (+add yours?)

  1. Igor Stepanov (@Sigorillo)
    Авг 12, 2012 @ 10:12:54

    Здравствуйте. Возможно просто опечатка, но соедИнение пишется через и.

    Ответить

  2. Igor Stepanov (@Sigorillo)
    Авг 14, 2012 @ 12:56:22

    Ещё раз здравствуйте. Удалось соединить Lazarus с COM портом, там конечно не Arduino, а LaunchPad на msp430 от Texas Instruments, но все равно спасибо за данное руководство!

    Ответить

  3. Вадим Кузьмин
    Ноя 08, 2012 @ 09:28:28

    В архиве synaser.zip, полученном по прямой ссылке, файла sdposeriallaz.lpk нет. И вообще ни одного файла .lpk нет. Там исключительно .pas файлы исходников. Где Вы взяли sdposeriallaz.lpk?

    Ответить

  4. shaman
    Мар 11, 2013 @ 21:16:05

    Зачем вводить людей в заблуждение???
    в примере вы используете библиотеку sdpo
    http://sourceforge.net/projects/sdpo-cl/files/Sdpo%200.2.0/
    а в начале статьи говорите, что используете библиотеку SynaSer
    не хорошо…

    Ответить

  5. Nargott
    Мар 30, 2013 @ 16:35:09

    Я думаю, что имелся ввиду вот этот компонент: http://wiki.freepascal.org/5dpo

    Ответить

  6. Kimoncar
    Окт 13, 2014 @ 09:06:56

    Написал статью на своем сайте на данную тему, с правильными библиотеками и с видео работы Ардуино+Лазарус. http://kimoncar.ru/lazarus-arduino-uno-ispolzovanie-virtualnogo-com-porta

    Ответить

Оставьте комментарий