В этом уроке вы узнаете, как использовать восемь больших красных светодиодов
с MEGA2560 не расходуя 8 выходных пинов! Хотя вы можете подключить восемь
светодиодов каждый с резистором к контакту MEGA2560, но тогоа у вас быстро
начнут заканчиваться контакты на вашем MEGA2560. Если у вас нет большого
количества модулей, подключенных к вашему MEGA2560 - это нормально, но часто
намнужны кнопки, датчики, сервоприводы и т.д., и может оказаться, что у вас не
останется свободных выводов. Для уменьшения числа выводов используем микросхему
74HC595 последовательный 8-и битный сдвиговый регистр с параллельным выходным
регистром-защелкой. Этот чип имеет восемь выходов и три входа, которые
используются для подачи данных в него по одному биту за раз. Эта микросхема
немного снизит скорость управления светодиодами (вы можете мигать светодиодами
только около 500 000 раз в секунду вместо 8 000 000 в секунду), но он все еще
очень быстр, намного быстрее, чем человеческий глаз может заметить, так что оно
того стоит!
Регистр сдвига - это микросхема, которая содержит то, что можно считать восемью
ячейками памяти, каждая из которых может быть либо 1, либо 0. Чтобы включить
или выключить каждое из этих значений, мы вводим данные с помощью контактов
"Data" и "Clok" чипа
После подключения, пожалуйста, откройте программу в папке с кодом - Урок 24 Eight LED with 74HC595 и нажмите кнопку ЗАГРУЗИТЬ, чтобы загрузить программу. См. Урок 2 для получения подробной информации о загрузке программы при наличии ошибок. Первое, что мы делаем, это определяем три пина, которые мы собираемся использовать. Это цифровые выходы MEGA2560, которые будут подключены к контактам latch, clock и data микросхемы 74HC595.
int latchPin = 11; int clockPin = 9; int dataPin = 12;Далее определяется переменная, называемая leds "светодиоды". Это будет использоваться для удержания шаблона по которому светодиоды в данный момент включены или выключены. Данные типа "байт" представляют собой числа, использующие восемь бит. Каждый бит может быть либо включен, либо выключен, так что это идеально подходит для отслеживания,какие из наших восьми светодиодов включены или выключены.
byte leds = 0;Функция "setup" просто устанавливает три пина, которые мы используем, чтобы назначить их цифровыми выходами.
void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); }Функция "loop" изначально выключает все светодиоды, задавая переменной "leds" значение 0. Затем он вызывает "updateShiftRegister", который отправит шаблон "leds" в регистр сдвига, чтобы все светодиоды выключились. Мы будем и меть дело с updateShiftRegister работы позже. Функция цикла приостанавливается на полсекунды, а затем начинает отсчет от 0 до 7, используя цикл "for" и переменную "i". Каждый раз он использует функцию Arduino "bitSet", чтобы установить бит, управляющий этим светодиодом в переменной "leds". Затем он также вызывает "updateShiftRegister", так что светодиоды обновляются, чтобы отразить то, что находится в переменной "leds". Затем происходит полсекундная задержка, прежде чем "i" увеличивается и загорается следующий светодиод.
void loop() { leds = 0; updateShiftRegister(); delay(500); for (int i = 0; i < 8; i++) { bitSet(leds, i); updateShiftRegister(); delay(500); } }Функция "updateShiftRegister" сначала устанавливает фиксатор на низкий уровень, затем вызывает функцию "shiftOut", прежде чем снова зафиксировать высокий уровень. Для этого требуется четыре параметра, первые два из которых являются выводами для Data и Clock соответственно. Третий параметр указывает, с какого конца данных вы хотите начать. Мы начнем с самого правого бита, который называется "Least Significant Bit" (LSB).
void updateShiftRegister() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); }Если бы вы хотели выключить один из светодиодов, а не включить, вы бы вызвали аналогичную Функцию Arduino (bitClear) с переменной "светодиоды". Это установит этот бит "светодиодов" равным 0, и вам просто нужно будет следовать за ним с вызовом "updateShiftRegister", чтобы обновить фактические светодиоды.