Blink — классический первый скетч. Два светодиода горят по очереди: красный модуль светодиода на пине D2 и маленький светодиод L на пине D13, встроенный прямо в плату Uno. Пока один горит, другой погашен, а каждые полсекунды они меняются. Вы узнаете, как устроен скетч, как Uno переключает свои пины и как подключить модуль и загрузить код. Это проект для начинающих, на него уйдёт около 15 минут.
Что понадобится
Arduino Uno R3Есть в симуляторе× 1Цену смотрите в магазине
Модуль светодиода 5 мм, красныйЕсть в симуляторе× 1Цену смотрите в магазине
Кабель USB A–B для Arduino Uno× 1Цену смотрите в магазине
Для симулятора больше ничего не нужно. На столе симулятора Uno получает питание от USB-порта ноутбука — так же, как настоящая плата Uno, подключённая к компьютеру. Для реальной сборки понадобится ещё компьютер с Arduino IDE — это бесплатная программа с сайта arduino.cc. Посмотрите также стартовый набор в Маркете.
Как это работает
Каждый цифровой пин Uno работает как выключатель, которым управляет ваш скетч. Когда скетч переводит пин в HIGH, пин выдаёт 5 В. Когда скетч переводит пин в LOW, пин выдаёт 0 В — то же самое, что на GND.
Модуль светодиода — это маленькая плата с красным светодиодом и резистором 220 Ом. Когда на D2 HIGH, ток идёт от D2 через резистор и светодиод, выходит через пин «-» модуля и возвращается на GND платы Uno. Такой замкнутый путь и есть электрическая цепь. Без провода к GND пути нет, и светодиод не горит.
Резистор ограничивает ток. На красном светодиоде падает около 2 В, значит, на резисторе остаётся около 3 В. Если разделить 3 В на 220 Ом, получится примерно 14 мА. Это намного меньше 20 мА, которые пин Uno может безопасно отдавать.
Светодиод L уже стоит на плате Uno и подключён к D13, поэтому никакие провода ему не нужны.
Вот что делают два пина в течение одной секунды:
| Время | D2: модуль светодиода | D13: светодиод L |
|---|---|---|
| 0–500 мс | HIGH: горит | LOW: не горит |
| 500–1000 мс | LOW: не горит | HIGH: горит |
| После 1000 мс | всё повторяется | всё повторяется |
Так продолжается, пока у Uno есть питание.
Сборка
1. Соберите проект в симуляторе
Корпус этому проекту не нужен: Uno и модуль светодиода стоят рядом на столе, а Uno работает от USB ноутбука.
В реальной сборке: положите плату Uno на стол так, чтобы под ней не было ничего металлического. Металл может замкнуть между собой контакты на нижней стороне платы.
2. Подключите модуль светодиода
| Откуда | Куда | Зачем |
|---|---|---|
| Uno GND | Модуль светодиода GND | Земля |
| Uno D2 | Модуль светодиода S | HIGH зажигает светодиод |
Хватит двух проводов: от S к D2 и от «-» к GND. У Uno несколько пинов GND. Внутри платы они все соединены, поэтому подойдёт любой.
В реальной сборке: у большинства таких модулей штырьки, а у Uno — гнёзда. Поэтому нужны провода-перемычки «папа-мама»: со штырьком на одном конце и гнездом на другом. Подключайте провода до того, как вставите USB-кабель. Если переставлять провода на плате под питанием, можно устроить короткое замыкание.
3. Проверьте скетч
Откройте «Код». Он работает как Arduino IDE. Вставьте скетч Blink с этой страницы (кнопка «Копировать» над кодом скопирует его) и нажмите «Проверить». Скетч скомпилируется: текст на C++ превратится в машинный код для ATmega328P — микросхемы на плате Uno. Симулятор использует те же инструменты компиляции, что и настоящая Arduino IDE. Если в коде есть ошибка, появится сообщение с номером строки, где она находится.
В реальной сборке: запустите Arduino IDE, создайте новый скетч и вставьте в него код с этой страницы. Кнопка «Копировать» над кодом скопирует его за вас. Выберите плату «Arduino Uno» и нажмите «Проверить».
4. Загрузите и понаблюдайте
Нажмите «Загрузить». Скетч попадёт в Uno и сразу запустится. Теперь модуль светодиода и светодиод L загораются по очереди каждые полсекунды.
В реальной сборке: подключите Uno к компьютеру USB-кабелем. У Uno R3 квадратное гнездо USB-B — такое же, как у принтеров. В IDE выберите порт, на котором появилась плата, и нажмите «Загрузить». Пока скетч передаётся, маленькие светодиоды TX и RX на плате мерцают, а затем начинается мигание. Скетч остаётся в памяти Uno даже без питания. Когда Uno снова получит питание, скетч сам запустится заново.
5. Измените скетч
Замените обе строки delay(500) на delay(100) и снова загрузите скетч. Теперь светодиоды меняются в пять раз быстрее. Затем переставьте провод S с D2 на D3 и измените LED_MODULE с 2 на 3. Провод и число в скетче всегда должны совпадать. Если они не совпадают, светодиод не горит.
Код
// Blink: the LED module on D2 and the Uno's own "L" LED on D13 take turns.
// Wiring: LED module S -> D2, LED module - (GND) -> GND.
const byte LED_MODULE = 2; // the module's S pin
const byte LED_BOARD = 13; // the L LED soldered on the Uno
void setup() {
pinMode(LED_MODULE, OUTPUT); // pins start as inputs: make these two outputs
pinMode(LED_BOARD, OUTPUT);
}
void loop() {
digitalWrite(LED_MODULE, HIGH); // 5 V on D2: the module's LED lights
digitalWrite(LED_BOARD, LOW); // 0 V on D13: the L LED goes dark
delay(500); // wait half a second
digitalWrite(LED_MODULE, LOW);
digitalWrite(LED_BOARD, HIGH);
delay(500);
}Имена для пинов
const byte LED_MODULE = 2; // the module's S pin
const byte LED_BOARD = 13; // the L LED soldered on the UnoЭти две строки дают имена номерам пинов. const означает, что значение не меняется, пока работает скетч. byte — это целое число от 0 до 255, для номера пина этого достаточно. Остальная часть скетча использует имена. Поэтому, если вы переставите провод, нужно будет поменять одно число здесь — и больше ничего.
setup(): выполняется один раз
setup() выполняется один раз, когда Uno запускается. Сначала все пины — входы, которые умеют только «слушать». pinMode(LED_MODULE, OUTPUT) превращает D2 в выход, который может выдавать 5 В или 0 В. Следующая строка делает то же самое для D13.
loop(): выполняется бесконечно
После setup() Uno выполняет loop() снова и снова, пока есть питание. Вот первая половина этой функции:
digitalWrite(LED_MODULE, HIGH); // 5 V on D2: the module's LED lights
digitalWrite(LED_BOARD, LOW); // 0 V on D13: the L LED goes dark
delay(500); // wait half a seconddigitalWrite() переводит пин в HIGH (5 В) или в LOW (0 В). delay(500) заставляет Uno ждать 500 миллисекунд. Миллисекунда — это одна тысячная секунды. Вторая половина loop() делает наоборот: D2 в LOW, D13 в HIGH и ещё 500 мс ожидания. Затем loop() снова начинается с самого начала.
Цена delay()
Пока delay() ждёт, Uno больше ничего не делает. Для Blink это нормально. Но робот должен одновременно ехать, измерять и принимать решения, и останавливаться, чтобы подождать, он не может. Как мигать без delay(), показано в уроке про millis() и состояния.
Если что-то не работает
- В симуляторе ничего не мигает. Нажмите «Загрузить», а не только «Проверить». Кнопка «Проверить» только компилирует скетч. Кнопка «Загрузить» отправляет его на плату.
- При проверке появляется ошибка. Посмотрите на номер строки в сообщении. Частая причина — пропущенная
;или перепутанные заглавные и строчные буквы:digitalwrite— не то же самое, чтоdigitalWrite. Чтобы начать заново, скопируйте исходный скетч кнопкой «Копировать». - Светодиод L мигает, а модуль не горит. Проверьте, что S подключён к D2, а пин «-» — к GND. Если эти два провода перепутаны, ток не может пройти через светодиод в таком направлении, и он не загорается. Проверьте также, что
LED_MODULEсовпадает с пином, который вы использовали. - Светодиод модуля светится очень слабо. Пин всё ещё работает как вход. Проверьте, что в
setup()естьpinMode(LED_MODULE, OUTPUT). - IDE не показывает порт Uno (в реальной сборке). Отключите кабель, подключите его снова и посмотрите, какой порт появился. Попробуйте другой USB-кабель: некоторые кабели передают только питание. В части копий Uno стоит USB-микросхема CH340, и некоторым компьютерам для неё нужен драйвер.
- Загрузка не проходит с сообщением «programmer is not responding» (в реальной сборке). Это значит «программатор не отвечает». Проверьте, что выбрана плата Arduino Uno и правильный порт. Отсоедините все провода от D0 и D1: через эти пины идут данные USB.
Что дальше
Теперь вы умеете переключать пин из скетча. Точно так же робот управляет своими огнями и драйвером моторов.
- Познакомьтесь с платой поближе в уроке про Arduino Uno и её первую программу.
- Как мигать двумя светодиодами с разной скоростью и без
delay(), вы узнаете в уроке про millis() и состояния. - Приведите что-нибудь в движение: в проекте «Первый заезд» вы соберёте робот-машину, и она проедет по квадрату.
Сделайте лучше
- Сделайте короткую вспышку: модуль светодиода горит 100 мс, а потом 900 мс не горит.
- Пусть оба светодиода мигают одновременно, а не по очереди.
- Передайте SOS азбукой Морзе: три короткие вспышки, три длинные и снова три короткие.
