С Новым Годом всех пользователей сайта www.samosdel.ru! После небольшого затишья продолжаю обучение программированию на Ардуино. Друг прислал ссылку на один довольно интересный ресурс по программированию Ардуино в оболочке которая используется при программировании производственных микроконтроллеров типа Fatek и им подобных. Это визуальное программирование и позволяет обойтись совершенно без написания кода! Т.е. берете блоки, соединяете их между собой, выставляете условия и заливаете в Ардуино! Все, скетч написан! Для получения информации рекомендую посетить сайт http://flprog.ru/ и скачать саму программу. На этом же сайте есть и подробные видеоуроки, я посмотрел всего лишь один, о подключении дисплея 1602 и часов точного времени. Что скажу- все великолепно за исключением нескольких НО. Но об этом попозже. Итак, мой первый опыт в написании первого урока- blink. Сразу хочу заметить, что хотя я и посмотрел видеоурок но запомнил не все и кое в чем приходилось доходить уже самому. Но об моих ошибках и изысканиях все изложу по ходу дела.
После установки программы я, естественно, запустил её. Открылся вот такой интерфейс: | |
Жмем меню Файл- Новый (можно также нажать пиктограмму чистого листа под меню Файл), открывается следующее окно где я должен выбрать свою плату: | |
Жмем кнопку с тремя точками и открывается окно с выбором типа контроллера где и выбираю имеющийся у меня Arduino Uno Щелкаем Выбрать и Готово. |
|
Наконец открывается главный интерфейс программы: |
Рабочий стол FLProg |
Понадеявшись на свою память начал перебирать вкладки устройств справа внизу… Попробовал триггеры, счетчики и им же подобные… не то, неожиданно понял что мне нужен простой генератор! Открыл вкладку Таймеры, схватил объект Generator и бросил его в нижнее среднее окно, именно эта область в программе предназначена для комбинирования и соединения блоков. Дважды щелкнул по объекту и открылось следующее окно: | |
Пришлось немного потратить время на исследование данного объекта и вот что я выяснил: для подробного описания объекта достаточно перейти на вкладку Информация. Выбираем тип генератора. Тут представлены 3 типа: Одновибратор- т.е. при поступлении разрешающего импульса на вход на выходе появится импульс в соответствии с настройками ниже- т.е. его можно привязать к входному сигналу (выбрать Внешняя (вход)) или сделать независимую выдержку (Константа), при этом нужно ввести длительность импульса в выбранных ячейках. |
|
Симметричный мультивибратор- означает что прямоугольный сигнал имеет одинаковую длительность импульса как по высокому уровню, так и по низкому. Т.е. имеет правильную прямоугольную форму:где длина верхней сигнальной площадке равна длине нижней сигнальной площадке, иначе говоря длительность высокого и низких уровней сигнала одинакова. | |
Несимметричный мультивибратор- почти такой же как и симметричный, только длина высоких и низких импульсов различная: На данном рисунке предоставлен короткий верхний и длинный низкий уровни, но может быть и наоборот- длинный высокий и короткий низкий. Длительность импульсов задается во втором окне констант, расположенном под первым: | |
После выбора нужного генератора (симметричного или несимметричного) необходимо заполнить поля констант: при симметричном время горения светодиода будет равно времени паузы, при несимметричном- время горения и паузы разное, хотя можете поставить и одинаковое- получите симметричный мультивибратор | |
Я задал вот такие параметры. Т.е. светодиод будет гореть 0,5 сек и пауза между свечением- 1 сек. На этом настройка генератора завершена. Переходим к выбору выходного пина. Т.к. заморачиваться с подключением светодиодов не хотелось то решил обойтись светодиодом на 13 пине. Ну как и в стандартном blink. | |
Для этого переходим в верхнее окно программы, | |
жмем дважды Добавить выход и в диалоговом окне выбираем такие данные. Вы можете задать свои собственные имена и описание. Жмем Готово и переходим собственно к самому «программированию». |
|
Перетаскиваем созданный порт в нижнюю часть интерфейса, | |
затем подводим курсор к левой стороне блока Led_13, появится рыжая полоска сбоку как показано на рисунке, щелкаем на ней и не отпуская кнопки соединяем с выводом Q мультивибратора. Все, мы подключили выход мультивибратора к выходу 13 Arduino UNO! Теперь давайте проверим- все ли правильно мы сделали. Для этого жмем кнопку с зеленой галочкой под меню Настройки. | |
Почему то вылетает вот такое сообщение. | |
|
Давайте разбираться. По идее все сделали правильно: сделали генератор, подключили к выводу светодиод и все должно работать. В радиолюбительстве все так и должно было бы получиться но в данном случае есть одно НО. В данной программе необходимо указать мультивибратору чтобы он начал работу (проще говоря подать питание) о чем и говорит ошибка на плате №1. Для этого подводим курсор к левой части мультивибратора, вывод EN (наверное Enable что означает Доступность), кликаем ПРАВОЙ кнопкой мыши, выбираем Вставить константу и выпрыгивает вот такое окно. |
В нем указываем только один параметр- TRUE и жмем Готово. Проверяем еще раз проект.Наконец вылетает надпись что проект корректен! Сохраняем его. Почему то программа сохраняет проект в формате *FLP, что для тех кто пишет музыку на компьютере программой Frutti Loops несколько «нехорошо», т.к. эти программы используют одни и те же расширения. По крайней мере у меня попытка загрузки файла в FLProg выглядит вот так. Но с этим можно смириться, тем более что я программу FLProg просто удалю после этого урока. Что ж, скетч «написан», осталось залить его в Ардуину. |
|
Подключаем ARDUINO Uno или ту плату которую вы указали при создании проекта. Жмем кнопку Компилировать проект которая находится рядом с кнопкой проверки проекта. Открывается такая же оболочка как и у ARDUINO, только стартовая заставка немного другая. | |
Теперь давайте посмотрим что же скомпилировала нам данная программа? Смотрим листинг: bool _gen1I = 0; } { } Столько наворочала FLProg что разобраться «с лету» практически невозможно! Жмем Вгрузить (почему именно так написано- непонятно), скетч заливается и Arduino начинает бодренько мигать светодиодом по нашему скетчу! Ну а теперь причины почему я все таки откажусь от этой визуально-ориентированной программы для Arduino: |
|
|
|
Вобщем при всех своих достоинствах программа имеет свои плюхи. Поэтому… А будете вы ей пользоваться или нет- решать уже только Вам. |
Спасибо за внимание.
Постараюсь ответить на Ваши вопросы (я автор программы)
1. Как Вы понимаете сравнивать блинк на delay с результатом работы FLProg не корректно, поскольку блинк кроме мигания светодиодом ничего делать не может. Он останавливает выполнение программы на время паузы и горения. Для того что бы делать что то ещё необходимы программные таймеры. Отсюда и глобальные переменные (а где ещё хранить время включения/выключения светодиода).
2. Программа расчитанна для пользователей не знакомых с языком C поэтому не очень важно что она генерит не очень читаемый скетчь. В программе даже есть режим когда прошивка заливается из среды FLProg напрямую в контроллер без открытия Arduino — IDE. Вы же не изучаете HEX файл и не правите в нём битики. Ну и здесь так же.
3.Используя FLProg не обязательно вообще изучать C. И это могут подтвердить пользователи программы. Если Вы зайдёте на форум программы — Вы увидите это. С появлением возможности написания пользовательских блоков на С, те пользователи которые разбираются в языке С могут написать практически любые блоки, для любого оборудования. Ну а те кто не знает языка, используют их. Кстати обратите внимание, что достаточно много пользователей уже знают язык С, но всё равно пользуются FLProg, поскольку удобнее.
4. Смотри пункт 2.
Извините если обидел. Я нисколько не умаляю Ваших трудов, способностей и стремления. Я просто выдал свою точку зрения на данную программу и не призываю всех и каждого переходить чисто на С. Я привел пример моей работы в данной программе и показал что мне понравилось и НЕ понравилось. Принять или не принять данную точку зрения- это дело лично каждого. На п.1 скажу так- можно обойтись и без delay, вообще мой друг очень плотно подсел на МК и на 45 тиньке такие вещи творит- я просто диву даюсь. Оказывается 32 кБ- это столько места что хватит еще 95 винду поставить! Отвечу на Ваш п.2- я согласен с тем что для тех кто не знает языка это просто грааль, но давайте копнем глубже. Если начинать вообще с нуля то придется объяснять что такое блоки (их у вас очень много, хотя так и должно быть, на самом деле задач может быть много и библиотека тоже должна быть соответствующей), как они будут между собой работать и т.д. Согласитесь что на понятие и освоение тоже уйдет достаточное количество времени? Получается что мы тут буквально половыми органами меряемся- у кого лучше. Хотя забываем что параметров куча и объективно оценить… Да есть здоровские плюхи навроде синхронизации времени на DS1307 и т.д. Я согласен с многими Вашими доводами и обиду на мое высказывание что я такой программой пользоваться не буду. Вы же старались, делали её наподобие многих промышленных программ, я скажу прямо- молодец. Это без шуток, потому что сам работал (и в какой то степени до сих пор работаю)программистом и знаю какой это тяжелый труд. Не побоялся угрохать столько сил и времени на разработку и отладку такой программы НО. Как я и писал выше, я хочу знать КАК работает программа. И не искать ошибки в блоках. Как говорится сам написал, сам оптимизировал и т.д. Тот же мой друг сейчас старается вовсю снизить энергопотребление МК и дошел практически до значений саморазряда литиевых батарей! Так что вопрос энергопотребления сейчас первоочередной и только потом уже идет функционал. Не в обиду было сказано и если обидел то прошу прощения но- это мое мнение. Спасибо за внимание, понимание и программу.