В предыдущем уроке: Урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни . Мы научились подключать сдвиговый регистр к плате Arduino . Написали небольшой скетч для управления подключенными светодиодами.
После этого урока мне стали задавать вопросы как можно подключить 2 и больше сдвиговых регистра 74HC595 к Arduino UNO. Не смотря на то что я уже рассказывал в видео Часы на Arduino. Паяем 74HC595N для управления LED. Часть 1 как подключить и уровнять сдвиговыми регистрами, у многих возникает сложность в данной теме.
Я решил снять данный урок. И написает небольшой скетч для управления встречными бегущими огнями.
Для Видео урока нам понадобится:
— 2 Сдвиговых регистра 74HC595
Подключил светодиоды к Arduino вот по такой схеме.
Подключение практически такое же как и подключений одного сдвигового регистра. Только при подключении с первого сдвигового регистра ко второму. Нужно с 9 ножки 74НС595 подключить к 14 ножки сдвигового регистра.
При написании скетча трудностей у вас возникнуть не должно. Так как Программа будет с небольшим изменением.
Следующий урок:
Если у вас чего то нет для выполнения данного урока, Вы можете посмотреть вкаталоге. Там собранные комплектующими от проверенных продавцов по самым низким ценам.
В этой статье мы предлагаем ознакомиться с основами программирования платы Arduino UNO, предназначенной для создания простых систем робототехники и автоматики. Мы соберём схему из семи светодиодов, которые будут последовательно загораться и гаснуть. Для этого нам понадобится сама плата Arduino UNO, макетная плата, USB кабель для подключения платы и её и питания от ноутбука, семь разноцветных светодиодов и столько же резисторов на 220 Ом и восемь небольших проводочков.
Также нам потребуется программное обеспечение, скачанное с официального сайта разработчика — www.arduino.cc Запускаем установщик, следуем всем инструкциям установки и у нас на десктопе появляется ярлык среды разработки программ для Arduino. Но прежде чем писать программный код, нужно собрать схему. Наша программа записывается в микроконтроллер на плате через USB кабель.
На плате есть 14 цифровых контактов для ввода/вывода, к которым мы можем присоединить проводами диоды.
Диоды помещаем на макетную плату. К аноду каждого из них присоединяем один конец резистора на 220 Ом. К другому концу резистора присоединяем проводок, который втыкается в один из портов ввода-вывода платы. Мы воткнули во второй.
Все катоды выводим на один провод, который подключаем к контакту платы GND — земля.
Далее запускаем среду разработки и приступаем к написанию кода программы.
По-умолчанию у нас в программе есть 2 функции:
void setup() < >
В ней задаются начальные параметры и настройки.
void loop() < >
Функция, в которой будут циклически повторяться указанные нами действия.
Для начала напишем простую программу, мигающую одной лампочкой.
/*Программа для схемы с одним мигающим диодом*/ //целочисленная константа, которой присваивается значение 2го контакта const int LED = 2;
void setup() < //2 порт задаём как вывод, т.е он подаёт напряжение в схему pinMode(LED, OUTPUT); //диод в выключенном состоянии LOW = 0 В (вольт) digitalWrite(LED, LOW); >
void loop() < // включаем диод HIGH = 5 В (вольт) digitalWrite(LED, HIGH); // задержка на 100 мс (миллисекунд) delay(100); // выключаем диод digitalWrite(LED, LOW); // задержка delay(100); >
Подключаем плату Arduino к компьютеру через USB кабель. Если это первое подключение — ждем, когда установятся драйвера.
Затем нужно указать в разделе «Инструменты» тип платы: Arduino — UNO.
А также, порт, через который будут передаваться данные.
После выбора порта жмём кнопочку со стрелкой «Загрузка» и наша программа загружается в микроконтроллер.
Если нет никаких ошибок в коде, то начинается выполнение программы. Лампочка начинает мигать. По такому же принципу в цепь можно включить несколько светодиодов, каждый из которых подключим к своему порту на плате.
Чтобы эти диоды попеременно включались и выключались произведем соответствующие изменения в коде программы.
/*Программа для схемы с 7ю мигающии диодами. Сначала все последовательно включаются, потом последовательно выключаются*/ /*целочисленная переменная, которой присваивается начальное значение 2 контакта*/ int LED = 2;
void setup() < /*цикл, перебирающий порты от 2 до 8 и присваивающий начальные значения как порт вывода и выключен*/ for(int i = 2; i /*2 цикла, перебирают порты от 2 до 8, сначала попеременно включают диоды, с задержкой 100 мс, затем попеременно выключают*/ for(int i = 2; i /*Программа для схемы с 7ю мигающии диодами, в которой один диод загорается, а предыдущий гаснет*/ /*целочисленная переменная, которой присваивается начальное значение 2 контакта*/ int LED = 2;
void setup() < /*цикл, перебирающий порты от 2 до 8 и присваивающий начальные значения как порт вывода и выключен*/ for(int i = 2; i /*цикл, перебирает порты от 2 до 8*/ for(int i = 2; i //включаем очередной диод LED = i; digitalWrite(LED, HIGH); /*если включаем 2 порт, то отключать нужно 8й, в ином случае предыдущий*/ if(i == 2) LED = 8; else LED —; digitalWrite(LED, LOW); //задержка 100 мс delay(100); > delay(100); >
А можно сделать и реальную «змейку» из нескольких огоньков, например 3, добавив функций в код.
/*Программа для схемы с 7ю мигающии диодами, в которой за раз светятся только 3 диода, и этот огонёк пробегает змейкой по всем 7ми*/ /*целочисленная переменная, которой присваивается начальное значение 2 контакта*/ int LED = 2; //длина «змейки» — 3 диода светятся за раз int snake_length = 3;
void setup() < /*цикл, перебирающий порты от 2 до 8 и присваивающий начальные значения как порт вывода и выключен*/ for(int i = 2; i /*перебираем в цикле порты от 2 до 8 и передаём функции snake номера диодов, которые нужно зажечь: текущий по циклу и 2 перед ним*/ for(int i = 2; i //задержка 500 мс. delay(500); > >
void snake(int init, int finite) < /*гасим предыдущий диод, если передаваемый номер меньше 2 или больше 8, его нужно изменить в функции snake_check*/ LED = snake_check(init-1); digitalWrite(LED, LOW);
for(int i = init; i /*включаем нужные диоды, проверяя номер порта в функции snake_check*/ LED = snake_check(i); digitalWrite(LED, HIGH); > >
А еще можно сделать увеличивающуюся в размере змейку.
/*Программа для схемы с 7ю мигающии диодами, в которой огонёк пробегает змейкой по всем 7ми, но длина этого огонька постепенно увеличивается*/ /*целочисленная переменная, которой присваивается начальное значение 2 контакта*/ int LED = 2; //длина «змейки» — сколько диодов светятся за раз int snake_length = 1; //максимальная длина «змейки» int max_snake_length = 6;
void setup() < /*цикл, перебирающий порты от 2 до 8 и присваивающий начальные значения как порт вывода и выключен*/ for(int i = 2; i /*перебираем в цикле порты от 2 до 8 и передаём функции snake номера диодов, которые нужно зажечь: текущий по циклу и 2 перед ним*/ for(int i = 2; i //задержка 500 мс. delay(500); > /*после того, как огонёк пробежал по всем диодам, его длина увеличивается на 1, пока не достигнет заданого максимального значения*/ snake_length++; if(snake_length >= max_snake_length) snake_length = 1; >
void snake(int init, int finite) < /*гасим предыдущий диод, если передаваемый номер меньше 2 или больше 8, его нужно изменить в функции snake_check*/ LED = snake_check(init-1); digitalWrite(LED, LOW);
for(int i = init; i /*включаем нужные диоды, проверяя номер порта в функции snake_check*/ LED = snake_check(i); digitalWrite(LED, HIGH); > >
Продолжаем уроки в которых мы используем Arduino, резисторы и светодиоды. Мы уже делали Светофор, полицейский стробоскоп, отправляли сигнал sos и пр. Сегодня мы будем делать бегущие огни. Бегущие огни уже были в другом блоке уроков на Arduino: Урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни При подключении к сдвиговому регистру всего при подключении по 3 проводам мы можем управлять 8 светодиодами. Но вот чтобы подключить 10 светодиодов, нужно подключать 2 сдвиговых регистра и использовать всего 2 выхода из 8 доступных в регистре. Это не очень логично. Иногда бывает проще подключить к плате Arduino нужное количество светодиодов. Что я и планирую сделать. В примере будет 5 самых простых режимов бегущих огней на Arduino.
Для урока нам понадобится:
Arduino UNO или Arduino Nano
Плата макетная беспаечная
Резисторы 220 ОМ
Соединительные провода папа-папа
Светодиоды 3 или 5 мм.
Подключим наши 10 светодиоды вот по такой схеме.
В живую будет выгладить так.
Вы наверное скажите что схема не правильная и к пинам 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. Думаете что я ошибся с цифрами. Подписывайтесь на канал. И в следующем уроке в данном блоке уроков я покажу как можно это реализовать.
Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.
ограничивающий резистор — 220 Ом или аналогичный — https://bit.ly/3swTpyp
провода папа-папа, мама-мама, папа-мама 10-30 см — https://bit.ly/3n3z0jl
Схема подключения
Количество светодиодов значения не имеет. Что бы все светодиоды загорались, нужно указать в скетче в массиве в первой строке номер порта подключения всех светодиодов.
Скетч
В первой строке перечисляются все порты Arduino, к которым подключены светодиоды. Строка 16 управляет быстротой бега огонька — время указывается в миллисекундах.
Видео
Бегущий огонёк на Arduino: скетч с массивом : 1 комментарий
Тут такой вопрос назрел . Мы прогнали в одну сторону . for (int i=countLeds-1; i>=0; i—) — развернули в обратную сторону . А как поделить по палам ?