Эта моя статья есть на Хабре, но пока она там не опубликована. Как только она пройдёт модерацию, здесь появится на неё ссылка.
Я использовал микросхему 74HC595, но другие на неё похожи, так что вы можете продолжать читать. Для начала приведу распиновку.
Q1...Q7 — параллельные выходы регистра. Предназначены для подключения управляемых элементов, например, светодиодов.
GND — земля ("минус").
VCC — питание ("плюс"). Сюда подаются 5 В.
DS — вход данных. На этот вход передаются восемь последовательных бит данных для установки значений на параллельных выходах.
OE — вход для вывода последовательных данных на параллельные выходы. Черта сверху означает, что активный уровень для этого входа низкий. Если на него подаётся напряжение низкого уровня, параллельные выходы будут включены, а при подаче напряжения высокого уровня — выключены.
ST_CP — синхронизация выходов.
SH_CP — вход тактовых импульсов. При подаче на него импульса высокого напряжения в сдвиговый регистр считывается один бит данных со входа DS. Для считывания всех восьми бит данных необходимо подать на этот вход восемь импульсов.
MR — сброс значений регистра при подаче на него напряжения низкого уровня.
Q7` — выход, предназначенный для соединения регистров друг с другом (это называется "делать каскады").
Теперь попробуем подключить эту штуку к Arduino. Вот схема.
К выводам Q1...Q7 подключите управляемые элементы, например, светодиоды.
Осталось написать код. Я уже дал распиновку, схему подключения и объяснил, какой вывод за что отвечает. Теперь вы можете написать код сами. Но если не можете (или вам лень), то вам понадобится готовый код, который я привожу ниже. Тут на управляемые элементы последовательно, с интервалом в 1 секунду, подаётся высокое напряжение, после чего они все выключаются и всё начинается сначала.
#define data 2 //Вывод данных
#define clock 3 //Тактовый вывод
#define latch 4 //Вывод синхронизации
byte elementsStates[8] = {0b10000000, 0b11000000, 0b11100000,
0b11110000, 0b11111000, 0b11111100, 0b11111110, 0b11111111,
0b00000000}; //Данные для подачи на вход данных
void setup() {
//Назначение выводов выходами
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
}
void loop() {
//Цикл, ежесекундно отправляющий в регистр новые данные
for (int i = 0; i < 8; i++) {
digitalWrite(latch, LOW); //Закрыть вывод данных на параллельные выходы
shiftOut(data, clock, MSBFIRST, elementsStates[i]) //Отправить данные в регистр
digitalWrite(latch, HIGH); //Вывести данные на параллельные выходы
delay(1000); //Задержка на секунду
}
}
Ну вот и всё. Только не забудьте загрузить код в Arduino.
Хорошего дня!