2.2 Тема 2
В листинге 1 представлена программа работы встроенного светодиода с подтягивающим и стягивающими резисторами для Tinker CAD.
Листинг 1 – Программа для работы встроенного светодиода по кнопке |
// C++ code // Задаём номера выводов: const int buttonPin = 2; const int ledPin = 13;
void setup() { pinMode(ledPin, OUTPUT); // Подключаем встроенный светодиод на плате Arduino pinMode(buttonPin, INPUT); }
void loop() { // Считываем состояние кнопки int buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); // Зажигаем светодиод при нажатии кнопки } else { digitalWrite(ledPin, LOW); // Гасим светодиод при опускании кнопки } } |
В листинге 2 представлена программа для работы встроенного светодиода со стягивающим и подтягивающим резисторами на реальной плате ESP32. На рисунке 2.9 представлена реализация для подтягивающего резистора. На рисунке 2.12 представлена реализация для стягивающего резистора.
Листинг 2 – Программа для работы встроенного светодиода по кнопке на реальном примере с ESP32 WROOM DA |
const int buttonPin = 4; // Перенесли кнопку на D4, чтобы не мешать загрузке, как было с пином 2 на Aruino в TinkerCAD const int ledPin = 2;
void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT_PULLUP); }
void loop() { if (digitalRead(buttonPin) == LOW) { digitalWrite(ledPin, LOW); // Гасим светодиод при опускании кнопки } else { digitalWrite(ledPin, HIGH); // Зажигаем светодиод при нажатии кнопки } } |
Рисунок 2.7 – Подключение кнопки к Arduino по схеме с
подтягивающим резистором
Рисунок 2.8 – Горящая лампочка без (слева) и с (справа) включённой кнопки/ой по схеме с подтягивающим резистором
Рисунок 2.9 – Горящая лампочка без (слева) и с (справа) включённой кнопки/ой по схеме с подтягивающим резистором на ESP32
Рисунок 2.10 – Подключение кнопки к Arduino по схеме со
стягивающим резистором
Рисунок 2.11 – Горящая лампочка без (слева) и с (справа) включённой кнопкой по схеме со стягивающим резистором
Рисунок 2.12 – Горящая лампочка без (слева) и с (справа) включённой кнопкой по схеме со стягивающим резистором на ESP32
2.3 Тема 3
На рисунке 2.13 изображено стандартное последовательное подключение. Последовательное подключение, это подключение ножек разных устройств в один столбик контактов на макетной плате, т.е в один узел.
Рисунок 2.13 – Принципиальная схема подключения светодиода
На рисунке 2.14 представлена схема подключения светодиода в TinkderCAD. На рисунке 2.15 представлена схема подключения на ESP32.
Рисунок 2.14 – Схема подключения светодиода к плате Arduino UNO
Рисунок 2.15 – Подключение светодиода к плате ESP32
В листинге 3 представлена программа для включения/выключения светодиода для Arduino UNO и ESP32 через среду программирования Arduino IDE.
Листинг 3 – Программа для включения/выключения светодиода |
// C++ code const int LED = 8;
void setup() { pinMode(LED, OUTPUT); }
void loop() { digitalWrite(LED, HIGH); delay(500); digitalWrite(LED, LOW); delay(500); } |
Работа программы на основе листинга 3 для esp32 показано на рисунке 2.16.
Рисунок 2.16 – Подключение светодиода к плате ESP32
Ключевые моменты:
– pinMode(LED, OUTPUT);
pinMode – это функция для настройки режимов портов.
У портов есть 3 режима:
– INPUT – настройка порта на прием сигнала/вход
– OUTPUT – настройка порта на выдачу сигнала/выход
– INPUT_PULLUP
Синтаксис: pinMode(<Имя или номер порта>,<Режим настройки>);
Таким образом в нашей программе мы 8-му порту, который мы назвали LED настроили режим на выдачу сигнала: на зажигание или затухание светодиода.
– digitalWrite(LED, HIGH);
digitalWrite – это функция подачи цифрового сигнала
Синтаксис: digitalWrite (<Имя или номер порта>,<Режим подачи>);
У этой функции есть 2 режима настройки:
– HIGH – 1, true, 5 В
– LOW - 0, false, 0 B
Чтобы заставить что-то работать, нужно подать питание. То есть чтобы зажечь светодиод, нам нужно подать на выход, к которому он подключён, сигнал HIGH или 5B. Соответственно, чтобы светодиод перестал гореть, питание нужно снять, т.е. подать сигнал LOW
– Delay (миллисек.) – функция задержки сигнала.
Итак, подключаем светодиод к 8му пину. В функции setup() задаём для светодиода параметр выхода. Поскольку со светодиода мы не можем ничего считать, а можем только вывести, то параметр OUTPUT.
В функции loop() с помощью digitalWrite(LED, HIGH) – подаём сигнал и включаем светодиод. Ждём полсекунды с помощью delay(500). С помощью digitalWrite(LED, LOW) – подаём сигнал и выключаем светодиод. Ждём полсекунды с помощью delay(500).
Плавное изменение яркости светодиода
Ранее мы с помощью цифровых пинов просто включали и выключали светодиод. То есть подавали напряжение 5 В и 0 В. Теперь же подключим светодиод к цифровому пину с поддержкой ШИМ-сигнала, чтобы выдавать напряжение не только 0 и 5, а ещё и промежуточное. В листинге 4 представлена программа для плавного изменения яркости.
Листинг 4 – Программа для плавного изменения якрости светодиода |
// C++ code const int LED = 8;
void setup() { pinMode(LED, OUTPUT); }
void loop() { for (int i=0; i<256; i = i+1) { analogWrite(LED, i); delay(10); } for (int i = 255; i>=0; i = i-1) { analogWrite(LED, i); delay(10); } } |
Функция analogWrite() имеет два аргумента: номер контакта и 8-разрядное значение от 0 до 255, которое устанавливается на этом контакте. Что будет происходить со светодиодом при выполнении программы? Вы будете наблюдать, как свечение светодиода изменяется от тусклого к яркому в одном цикле for, а затем от яркого к тусклому в другом цикле for.
Обязательно обратите внимание на различие двух циклов for. В первом цикле выражение i++ является сокращением кода i = i + 1. Аналогично, запись i -- эквивалентна коду i = i - 1. Первый цикл плавно зажигает светодиод до его максимальной яркости, второй - постепенно гасит его.
ВЫВОДЫ
Собраны схемы в среде моделирования TinkerCAD и аналоговая сборка на ESP32 с использованием кнопоки светодиодов, реализовано управление свечением через цифровые сигналы и ШИМ. С помощью Arduino IDE мониторили работу спрограммированных скетчей.
