Урок 3 - Подключаем 2 сдвиговых регистра к Arduino. Пишем скетч «Бегущие огни»

.Урок 3  - Подключаем 2 сдвиговых регистра к Arduino. Пишем скетч «Бегущие огни»

В предыдущем уроке: Урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни . Мы научились подключать сдвиговый регистр к плате Arduino . Написали небольшой скетч для управления подключенными светодиодами.

После этого урока мне стали задавать вопросы как можно подключить 2 и больше сдвиговых регистра 74HC595 к Arduino UNO. Не смотря на то что я уже рассказывал в видео Часы на Arduino. Паяем 74HC595N для управления LED. Часть 1 как подключить и уровнять сдвиговыми регистрами, у многих возникает сложность в данной теме.

Я решил снять данный урок. И написает небольшой скетч для управления встречными бегущими огнями.

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

-Arduino UNO или Arduino Nano

- 2 Сдвиговых регистра 74HC595

- Плата макетная беспаечная

- Резисторы 220 ОМ

-Соединительные провода папа-папа

-Светодиоды 3 или 5 мм.


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

подключения двух сдвиговых регистров к Arduino

Подключение практически такое же как и подключений одного сдвигового регистра. Только при подключении с первого сдвигового регистра ко второму. Нужно с 9 ножки 74НС595 подключить к 14 ножки сдвигового регистра.

Принципиальная схема подключения двух сдвиговых регистров к Arduino.


При написании скетча трудностей у вас возникнуть не должно. Так как Программа будет с небольшим изменением.


int dataPin = 2; //Пин подключен к DS входу 74HC595 
int latchPin = 3; //Пин подключен к ST_CP входу 74HC595
int clockPin = 4; //Пин подключен к SH_CP входу 74HC595
void setup() { //устанавливаем режим OUTPUT 
  pinMode(latchPin, OUTPUT); 
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT); } 
void loop() { 
  byte byteToSend = 0; //Создаем пустой байт B00000000 
             for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита 
              byteToSend = 0; // Обнуляем байт при каждом проходе  
               bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. 
               digitalWrite(latchPin, LOW); // Открыли регистр
               shiftOut(dataPin, clockPin, MSBFIRST, byteToSend);   // передаем последовательно на dataPin - в первом регистре значение B01001100
               shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
               digitalWrite(latchPin, HIGH); /// Закрываем регистр тем самым передаем значение на выводы 
               delay(150);
             }
             byteToSend = 0; // Обнуляем байт при каждом проходе
             digitalWrite(latchPin, LOW); 
             shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
             shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
             digitalWrite(latchPin, HIGH); 
             delay(150);
             for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита 
               byteToSend = 0; // Обнуляем байт при каждом проходе  
               bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д. 
               digitalWrite(latchPin, LOW); // Открыли регистр
               shiftOut(dataPin, clockPin, LSBFIRST, byteToSend);   // передаем последовательно на dataPin - в первом регистре значение B01001100
               shiftOut(dataPin, clockPin, MSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
               digitalWrite(latchPin, HIGH); /// Закрываем регистр тем самым передаем значение на выводы 
               delay(150);
             }
            byteToSend = 0; // Обнуляем байт при каждом проходе
            digitalWrite(latchPin, LOW); 
            shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
            shiftOut(dataPin, clockPin, LSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита 
            digitalWrite(latchPin, HIGH); 
            delay(150);
     }

Следующий урок:



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

Понравилась статья? Поделитесь ею с друзьями:

Вернуться в раздел: Уроки Arduino: Подключение датчиков и модулей к Arduino Дата публикации 17 апреля , 2017

Комментарии

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

Jiva
#2 Гость: Jiva (30 апреля, 2020 в 21:30)

Добрый вечер! Такой вопрос. А с smd белыми светодиодами такое же сопротивление ставить?

Pit
#1 Гость: Pit (21 февраля, 2019 в 02:29)

Спасибо огромное!!


Cлучайные товары

Посмотреть товар в Магазине »

Мы в соц сетях

Подпишись на канал Telegram

Portal-PK (Портал ПК) © 2015 - 2024
Разработка проектов
AT Block
DWIN Box