Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
products:aruno:exp2 [2020/05/19 19:35] – alexnik | products:aruno:exp2 [2020/11/05 12:05] (текущий) – [Эксперимент 2. Маячок] alexnik |
---|
===== Эксперимент 2. Маячок ===== | ===== Эксперимент 2. Маячок ===== |
| |
В первом эксперименте мы мигали светодиодом, установленным на плате. Теперь настало время самостоятельно собрать схему и подключить светодиод. Перед этим нужно обязательно прочитать [[theory:breadboard|об устройстве макетной платы]], если это еще не сделано. Сначала нужно установить на макетную плату компоненты, потом провода. | В первом эксперименте мы мигали светодиодом, установленным на плате. Теперь настало время самостоятельно собрать схему и написать первый скетч.\\ |
| Перед началом сборки схемы нужно обязательно ознакомиться [[theory:breadboard|с устройством макетной платы]], если это еще не сделано. \\ |
| В первую очередь устанавливаются на макетную плату компоненты, потом провода. |
| |
==== Подключение светодиода ==== | ==== Подключение светодиода ==== |
| |
==== Схема эксперимента ==== | ==== Схема эксперимента ==== |
{{ :products:esp-iot:exp2.1.png?direct |}} | {{ :products:ardu:exp2.1.png?nolink&400 |}} |
//Рисунок 1. Электрическая принципиальная схема эксперимента// | //Рисунок 1. Электрическая принципиальная схема эксперимента// |
{{ :products:ardu:exp02.png?direct&600 |}} | {{ :products:ardu:exp02.png?direct&600 |}} |
| |
==== Программный код эксперимента ==== | ==== Программный код эксперимента ==== |
<file python Exp2 [enable_line_numbers="2", start_line_numbers_at="1"]> | <file cpp Exp2 [enable_line_numbers="2", start_line_numbers_at="1"]> |
void setup() { | void setup() { |
pinMode(2, OUTPUT); | pinMode(2, OUTPUT); |
</file> | </file> |
| |
Отличие от программы из эксперимента 1 заключается в другом номере вывода микроконтроллера. Конечно, ведь мы подключили светодиод к другому выводу. Номера портов ввода-вывода (GPIO) подписаны справа от разъема. Мы подключили светодиод к контакту с надписью 16, поэтому и в программе мы обращаемся к нему по этому номеру. | Убедитесь, что вы собрали схему как показано на Рисунке 2.\\ |
| Перепишите код программы (либо скопируйте в главное окно Arduino IDE) и нажмите кнопку **Загрузить** на панели быстрого доступа, если код программы введен верно в строке статуса над консолью появится надпись: **Загрузка завершена** и светодиод на макетной плате начнет мигать.\\ |
| |
| Наша программа состоит из двух стандартных функций **//setup()//** , в теле которой расположено одно выражение и функции **//loop()//** с четырьмя выражениями.\\ |
| Каждое выражение — это приказ процессору что — то сделать.\\ |
| Выражения в рамках одного блока заключенного в фигурные скобки **“{“ “}”**, исполняются одно за другим, строго по порядку без всяких пауз и переключений. То есть, если мы говорим об одном конкретном блоке кода, его можно читать сверху вниз, чтобы понять что делается.\\ |
| Как только Arduino включается, перепрошивается или нажимается кнопка RESET, начинает выполнятся функция **//setup()//**. То есть заставляет исполняться выражения в ней.\\ |
| После завершения работы **//setup()//** вызывается функция **//loop()//**, которая выполняется в бесконечном цикле.\\ |
| |
| Теперь давайте попробуем понять почему написанная программа приводит в итоге к миганию светодиода.\\ |
| Как известно, пины могут работать как выходы и как входы. Когда мы хотим чем-то управлять, то есть выдавать сигнал, нам нужно перевести управляющий пин в состояние работы на выход.\\ |
| В нашем примере мы управляем светодиодом на 2-ом пине, поэтому 2-ой пин перед использованием нужно сделать выходом. |
| Это делается выражением в функции setup(): |
| pinMode(2, OUTPUT); |
| <WRAP center round tip 60%> |
| Предназначение функция setup(): настроить плату как нужно, чтобы затем с ней работать. |
| </WRAP> |
| В функции setup() вызывается функция с именем pinMode(), которая устанавливает заданный по номеру пин в определенный режим: вход или выход. О каком пине и о каком режиме идёт речь указывается нами в круглых скобках, через запятую, сразу после имени функции. В нашем случае мы хотим, чтобы 2-ой пин работал как выход. (`OUTPUT` означает выход, `INPUT`— вход.)\\ |
| <WRAP center round tip 60%> |
| Уточняющие значения, расположенный в скобках после имени функции - называются аргументами функции. |
| </WRAP> |
| Перейдём к функции loop(). |
| <WRAP center round tip 60%> |
| Функция loop() называется основным циклом программы и предназначена для выполнения всех заложенных в программу действий. |
| </WRAP> |
| Пройдёмся по выражениям по порядку.\\ |
| Первое выражение — это вызов встроенной функции 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 сек. |
| |
==== Дополнительное задание ==== | ==== Дополнительное задание ==== |