Управление светодиодами через Сдвиговый регистр

В данном материале описывается подключение 8 светодиодов к ардуино по трем проводам. Что бы совепшить это чудо нам необходим сдвиговый регистр. В данном случае это 74СН595. 


Суть работы данной микросхемы -  преобразование последовательного сигнала от управляющего устройства (в нашем случае от Ардуино) в паралельный сигнал (тут на нем горят светодиоды). Подключая последовательно такие регистры можно управлять большим количеством диодов, так же по трем проводам.


Соберите и протесте пример. 

#define DATA_PIN 9 // пин данных (англ. data)
#define LATCH_PIN 10 // пин строба (англ. latch)
#define CLOCK_PIN 11 // пин такта (англ. clock)

int i = 0;

byte ledM[8] = { //создаем массив из 8 светодиодов
0b00000001, 0b00000011, 0b00000111, 0b00001111, 0b00011111,
0b00111111, 0b01111111, 0b11111111
};  //указываем, какой пин микросхемы Q0-Q7 включать (1), а какой выключить (0).

void setup()
{
pinMode(DATA_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}

void loop()
{


// для записи в 74HC595 нужно притянуть пин строба к земле
digitalWrite(LATCH_PIN, LOW);
// задвигаем (англ. shift out) байт-маску бит за битом,
// начиная с младшего (англ. Least Significant Bit first)
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, ledM[i]);
// чтобы переданный байт отразился на выходах Qx, нужно
// подать на пин строба высокий сигнал
digitalWrite(LATCH_PIN, HIGH);

delay(800);
i++;
if (i>8) i=0;
}

Некоторые пояснения к коду. Для того, чтобы передать порцию данных, которые будут отправлены через сдвиговый регистр далее, нам нужно подать LOW на latch pin (вход STcp микросхемы), затем передать данные, а затем отправить HIGH на latch pin, после чего на соответствующих выходах 74HC595 появится переданная комбинация высоких и низких уровней сигнала.


Для передачи данных мы использовали функцию shiftOut(dataPin, clockPin, bitOrder, value). Функция ничего не возвращает, а в качестве параметров ей нужно сообщить пин Arduino, который подключен ко входу DS микросхемы (data pin), пин Arduino, соединенный со входом SHcp (clock pin), порядок записи битов: LSBFIRST (least significant bit first) — начиная с младшего, или MSBFIRST(most significant bit first) — начиная со старшего, байт данных, который нужно передать. Функция работает с порциями данных в один байт, так что если вам нужно передать больше, придется вызывать ее несколько раз.

Вот так обозначаются ножки микросхемы в ее описании от разработчки DATA SHEET, если хотите посмотреть более подробно, он свободно доступен в интернете