Базовые команды и константы Arduino

Первая программа на Arduino

Попробуем теперь написать простую программу, которая включит светодиод, подключенный к 46 пину. Чтобы протестировать программу, вам необходимо присоединить модуль TrafficLight к порту 1 (обратите внимание, что порты нумеруются с нуля). Светодиод является цифровым устройством, то есть для его включения необходимо выдавать высокий уровень, а для его выключения - низкий уровень. Соответственно мы берём из таблиц команды из ячеек цифровых устройств (digital) для записи (write):

void setup(){
  pinMode(46, OUTPUT);
}

void loop(){
  digitalWrite(46, HIGH);
}

Из интересного: записи HIGH и LOW являются директивами компилятора. В процессе компиляции HIGH меняется на 1, а LOW - на 0. Таким образом можно не использовать их, так как записи:

digitalWrite(46, HIGH);
digitalWrite(46, 1);

равнозначны. Однако рекомендуется использовать именно эти обозначения, так как они делают код более читаемым, то есть более удобным для восприятия.

Теперь можно загрузить программу. Если всё сделали правильно, то зелёный светодиод должен загореться.

Попробуем сделать задачу посложнее: помигать светодиодом.

Самой распространённой ошибкой у новичков является алгоритм следующего вида:

digitalWrite(46, HIGH);
digitalWrite(46, LOW);

Ошибка заключается в том, что Arduino выполняет команды очень ОЧЕНЬ быстро, порой за миллионные доли секунд. Поэтому эта программа будет ошибочной. Для выполнения этой задачи нужно искусственно увеличить время между выполнением команд. Для этого используется команда задержки, которая выглядит так:

delay(<время задержки выполнения>);

Время задержки при этом указывается в миллисекундах, где 1 секунда - это 1000 миллисекунд. Например, подождать 1 секунду:

delay(1000);

Arduino при этом должна выполнить примерно следующий алгоритм: Включить светодиод
Подождать 1 секунду
Выключить светодиод
Подождать 1 секунду

Теперь составим полную программу, которая будет мигать светодиодом:

void setup() {
  pinMode(46, OUTPUT);
}

void loop() {
  digitalWrite(46, HIGH);
  delay(1000);
  digitalWrite(46, LOW);
  delay(1000);
}