Мы уже изучили основные вопросы по работе с аналоговыми входами/выходами. В этом уроке мы подключим нашу светодиодную цепь к одному из цифровых выводов 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 перезапускается.