# Проект 3: Светодиодный бегущий огонь ![IMG_256](../media/7c5cf6a91a6d14157d6882feccbcc56a.GIF) #### Описание Бегущий светодиодный огонь мигает непрерывно, как текущая вода. Это распространённый декоративный свет, который широко используется в различных случаях, таких как праздничные мероприятия, витрины торговых центров, сценические выступления и т.д. В этом проекте будет использована плата разработки Arduino и 5 светодиодов для создания простого бегущего светодиодного огня. Управляя последовательностью включения и выключения светодиодов, можно создать визуальный эффект, похожий на текущую воду. #### Аппаратная часть 1\. Плата разработки UNO R3 (ch340) x1 2\. Светодиод x5 3\. Резистор 220 Ом x5 4\. Макетная плата x1 5\. Соединительные провода #### Принцип работы Принцип работы бегущего светодиодного огня заключается в управлении последовательностью включения и выключения светодиодов с помощью платы разработки Arduino, что создаёт визуальный эффект, похожий на текущую воду. Плата Arduino подключена к анодам светодиодов через цифровые выходные пины, а катоды светодиодов подключены к GND (земле) платы через резисторы. С помощью написания кода для Arduino мы можем управлять уровнями высокого и низкого сигнала на цифровых выходах для включения и выключения светодиодов. ![IMG_256](../media/31408f03f1f308f7945ea4c07e3cd76e.GIF) #### Схема подключения 1. Подключите аноды 5 светодиодов к цифровым пинам D2, D3, D4, D5, D6 на плате Arduino соответственно. 2. Подключите катоды каждого из пяти светодиодов к одному концу каждого из пяти резисторов 220 Ом. 3. Подключите другой конец каждого из пяти резисторов 220 Ом к GND (земле) платы разработки. ![Img](../media/img-20260330190947.png) #### Пример кода ```cpp /* Electronics Learning Starter Kit for Arduino Project 3 LED Flowing Light Edit By Keyes */ int ledPins[] = {2, 3, 4, 5, 6, }; // Define the pin of the LED int ledCount = 5; // Number of LEDs int delayTime = 100; // Delay time in ms void setup() { for (int i = 0; i < ledCount; i++) { pinMode(ledPins[i], OUTPUT); // Set the LED pin to output mode } } void loop() { for (int i = 0; i < ledCount; i++) { digitalWrite(ledPins[i], HIGH); // Light up the current LED delay(delayTime); // Delay digitalWrite(ledPins[i], LOW); // Light off the current LED } for (int i = ledCount - 2; i > 0; i--) { digitalWrite(ledPins[i], HIGH); // Light up the current LED delay(delayTime); // Delay digitalWrite(ledPins[i], LOW); // Light off the current LED } } ``` #### Объяснение кода Определение переменных ```cpp int ledPins[] = {2, 3, 4, 5, 6}; // Define the pins for the LEDs int ledCount = 5; // Number of LEDs int delayTime = 100; // Delay time in milliseconds ``` `ledPins[]`: Это массив целых чисел, который хранит номера цифровых пинов, к которым подключены светодиоды. В этом примере светодиоды подключены к цифровым пинам 2, 3, 4, 5 и 6 на плате Arduino. `ledCount`: Эта переменная хранит общее количество светодиодов, что удобно использовать в циклах for. `delayTime`: Управляет временем задержки между включением и выключением каждого светодиода в миллисекундах. Функция настройки `setup()` ```cpp void setup() { for (int i = 0; i < ledCount; i++) { pinMode(ledPins[i], OUTPUT); // Set the LED pins as output mode } } ``` Функция `setup()` — это стандартная функция инициализации в программах Arduino, которая вызывается автоматически один раз в начале программы. `pinMode(ledPins[i], OUTPUT)`: Эта строка кода настраивает каждый пин светодиода в режим выхода. `OUTPUT` — это константа в языке Arduino, используемая для указания пина как выходного. Основной цикл `loop()` ```cpp void loop() { for (int i = 0; i < ledCount; i++) { digitalWrite(ledPins[i], HIGH); // Turn on the current LED delay(delayTime); // Delay digitalWrite(ledPins[i], LOW); // Turn off the current LED } for (int i = ledCount - 2; i > 0; i--) { digitalWrite(ledPins[i], HIGH); // Turn on the current LED delay(delayTime); // Delay digitalWrite(ledPins[i], LOW); // Turn off the current LED } } ``` Функция `loop()` — это основной цикл программы Arduino, который выполняется повторно после функции `setup()`. Первый цикл for отвечает за последовательное включение каждого светодиода, удерживая каждый включённым в течение времени, заданного `delayTime`, а затем выключая его. Второй цикл for выключает светодиоды в обратном порядке, начиная со второго с конца светодиода и заканчивая вторым светодиодом. `digitalWrite(pin, value)`: Используется для управления уровнем сигнала на указанном пине. `HIGH` означает высокий уровень, включающий светодиод; `LOW` означает низкий уровень, выключающий светодиод. #### Результат проекта После загрузки примерного кода на плату разработки, ![P3](../media/P3.gif) светодиоды будут последовательно загораться и гаснуть слева направо, а затем справа налево, создавая эффект бегущей воды.