Уважаемые читатели! Сразу хочу предупредить, что я ни коим образом не профи, а весьма начинающий. Поэтому профессионалам мои писания будут вряд ли интересны. Я просто хочу поделиться с такими же начинающими своим опытом.
Когда, лет 10 тому назад, сын подарил мне плату Aduino Uno и рассказал о ее возможностях, я покивал с умным видом, поблагодарил и ... отложил плату в дальний ящик. А все потому, что программирование на СИ казалось мне чем-то недоступным.
Расскажу о моем взаимодействии с компьютерами :). Впервые столкнулся с ними в 1976 году, когда учился в аспирантуре ВНИИСтроМ, где и работал. Занимался я динамикой двухфазных потоков в печах кипящего слоя. Построил установку, наснимал результаты и сел их обсчитывать. Подходит ко мне мой руководитель и начальник и говорит: "А может все это общитать на ЭВМ - это будет в плюс работе.". И я пошел к компьютерщикам. ЭВМ занимала зал квадратов на 100, пообщался с ребятами и понял, что с моими знаниями высшей математики (тройка со второго захода) мне туда лучше не ходить :).
Вторая встреча произошла в 1986 году, когда мы с сыном купили на Ленинском проспекте БК-0010. Подключил я его к телевизору и начали мы рубиться в тетрис и бомбер. И в это время я купил брошюрку "БЕЙСИК - это просто". По дороге домой я успел ее просмотреть и решил попробовать, тем более, что БЕЙСИК был зашит в ПЗУ. Волшебные операторы CLS, CIRCLE () - и на экране окружность. Просто чудо! И было в БЕЙСИКе все так логично, так просто, что я просто заболел им. А 1990 у нас в школе установили класс Yamahа. 9 - с монохромными дисплеями и один, командирский, с цветным. И в ПЗУ - тоже БЕЙСИК ! И начал я писать тесты по химии и биологии. Даже пару виртуальных лабороторок изобразил.
Через три года появится класс IBM 286, все машины были с цветными дисплеями, сервер (!) имел жесткий диск емкостью аж 10 МБ :). И ведь все работало - и Ворд и Волков-командер и игрушки с 5-ти дюймовых дискет. И БЕЙСИК стал уже Q. На нем я и остановился, хотя позже и делал несколько программ с ребятами на Visual, но не больше. А тут СИ !. Но во время ковида я взялся таки за Ардуино.
Кроме подарка сына прикупил еще, в запас :)). Вот моя коллекция:
В Uno есть все, туда можно подключить USB для связи с компьютером, есть загрузчик прошивок и внешнее питание 12В. Могу похвастать тем, что Uno, подаренное мне сыном настоящее, а не китайская реплика.
Увидели "Made in Italy" и изображение Апеннинского полуострова (который почему-то слился с Сицилией)? Ведь Arduino разработали и начали изготавливать в Италии в городке Ивреа. И назвали проект в честь итальянского короля.
Всем Uno хорош, но мне больше нравится Nano. Функционал практически такой же, а размеры гораздо меньше. Для экспериментов здорово к Nano прикупить адаптер с винтовыми разъемами - очень удобный.
Еще меньше по размерам Mini, но у неё нет USB, поэтому нужно поиметь переходник USB to TTL.
Для написания, отладки и компиляции программ существует отличная среда под названием Arduino IDE. Она бесплатная и ее можно скачать здесь. Я пользуюсь версией для Win7, но там есть и для Win10, есть и для Linux. Есть в сети версии и на русском языке, и я такой пользуюсь.
С меню, думаю вопросов не будет. Если вы нажмете кнопку "новый", то у вас появится заготовка для программы с двумя блоками:
void setup() {......} - в этом блоке, который выполняется только один раз при запуске программы перечисляются переменные.
void loop() {.....} - а это бесконечный цикл, выполнение которого и дает нужный результат.
"Тела" блоков заключены в фигурные скобки - это уже от СИ, и если вы не поставите одну из скобок, то это будет ошибкой.
Внизу - черное окно - там появляются результаты проверки текста программы, ошибки или результаты компиляции.
Одна из самых полезных фишек (лично для меня) находится в пункте "Файл". Это "Примеры" - там находятся проверенные примеры программ, которые вы можете менять "под себя", скомпилировать и загрузить в процессор.
Другая фишка - большое количество библиотек - проще говоря, подпрограмм, которые написали добрые умные люди, а мы их можем использовать. При этом в своей программе нужно просто сделать ссылку на нужную библиотеку, и она автоматически встроится в программу. Библиотеки предназначены для взаимодействия процессора с внешними устройствами, например, с LCD-дисплеем, шаговым двигателем или с синтезатором si5351.
А теперь у меня вместе с Arduino IDE есть и SimulIDE, а значит можно попробовать работать с Ардуино, пока дядюшка Ху пришлет свою плату :) Две эти программы взаимно дополняющие друг друга: в Ардуино пишем программу, отлаживаем ее, компилируем в .hex файл и можем загрузить этот файл в виртуальный процессор.
В дальнейшем я буду описывать свои эксперименты с Ардуино Нано. У этих плат есть две разновидности: v.2 и v.3. Они отличаются применяемыми процессорами. Первая версия (v.2) менее мощная, у нее на борту процессор mega 168: Flash-память – 16 кб, ПППЗУ – 512кб и ОЗУ – 1 кб. Такие платы уже выходят из употребления и дядюшка Ху продает в среднем за 200 руб. v.3 у которой на борту процессор mega 328: Flash-память – 32 кб, ПППЗУ – 1024 кб и ОЗУ – 2 кб. Внешний вид плат практически один в один и тактовая частота у обеих 16 МГц. Думаю, V.2 вполне хватит для простых приложений с программой небольшого объема.
В Arduino IDE перед началом работы нужно установить тип используемой платы.
Как видите, в Nano нет отличий по версиям, т.е. программы будут работать на обоих.
В симуляторе тоже нужно выбрать тип платы при рисовании схемы.
Теперь немного о распиновке Nano:
Аналоговые (8 шт) и цифровые (14 шт) выводы могут быть как входами, так и выходами - это устанавливается программно. 6 цифровых выводов (D3,5,6,9,10,11) могут быть источниками ШИМ-сигнала. Вывод D13 связан с одним из светодиодов. Особенным является и вывод D5, а выводы D2 и D3 являются входами прерываний, но об этом позже.
Если вы установили обе программы, то переходим в симулятор и вытаскиваем в поле схем плату Нано.
Как только вы это сделаете, внизу появляются данные платы: процессор mega328, тактовая частота 16 МГц. Изображение, конечно, стилизованное, есть только один светодиод (черный квадратик около вывода 13). Вот этот светодиод мы и попробуем включать и выключать.
Для этого загрузим из папки Arduino на диске С, куда установилась Arduino IDE, пример с названием blink, для чего нажимаем кнопку "загрузить" над полем программы.
В окне программы появляется текст, а в темном окне под ним написано, что успешно загружен компилятор. Если вы нажмете кнопку "Настройки (шестеренка)" и выберите "Настройки компилятора", то увидите адрес папки Ардуино на вашем компьютере.
Давим на кнопку с галочкой "Компилировать" , чтобы перевести текст программы в машинные коды, понятные процессору. Если в се пошло удачно...
Появляется информация о пространстве памяти, занятом программой. Теперь давим на кнопку с микросхемой "Загрузить", и скомпилированная программа загружается в наш виртуальный процессор. При этом под полем схемы появляется информация .....
о том, что программа загружена удачно. Нажимаем кнопку "Запустить симуляцию" и светодиод начинает мигать с частотой 1 Гц.
А теперь поиграем с этой простейшей программой. Убираем комментарии, оставляя только суть. И внесем первые изменения. Я ранее сказал, что светодиод на плате соединен с цифровым выводом 13. Поэтому в тексте программы можно LED_BUILTIN заменить цифрой 13.
Компилируем и загружаем. Включаем симуляцию - все работает. как и раньше. А теперь добавим еще один внешний светодиод, привязав его к пину 7. Для этого добавим дополнительные строчки. Не обязательно их набирать - проще скопировать имеющуюся и вставив в новую строку, заменив только самую малость.
Собираем схему и загружаем скомпилированную программу. Вот результат.
Установив индикаторы, получаем интересную информацию: добрый человек, создавший симулятор, уже подсоединил к выводу Vin питание +12В, а на выходе +5В присутствует это напряжение. Но есть и недостаток: если к выводу GND подсоединить значок заземления, убрав линию, соединяющую GND и катод диода, и подсоединить к катоду диода также значок заземления, то схема работать не будет. И еще, вы можете менять цвет светодиода, зайдя в его свойства.
Обозначать в программе пины цифрами считается не корректным, так как в цифрах легко запутаться. Поэтому присвоим пину 7 имя Led_my (понимаются только латинские буквы, но слова можно брать русские). Тогда программа примет такой вид.
А теперь сделаем бегущие огни из трех светодиодов. Вот какая будет программа.
А вот схема.
На сегодня все.
Всем здоровья и успехов!