Для программирования контроллеров (плат) на платформе ардуино используется бесплатное программное обеспечение Arduino IDE. Программирование выполняется на языке, именуемом Wiring. Написанные на Wiring программы преобразуются (с минимальными изменениями) в программу на языке C++ и затем компилируется. Так что, фактически, используется специализированный C++. Все это придумано исключительно с одной целью - упростить процесс программирования, сделать его доступным и понятным любому пользователю.
Начнем с базовых принципов программирования и изучим основные элементы программ. Базовая структура программы довольно проста и состоит из двух поименованных блоков программного кода - функций, содержащих в своем "теле" выражения и команды, которые принято также принято называть операторами или инструкциями.
Функция void setup () {...}- это первая функция, выполняемая программой. Текст программы заключен в фигурные скобки, выполняется только один раз после каждого включения питания или сброса платы. Функция используется для установки режима работы цифровых входов/выходов, инициализации переменных и т.д.
Функция void loop () {...} - ядро всех программ. Она выполняет основную работу и содержит код (по сути самую основную часть программы), который выполняется бесконечно по кругу. Т.е. после завершения функции снова произойдет ее вызов, и снова будут исполняться по порядку все команды, которые указаны в фигурных скобках.
Рассмотрим подробно каждую стоку текста программы в простом примере. Откройте базовую программу в среде Arduino IDE.
Данная программа выполняет мигание светодиодом, подключенным к выводу №13. Контроллеры, созданные на платформе Arduino, оснащены маленьким светодиодом, размещенным прямо на плате и подключенным по умолчанию к пину №13. Поэтому для работы программы не требуется сборка дополнительных схем.
Любой текст, начинающийся с символов //, игнорируется программой. Эти строки являются комментариями т.е. заметками, которые служат для пояснения кода. Если ваши комментарии большие то можно использовать такие символы: /* в начале комментария и */ в конце комментария. Весь текст между этими символами будет игнорирован.
int led = 13; - этой строкой присваивается значение переменной led. int - это тип переменной, один из наиболее часто используемых типов данных для хранения чисел. То есть в коде мы указали, что переменная led - это целое число и присвоили ей значение 13.
pinMode (led, OUTPUT); - эта команда сообщает плате, как настроить цифровой вывод. Цифровые выводы могут использоваться, как ВХОД (INPUT) и как ВЫХОД (OUTPUT). В данном случае нам для управления светодиодом нужен режим "ВЫХОД". Поэтому в скобках указываем номер вывода led (помните, led - это переменная со значением 13) и его режим OUTPUT. Говоря другими словами, столько миллисекунд ма назначили 13 выводу режим работы ВЫХОД.
digitalWrite (led, HIGH); - эта команда может выключить или включить любой вывод, настроенный как ВЫХОД (OUTPUT). Первый аргумент (led) указывает, какой вывод должен быть включен или выключен. Второй аргумент указывает включить вывод (HIGH) или выключить вывод (LOW). При выполнении этой функции с аргументом HIGH на вывод 13 будет подано стандартное рабочее напряжение контроллера (5В), и светодиод загорится.
delay(1000); - эта команда указывает плате ничего ни делать столько миллисекунд, сколько указанно в аргументе в скобках. Программа остановится, а светодиод будет продолжать светиться.
digitalWrite (led, HIGH); - эта команда с аргументом LOW выключает напряжение на выводе led. Следовательно светодиод погаснет.
delay(1000); - снова задержка на 1 секунду.
После того, как программа написана найдите в верхнем левом углу стрелочку - это функция загрузки скетча в плату. Нажмите на стрелочку и подождите пока загрузка будет окончена. После этого плата начнет выполнять программу: определит 13 контакт, как ВЫХОД и будет выполнять действия из функции loop(): подавать напряжение на контакт 13, ждать 1 секунду, выключать напряжение ждать одну секунду и т.д.
Мигание светодиодом на борту платы помогло понять базовые принципы программного кода, однако никакого практического смысла не имеет. Поэтому в следующем уроке уже соберем схему с использованием внешнего более крупного светодиода, который может использоваться для световых сигнализаций.