Конспект хакера бегущий огонек

Обновлено: 07.07.2024

void setup() for (int pin = FIRST_LED_PIN; pin = minimal ; —pin) digitalWrite(pin, HIGH);
digitalWrite(maximal+minimal-pin, HIGH);
delay(long_time);
>;
non( FIRST_LED_PIN, LAST_LED_PIN);
>

/* ****************************************************************** */
// волна навстречу друг другу
void towards_wave2(int minimal, int maximal, int long_time)
for (pin = minimal; pin = minimal ; —pin) digitalWrite(pin, HIGH);
digitalWrite(maximal+minimal-pin, HIGH);
delay(long_time);
digitalWrite(pin, LOW);
digitalWrite(maximal+minimal-pin, LOW);
>;
>

/* ****************************************************************** */
// по одному навстречу друг другу
void towards_alone(int minimal, int maximal, int long_time)
for (pin = minimal; pin = minimal-1; —pin) digitalWrite(pin, HIGH);
delay(long_time);
digitalWrite(pin, LOW);
>;
>

/* ****************************************************************** */
// отключение всех мгновенно
void non( int minimal, int maximal ) for (pin = minimal; pin = minimal; —pin) digitalWrite(pin, LOW);
delay(long_time);
>;
>

/* ****************************************************************** */
// непрерывная дорожка, потом исчезает справа-налево и исчезает
void away1_LR_line(int minimal, int maximal, int long_time)
for (pin = minimal; pin = minimal; —pin) digitalWrite(pin, HIGH);
delay(long_time);
>;
for (pin = minimal; pin = minimal; —pin) digitalWrite(pin, HIGH);
delay(long_time);
>;
for (pin = maximal; pin >= minimal; —pin) digitalWrite(pin, LOW);
delay(long_time);
>;
>

В этом эксперименте мы заставляем огонёк бежать по светодиодной шкале.

Список деталей для эксперимента

Принципиальная схема

Схема на макетке

Обратите внимание

Обратите внимание, что в данном эксперименте резисторы установлены между катодами и землей в отличие от эксперимента пульсар.

Мы подключаем светодиоды к цифровым портам, начиная с порта 2. Мы можем использовать порты 0 и 1, но они являются каналами передачи данных последовательного порта и для каждой перепрошивки платы придется отключать устройства, подключенные к ним.

Скетч

Пояснения к коду

С помощью выражения for мы организуем цикл со счетчиком. В данном случае для настройки портов на выход. Чтобы сделать такой цикл, нужно:

Инициализировать переменную-счетчик, присвоив ей первоначальное значение. В нашем случае: int pin = FIRST_LED_PIN

Определить правило, по которому будет изменяться счетчик. В нашем случае ++pin (см. ниже об операторе ++ ).

Помещайте код, который нужно зациклить, между парой фигурных скобок <> , если в нем больше одной инструкции.

Переменная-счетчик, объявляемая в операторе for , может использоваться внутри цикла. Например, в данном эксперименте pin последовательно принимает значения от 2 до 11 и, будучи переданной в pinMode , позволяет настроить 10 портов одной строкой, помещенной в цикл.

Переменные-счетчики видны только внутри цикла. Т.е. если обратиться к pin до или после цикла, компилятор выдаст ошибку о необъявленной переменной.

Конструкция i = i - 1 в пояснении выше не является уравнением! Мы используем оператор присваивания = для того, чтобы в переменную i поместить значение, равное текущему значению i , уменьшенному на 1.

Выражение ++pin — это т.н. оператор инкремента, примененный к переменной pin . Эта инструкция даст тот же результат, что pin = pin + 1

Аналогично инкременту работает оператор декремента -- , уменьшающий значение на единицу. Подробнее об этом в статье про арифметические операции.

Тип данных unsigned int используют для хранения целых чисел без знака, т.е. только неотрицательных. За счет лишнего бита, который теперь не используется для хранения знака, мы можем хранить в переменной такого типа значения до 65 535.

Функция millis возвращает количество миллисекунд, прошедших с момента включения или перезагрузки микроконтроллера. Здесь мы используем ее для отсчета времени между переключениями светодиодов.

С помощью выражения (ms / 120) % 10 мы определяем, который из 10 светодиодов должен гореть сейчас. Перефразируя, мы определяем какой отрезок длиной в 120 мс идет сейчас и каков его номер внутри текущего десятка. Мы добавляем порядковый номер отрезка к номеру того порта, который в текущем наборе выступает первым.

