← Вернуться к оглавлению

Урок 12. Мигаем светодиодом Ардуино

Мы уже изучили основные вопросы по работе с аналоговыми входами/выходами. В этом уроке мы подключим нашу светодиодную цепь к одному из цифровых выводов Arduino, включим и выключим светодиод с помощью кода. Мы закрепим знания полезных функций, встроенных в язык Arduino. Нам важно на данном этапе запомнить когда и как использовать три основные функции.

pinMode(pinNumber, mode)

pinMode() (см. в справочнике) используется в setup() скетча, чтобы инициализировать каждый вывод, который мы используем в качестве входа или выхода.

Мы не можем считывать или отправлять на контакт что-либо до того, как будет определена функция pinMode().

Функция pinMode() принимает два аргумента - номер пина (как мы уже проходили в уроках ранее - каждый из выводов Arduino помечен номером) и тот режим, в котором нам нужен этот вывод - это INPUT или OUTPUT. В случае мигания светодиода мы отправляем данные из Arduino, чтобы контролировать состояние светодиода, поэтому мы используем OUTPUT в качестве второго аргумента.

digitalWrite(pinNumber, state)

digitalWrite() - это команда, которая позволяет нам устанавливать напряжение на выводе либо на 5 В, либо на землю (помните, что «земля» является синонимом 0 Вольт). Ранее мы подключали светодиод к источнику питания 5 В и увидели, что он включается.

Если вместо этого мы подключаем светодиод к одному из цифровых выводов Arduino, мы можем включить светодиод, установив вывод на 5 В, и выключить его, установив вывод на земле.

digitalWrite() также принимает два аргумента - номер контакта и состояние контакта (HIGH для 5 В и LOW для заземления).

delay(timeInMs)

delay() приостанавливает программу на заданный промежуток времени. Например, delay(2000) приостановит программу на 2000 миллисекунд (2000 миллисекунд = 2 секунды), delay(100) приостановит программу на 100 миллисекунд (1/10 секунды) и так далее.

Перед написанием финальной программы мы делаем соединения используя макетную плату.

Пишем код мигающего светодиода, который мы запустим на нашем Arduino.

// Мигание светодиода

int ledPin = 7; // Пин Arduino, который подключен к светодиоду

void setup() {                
  pinMode(ledPin, OUTPUT); // инициализируем вывод как выход
}

void loop() {
  digitalWrite(ledPin, HIGH); // ВКЛ светодиод
  delay(1000); // ждать 1000 миллисекунд (1 секунда)
  digitalWrite(ledPin, LOW); // ВЫКЛ светодиода
  delay(1000); // ждять 1 секунду
}

Строки, начинающиеся с // являются комментариями - наши платы Arduino их игнорирует. Хорошие программисты очень часто оставляют комментарии в программе.

Также вы уже заметили все точки с запятой. Точки с запятой используются в конце каждой команды на большинстве языков программирования, в том числе и в Arduino. Если вы забудете точку с запятой, то вы увидите ошибку. Со временем, изучая другие области разработки, вы обнаружите, что многие другие языки программирования используют точки с запятой в конце каждой строки.

В этом коде ledPin является переменной. Переменные используются для хранения информации в программах, в этом скетче используем переменную ledPin для хранения числа 7. Позже в программе когда Arduino дойдет до строки с переменной ledPin, плата оценит переменную в соответствии с её текущим сохраненным значением. Итак, строка:

pinMode(ledPin, OUTPUT);

вычисляется Arduino как:

pinMode(7, OUTPUT);

Фактически, мы могли бы заменить все виды использования pinMode числом 7, и программа работала бы точно так же, но использование переменной помогает нам легче читать и понимать код.

int в первой строке - это обозначение типа данных. В языке Arduino, который создан на основе C++, вы всегда должны инициализировать переменные, объявив их тип.  Существует много разных типов, но пока на данном этапе нам нет необходимости их изучать. Сейчас все, что вам нужно знать - это то, что переменные типа int являются положительными или отрицательными целыми числами и вы будете часто это использовать.

Как и ожидалось, светодиод включается на одну секунду, затем выключается на одну секунду. Попробуйте изменять delay(), чтобы увидеть, как это влияет на время мигания светодиода.

Еще одна вещь, на которую стоит обратить внимание - ошибка, которую часто совершают многие. Ошибка заключается в том, что многие пропускают последний delay() в цикле loop(). Попробуйте воспроизвести эту ошибку - вы обнаружите, что светодиод остается включенным, не мигая. Это может сбить вас с толку, потому что у нас все еще есть команда digitalWrite(ledPin, LOW) в программе.

Здесь происходит отключение светодиода, но Arduino сразу же попадает в конец цикла loop() и снова начинает выполнение первой строки цикла (включение светодиода). Это происходит так быстро, что человеческий глаз не видит, как светодиод выключается на этот короткий момент, пока wbrk перезапускается.

Ардуино+