Опыт №5. Эффект преследования

Вступление

В этом эксперименте мы начнем постигать основы анимации светодиодов, реализовав эффект преследования.

Мы поупражняемся в применении циклов для достижения различных эффектов свечения линейки из светодиодов.

Предупреждение! Светодиоды могут давать очень яркое свечение. Берегите свое зрение, особенно если вы работаете в плохо освещенном помещении!

Необходимые компоненты

Нам понадобится 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 светодиодов? И это возможно! Но для этого потребуется использовать специальные микросхемы, называемые сдвиговыми регистрами. В одном из будущих экспериментов мы обязательно это сделаем!

Смотрите на нашем сайте и другие скетчи для анимации светодиодов.

В одном следующих эксперименте мы изучим массивы и научимся гибко подстраивать скетч анимации светодиодов под различные схемы сборки.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *