Hello World на Arduino (Первая программа)

Программа на 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);
}