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

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

Продолжаем уроки в которых мы используем Arduino, резисторы и светодиоды. Мы уже делали Светофор, полицейский стробоскоп, отправляли сигнал sos и пр.
Сегодня мы будем делать бегущие огни. Бегущие огни уже были в другом блоке уроков на Arduino: Урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни
При подключении к сдвиговому регистру всего при подключении по 3 проводам мы можем управлять 8 светодиодами. Но вот чтобы подключить 10 светодиодов, нужно подключать 2 сдвиговых регистра и использовать всего 2 выхода из 8 доступных в регистре. Это не очень логично. Иногда бывает проще подключить к плате Arduino нужное количество светодиодов. Что я и планирую сделать. В примере будет 5 самых простых режимов бегущих огней на Arduino.

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

  • 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. Это нужно учитывать при написании кода.

int last_pin = 10; //Кол-во светодиодов
//блок для инициализации входов-выходов и других исходных данных
void setup() {
  for (int i = 0; i < last_pin; i++) // цикл 
    pinMode(i, OUTPUT);  // инициализируем пины как выходы 
}
// Основной цикл 
void loop() {
  for (int j = 0; j < last_pin; j++) { //перебираем пины с 0 до last_pin
    digitalWrite(j, HIGH); //зажигание следующего светодиода
    delay(300); //задержка 300мсек
    digitalWrite(j, LOW); //гасим все светодиоды
  }
}

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

int last_pin = 10; //Кол-во светодиодов
//блок для инициализации входов-выходов и других исходных данных
void setup() {
  for (int i = 0; i < last_pin; i++) // цикл 
    pinMode(i, OUTPUT);  // инициализируем пины как выходы 
}
// Основной цикл 
void loop() {
  for (int j = 0; j < last_pin; j++) { //перебираем пины с 0 до last_pin
    digitalWrite(j, HIGH); //зажигание следующего светодиода
    delay(300); //задержка 300мсек
  }
  for (int j = last_pin-1; j >= 0; j--) { //перебираем пины с 0 до last_pin
       digitalWrite(j, LOW); //гасим все светодиоды
    delay(300); //задержка 300мсек
  }
}

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

int last_pin = 10; //Кол-во светодиодов
//блок для инициализации входов-выходов и других исходных данных
void setup() {
  for (int i = 0; i < last_pin; i++) // цикл 
    pinMode(i, OUTPUT);  // инициализируем пины как выходы 
}
// Основной цикл 
void loop() {
  for (int j = 0; j < last_pin; j++) { //перебираем пины с 0 до last_pin
    digitalWrite(j, HIGH); //зажигание следующего светодиода
    delay(300); //задержка 300мсек
    digitalWrite(j, LOW); //гасим все светодиоды
  }
  for (int j = last_pin-2; j > 0; j--) { //перебираем пины с 0 до last_pin
    digitalWrite(j, HIGH); //зажигание следующего светодиода
    delay(300); //задержка 300мсек
    digitalWrite(j, LOW); //гасим все светодиоды
  }
}

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

int last_pin = 10; //Кол-во светодиодов
//блок для инициализации входов-выходов и других исходных данных
void setup() {
  for (int i = 0; i < last_pin; i++) // цикл 
    pinMode(i, OUTPUT);  // инициализируем пины как выходы 
}
// Основной цикл 
void loop() {
int half = last_pin/2; //last_pin должгно быть четным числом 
  for (int j = 0; j < half; j++) { //перебираем пины с 0 до last_pin
    int k = last_pin-j-1;
    digitalWrite(j, HIGH); //зажигание следующего светодиода
    digitalWrite(k, HIGH); //зажигание следующего светодиода
    delay(300); //задержка 300мсек
    digitalWrite(k, LOW); //гасим все светодиоды
    digitalWrite(j, LOW); //гасим все светодиоды
  }
}

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

int last_pin = 10; //Кол-во светодиодов
//блок для инициализации входов-выходов и других исходных данных
void setup() {
  for (int i = 0; i < last_pin; i++) // цикл 
    pinMode(i, OUTPUT);  // инициализируем пины как выходы 
}
// Основной цикл 
void loop() {
int half = last_pin/2; //last_pin должгно быть четным числом 
  for (int j = half; j > 0; j--) { //перебираем пины с 0 до last_pin
    int k = last_pin-j;
    digitalWrite(j-1, HIGH); //зажигание следующего светодиода
    digitalWrite(k, HIGH); //зажигание следующего светодиода
    delay(500); //задержка 300мсек
    digitalWrite(k, LOW); //гасим все светодиоды
    digitalWrite(j-1, LOW); //гасим все светодиоды
  }
}

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

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

Вернуться в раздел: Уроки Arduino: Светодиоды, Резисторы, Arduino Дата публикации 2 мая , 2019

Комментарии

Ваше Имя*
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.

ЛехаЛ
#1 Гость: ЛехаЛ (12 мая, 2019 в 17:50)

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


Яндекс.Метрика

Top.Mail.Ru

Portal-PK (Портал ПК) © 2015 - 2019 Робототехника на F-studio.biz
Обратная связь
Подписаться на новости
RSS