Программа на Arduino всегда состоит минимум из двух частей или двух функций.
void setup() { //Сюда вписывается код, который выполняется один раз при запуске программы } void loop() { //Сюда вписывается код, который повторно запускается при завершении. }
Первая функция выполняется один раз после включения либо перезагрузки контроллера. А вторая функция вызывается сразу после завершения первой и повторно вызывается каждый раз при ее завершении. То есть, содержимое второй функции повторяться до выключения либо перезагрузки.
В принципе, такая программа может быть загружена в контроллер, но она ничего не будет делать, так как никакие инструкции в ней не написаны, кроме этих двух функций.
На примере задачи ‘Мигание светодиодом’ ниже будут рассмотрены команды управления портами ввода/вывода.
Условие задачи: Светодиод подключен к 13-му порту Arduino. Написать программу, заставляющую мигать этим светодиодом.
На платах Arduino уже имеется светодиод, подключенный к 13-му порту. Поэтому можно ничего не подключать и сразу приступить к программированию. Так как порты Arduino могут работать как на ввод сигналов, так и на вывод, необходимо настроить порт на вывод. Это делается с помощью команды pinMode(Port, Direct). Первый параметр Port – это число соответствующее номеру порта, а второй параметр (Direct) – это 1 или 0. Если второй параметр равен нулю, то порт будет работать в режиме чтения сигнала, иначе, в режиме вывода сигналов. Настройку порта для данной задачи нужно проводить только однократно в самом начале. Поэтому, эта команда должна быть помещена в функцию void setup(){} между фигурными скобками. В итоге, первая функция должна выглядеть так:
void setup() { pinMode(13, 1); }//Настройка 13 порта на вывод сигнала
Далее, нужно в 13-й порт подавать напряжение, затем выключать это напряжение. И эти два действия необходимо повторять, то есть подавать и выключать напряжение на 13-м выводе. Так как функция void loop(){} вызывается снова и снова, достаточно эти две команды вписать между ее фигурными скобками. Команда управления напряжением выглядит следующим образом:
digitalWrite(Port, Level), где Port – Номер порта, а Level – Уровень напряжения, которое нужно подать на этот порт. Напряжение на цифровом порте может быть либо 5 Вольт, либо 0. В случае, когда напряжение равно 5 вольтам, говорят, что на этом выводе высокий уровень напряжения, а при отсутствии напряжения – низкий уровень. При параметре Level равный нулю, на порт будет подаваться низкий уровень напряжения, иначе – высокий. Таким образом, подача напряжения на 13-й порт может быть запрограммирована следующей командой:
digitalWrite(13, 1); //Вывод высокого уровня напряжения на 13 порт.
Убрать напряжение можно следующей командой:
digitalWrite(13, 0); //Вывод низкого уровня напряжения на 13 порт.
Вместо единицы и нуля в этих командах, часто применяют константы HIGH и LOW. Таким образом, команда, записанная как digitalWrite(13, 1); аналогична команде digitalWrite(13, HIGH); и digitalWrite(13, 0); так уже аналогична команде digitalWrite(13, LOW);.
В итоге функция void loop() примет вид:
void loop() { digitalWrite(13, HIGH); //Вывод высокого уровня напряжения на 13 порт. digitalWrite(13, LOW); //Вывод низкого уровня напряжения на 13 порт. }
Если теперь запрограммировать это в Arduino, то светодиод будет мигать. Однако он будет мигать настолько быстро, что глазу будет казаться, будто он горит постоянно. Это происходит, потому что команды на микроконтроллере выполняются за незначительные доли секунды и глаз не успевает заметить это. Для замедления мигания светодиода, обычно ставят задержку. Команда задержки записывается так:
delay(MS); //Задержка на указанное количество миллисекунд.
Где MS – целое число, соответствующее времени в миллисекундах, на которое нужно задержать выполнение программы.
Ниже приведена программа мигания светодиодом, подключенного к 13-му выводу Arduino, который зажигается раз в секунду:
void setup() {// Функция, которая запускается после включения или перезагрузки Arduino pinMode(13, 1); //Настройка 13 порта на вывод сигнала }
void loop() {// функция, которая выполняется после void setup() и повторяется снова, после ее завершения. digitalWrite(13, HIGH); //Вывод высокого уровня напряжения на 13 порт. delay(500);//Задержка программы на пол секнды digitalWrite(13, LOW); //Вывод низкого уровня напряжения на 13 порт. delay(500); }