Вступление
В этом эксперименте мы начнем постигать основы анимации светодиодов, реализовав эффект преследования.
Мы поупражняемся в применении циклов для достижения различных эффектов свечения линейки из светодиодов.
Предупреждение! Светодиоды могут давать очень яркое свечение. Берегите свое зрение, особенно если вы работаете в плохо освещенном помещении!
Необходимые компоненты
Нам понадобится 5 LED. С меньшим числом светодиодов эффект будет не столь интересным
- 5 LED
- 5 резисторов не менее 220R
Я рекомендую резисторы 2-3K, чтобы светодиоды не слепили глаза, особенно когда они зажигаются одновременно.
- 6 перемычек
Схема сборки
Соберем вот такую базовую схему:
Будьте внимательны! Каждый светодиод притягивается к земле одинаковым сопротивлением. Перед включением ардуино, убедитесь, что подключили все правильно и подключили землю. В случае ошибки, есть большая вероятность, что светодиоды выйдут из строя.
Скетч
/**
* (C) jarduino.ru 2019
* Изучение ардуино через опыты.
*
* Опыт №5. Управление светодиодами. Эффект преследования
*/
// Глобальные параметры:
const int nDelay = 60; // задержка между загоранием светодиодов в мсек.
/*
* В этом примере предполагается, что светодиоды подключены к цифровым портам по порядку.
* Т.е., например, 1й светодиод - к порту №2, 2й - к порту №3 и т.д.
*
* Таким образом, нам достаточно задать только 2 параметра:
* - номер порта первого светодиода
* - номер порта последнего светодиода.*/
const int pin1 = 5; // номер первого пина
const int pin2 = 10; // Число светодиодов
// Прочие глобальные переменные и константы:
const int pin3 = pin2 + 1; // номер последнего пина + 1
void setup()
{
for (int i = pin1; i < pin3; ++i)
{
pinMode(i, OUTPUT);
}
}
// выставляет светодиодам статус bState через каждые nDelay мсек.
void chaseLed(bool bState, const int t_nDelay = nDelay)
{
for (int i = pin1; i < pin3; i++)
{
digitalWrite(i, bState);
delay(t_nDelay);
}
}
void loop()
{
// зажечь светодиоды по одному:
chaseLed(HIGH);
// погасить светодиоды по одному:
chaseLed(LOW);
}
Обратите внимание на параметры в начале скетча. Вы можете указать задержку между загоранием следующего светодиода, а также подогнать скетч под свою сборку, указав номер порта первого светодиода и кол-во светодиодов.
Результат
Объяснения
В этим эксперименте мы используем цикл for, чтобы зажигать и гасить светодиоды по порядку.
Все происходит в функции chaseLed. У нее 2 параметра: состояние (HIGH – зажечь, LOW – погасить) и задержка между загоранием светодиодов. Такие параметры позволяют нам использовать одну и ту же функцию как для включения, так и для выключения светодиода.
Заключение
С помощью этого скетча возможно управлять 12 светодиодами. Напомню, что цифровых портов у ардуино Nano и Uno всего 14. Но первые два (0 и 1) у нас чаще заняты прошивкой платы. Конечно, можно использовать и их, но это не очень удобно, поскольку потребуется переключать перемычки для прошивки платы. А с портами с 2 по 13 никаких проблем.
Напомню, что аналоговые порты тоже можно использовать как цифровые. Их у нас 6. Итого у нас может быть 18 светодиодов. Аналоговые порты имеют номера с 14 по 21.
Если собрать схему из 18 светодиодов, то результат будет более зрелищным.
А если хочется подключить 19, 100, 1000 светодиодов? И это возможно! Но для этого потребуется использовать специальные микросхемы, называемые сдвиговыми регистрами. В одном из будущих экспериментов мы обязательно это сделаем!
Смотрите на нашем сайте и другие скетчи для анимации светодиодов.
В одном следующих эксперименте мы изучим массивы и научимся гибко подстраивать скетч анимации светодиодов под различные схемы сборки.