===== Эксперимент 2. Маячок =====
В первом эксперименте мы мигали светодиодом, установленным на плате. Теперь настало время самостоятельно собрать схему и написать первый скетч.\\
Перед началом сборки схемы нужно обязательно ознакомиться [[theory:breadboard|с устройством макетной платы]], если это еще не сделано. \\
В первую очередь устанавливаются на макетную плату компоненты, потом провода.
==== Подключение светодиода ====
При подключении светодиода необходимо обратить внимание на то, что этот электронный компонент является //полярным//. То есть он имеет полярность, ему не все равно как его подключают. Часто говорят, что у него есть плюс и минус. На самом деле так говорить не совсем правильно. Правильно говорить, что у него есть //анод// и //катод//. Анод подключают к плюсу, а катод к минусу.
Если светодиод подключить неправильной полярностью ничего страшного не произойдет, он не сгорит, но и светиться не будет.
{{ :products:esp-iot:led.png?nolink&600 |}}
Светодиод, в отличие от обычной лампочки, напрямую к источнику тока не подключают. Светодиод обязательно подключают последовательно с резистором. Этот резистор необходим для ограничения тока, протекающего через светодиод. Его называют токоограничительным резистором.
Светодиод нельзя подключать к источнику питания напрямую. Всегда необходимо использовать токоограничительный резистор, иначе светодиод сгорит.
==== Схема эксперимента ====
{{ :products:ardu:exp2.1.png?nolink&400 |}}
//Рисунок 1. Электрическая принципиальная схема эксперимента//
{{ :products:ardu:exp02.png?direct&600 |}}
//Рисунок 2. Монтажная схема эксперимента//
==== Подготовительные мероприятия ====
* Соберите элементы как показано на рисунке 2
* подключите контроллер к компьютеру
* запустите Arduino IDE
==== Программный код эксперимента ====
void setup() {
pinMode(2, OUTPUT);
}
void loop() {
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
Убедитесь, что вы собрали схему как показано на Рисунке 2.\\
Перепишите код программы (либо скопируйте в главное окно Arduino IDE) и нажмите кнопку **Загрузить** на панели быстрого доступа, если код программы введен верно в строке статуса над консолью появится надпись: **Загрузка завершена** и светодиод на макетной плате начнет мигать.\\
Наша программа состоит из двух стандартных функций **//setup()//** , в теле которой расположено одно выражение и функции **//loop()//** с четырьмя выражениями.\\
Каждое выражение — это приказ процессору что — то сделать.\\
Выражения в рамках одного блока заключенного в фигурные скобки **“{“ “}”**, исполняются одно за другим, строго по порядку без всяких пауз и переключений. То есть, если мы говорим об одном конкретном блоке кода, его можно читать сверху вниз, чтобы понять что делается.\\
Как только Arduino включается, перепрошивается или нажимается кнопка RESET, начинает выполнятся функция **//setup()//**. То есть заставляет исполняться выражения в ней.\\
После завершения работы **//setup()//** вызывается функция **//loop()//**, которая выполняется в бесконечном цикле.\\
Теперь давайте попробуем понять почему написанная программа приводит в итоге к миганию светодиода.\\
Как известно, пины могут работать как выходы и как входы. Когда мы хотим чем-то управлять, то есть выдавать сигнал, нам нужно перевести управляющий пин в состояние работы на выход.\\
В нашем примере мы управляем светодиодом на 2-ом пине, поэтому 2-ой пин перед использованием нужно сделать выходом.
Это делается выражением в функции setup():
pinMode(2, OUTPUT);
Предназначение функция setup(): настроить плату как нужно, чтобы затем с ней работать.
В функции setup() вызывается функция с именем pinMode(), которая устанавливает заданный по номеру пин в определенный режим: вход или выход. О каком пине и о каком режиме идёт речь указывается нами в круглых скобках, через запятую, сразу после имени функции. В нашем случае мы хотим, чтобы 2-ой пин работал как выход. (`OUTPUT` означает выход, `INPUT`— вход.)\\
Уточняющие значения, расположенный в скобках после имени функции - называются аргументами функции.
Перейдём к функции loop().
Функция loop() называется основным циклом программы и предназначена для выполнения всех заложенных в программу действий.
Пройдёмся по выражениям по порядку.\\
Первое выражение — это вызов встроенной функции digitalWrite().\\ Она предназначена для подачи на заданный пин логической единицы (HIGH, 5 вольт) или логического нуля (LOW, 0 вольт). В функцию digitalWrite() передаётся 2 аргумента: номер пина и логическое значение.\\ В итоге, первым делом мы зажигаем светодиод на 2-ом пине, подавая на него 5 вольт.\\
Второе выражение вызов функции delay().\\ Функция delay() — это, встроенная функция, которая заставляет процессор уснуть на определённое время. Она принимает всего один аргумент: время в миллисекундах, которое следует спать.\\ В нашем случае это 1000 мс.\\
Как только 1000 мс истекают, процессор просыпается и переходит к следующему выражению. В нашем примере это снова вызов знакомой нам встроенной функции digitalWrite(). Правда на этот раз вторым аргументом мы передаём значение `LOW`. То есть устанавливаем на 2-ом пине логический ноль, подаётся 0 вольт и светодиод гаснет.\\
Четвертое выражение снова вызов функции delay() c аргументом 1000 мс.\\
По истечении установленного времени выполнение снова передаётся к первому выражению функции loop().\\
Если коротко описать работу программы, то получится следующий алгоритм:\\
1. Поджигаем светодиод\\
2. Спим 1000 миллисекунд\\
3. Гасим светодиод\\
4. Спим 1000 миллисекунд\\
5. Переходим к пункту 1\\
Таким образом мы получили проект с маячком, мигающим каждые 1000 мс + 1000 мс = 2000 мс = 2 сек.
==== Дополнительное задание ====
Попробуй подключить светодиод к другим контактам и поменяй номер в программе