То, что мы гасим светодиод с помощью digitalWrite(pin, LOW) всего через 10 мс после включения не заметно глазу, т.к. очень скоро будет вновь вычислено, какой из светодиодов включать, и он будет включен — только что погашенный или следующий.

Вопросы для проверки себя

Если бы мы включали светодиоды только на портах 5, 6, 7, 8, 9, что нужно было бы изменить в программе?

Задания для самостоятельного решения

Переделайте программу так, чтобы вместо int pin = FIRST_LED_PIN + (ms / 120) % 10 перемещением огонька управлял цикл for

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Noncommercial-Share Alike 4.0 International





Видео

Нам понадобится

    (или другой контроллер) (для более удобного подключения)
  • Источник питания

Также понадобится библиотека iarduino_NeoPixel

При необходимости, ознакомьтесь с нашей инструкцией по установке библиотек в Arduino IDE.

Подключение

Мы предполагаем, что Вы уже спаяли NeoPixel-кольцо. Если нет, сперва соберите его по этой инструкции, а затем вернитесь к данному проекту.

К 3 выводу контроллера подключена кнопка. Вторым контактом она подключена к GND. NeoPixel-кольцо подключено к 5 выводу контроллера.

Минус питания подаётся на GND контроллера и кольца, а плюс - на 5V.

Для питания рекомендуем использовать отдельный блок питания с напряжением 5В и током не менее 3А.


Для проекта можно использовать любой контроллер. Не забудьте выбрать используемую плату в меню Инструменты -> Плата

.Урок 9 - Бегущие огни на Arduino UNO

Для урока нам понадобится:

  • Arduino UNO или Arduino Nano
  • Плата макетная беспаечная
  • Резисторы 220 ОМ
  • Соединительные провода папа-папа
  • Светодиоды 3 или 5 мм.

Для урока нам понадобится

Подключим наши 10 светодиоды вот по такой схеме.

Подключим наши 10 светодиоды вот по такой схеме

В живую будет выгладить так.

режимов бегущих огней на Arduino

Вы наверное скажите что схема не правильная и к пинам 0 и1 подключать не желательно. Вот именно не желательно, но можно если не использовать Serial port. А для облегчения кода нам будет очень удобно использовать данные пины. При загрузки кода в Ардуину светодиоды подключенные к 0 и 1 выходам будут мигать. Также при работе нашего скетча. Вместе с данными светодиодами на плате Arduino UNO буду включаться светодиода RX и TX. Но как я говорил в данном случаи ни чего старшного в этом нет.

Описывать все режимы не буду. В видео немного поясняю. Немного корява и может не совсем понятно. Но я думаю по комментариям к коду можно разобраться.

Первый пример бегущих огней на Arduino, последовательное включение одного светодиода с 1 по 10. По пинам на ардуино будет с 0 по 9. Это нужно учитывать при написании кода.

Немного изменим данный пример и сделаем 2 цикла. Получим включение всех светодиодов и выключение в обратном направлении.

Объединив код первого и второго примера получим включение одного светодиода в прямом и обратном направлении. Во втором цикли ставим j-2, потому что у нас пины начинаются с 0, а число светодиодов с 1 до 10. Также чтобы 10 светодиод не включался 2 раза вычитаем еще 1.

Сходящиеся огни. Тут все по аналогии. Добавим переменную в которой будим рассчитывать половину светодиодов. Поэтому количество светодиодов должно быть четным. Либо что-то делать с центральным светодиодом. Можно оставить его постоянно включенным или наоборот всегда включенным.

И по аналогии делаем расходящиеся огни.

Как видно без использования сдвигового регистра код получается намного проще и меньше строчек. Один минус количество ограничено. Максимум 20 светодиодов можно подключить к Arduino Uno и 22 к Arduino NANO. Думаете что я ошибся с цифрами. Подписывайтесь на канал. И в следующем уроке в данном блоке уроков я покажу как можно это реализовать.

Бегущий огонёк на Arduino

Небольшой и простой проект бегущего огонька. Отличается тем, что можно легко изменить количество светодиодов в схеме.

Комплектующие

Схема подключения

Количество светодиодов значения не имеет. Что бы все светодиоды загорались, нужно указать в скетче в массиве в первой строке номер порта подключения всех светодиодов.

Схема бегущего огонька на Arduino

Скетч

В первой строке перечисляются все порты Arduino, к которым подключены светодиоды. Строка 16 управляет быстротой бега огонька — время указывается в миллисекундах.

Видео

Читайте также: