Arduino:Примеры/Создание эффекта "бегущий всадник" с помощью сдвигового регистра 74HC595
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Создание эффекта "бегущий всадник" с помощью сдвигового регистра 74HC595
Данный пример демонстрирует как создать анимационный эффект "бегущий всадник"(горящий светодиод сначала движется в одну сторону,а потом в обратную) с 8-ю светодиодами задействуя только 3 цифровых контакта Arduino. В этом нам поможет сдвиговый регистр 74HC595.
Схема работы кода(o - светодиод не горит, * - светодиод горит), где справа указаны значения которые мы будет передавать регистру сдвига:
ooooooo* 1
oooooo*o 2
ooooo*oo 4
oooo*ooo 8
ooo*oooo 16
oo*ooooo 32
o*oooooo 64
*ooooooo 128
o*oooooo 64
oo*ooooo 32
ooo*oooo 16
oooo*ooo 8
ooooo*oo 4
oooooo*o 2
Сдвиговый регистр это синхронное устройство, он принимает данные по нарастающему фронту сигнала. В данном случае, когда мы подаем на вход SH_CP сдвигового регистра 74HC595 высокий уровень сигнала, все значения, хранящиеся в нем сдвигаются на одну позицию и происходит запись в первую ячейку значения которое установлено на входе DS сдвигового регистра 74HC595. Данные из последней ячейки или отбрасываются или передаются на выход Q7"(при каскадном подключении). За восемь тактов мы можем загрузить в регистр сдвига новые значения. При подаче на вход ST_CP сдвигового регистра 74HC595 высокого уровня напряжения, происходит вывод значений, хранящихся в ячейках, на выходы регистра.
В данном примере мы будем использовать встроенную функцию shiftOut для поразрядной выдачи данных на выход Arduino, которая упростит работу со сдвиговым регистром.
Она принимает в качестве аргументов:
- номер контакта Arduino, подключенный к контакту DS ввода последовательных данных сдвигового регистра;
- номер контакта Arduino, подключенный к тактовому контакту SH_CP сдвигового регистра;
- порядок выдачи битов;
- MSBFIRST - старший бит будет отправлен первым;
- LSBFIRST - младший бит будет отправлен первым;
- значение для вывода на выводы сдвигового регистра;
Необходимые компоненты
- Плата Arduino, 1шт.;
- Сдвиговый регистр 74HC595, 1 шт.;
- Резистор на 220 Ом, 8 шт.;
- Красный светодиод, 8 шт.;
- Провода-перемычки;
- Макетная плата, 1 шт.;
Схема
Контакты 1-7, 15 | Q0-Q7 | Выходные контакты |
Контакт 8 | GND | «Земля», Vss |
Контакт 9 | Q7’’ | Контакт для вывода последовательных данных |
Контакт 10 | MR | Контакт, позволяющий «очистить» значения на всех выходных контактах и выставить их на LOW (если подать на него LOW) |
Контакт 11 | SH_CP | Тактовый контакт для сдвигового регистра |
Контакт 12 | ST_CP | Тактовый контакт для регистра данных (контакт-защелка) |
Контакт 13 | OE | Контакт, разрешающий вывод данных (если подать на него LOW) |
Контакт 14 | DS | Контакт для ввода последовательных данных |
Контакт 16 | Vcc | Контакт для питания напряжением с положительным зарядом |
Код
#define SER 8 // Контакт для ввода последовательных данных в сдвиговый регистр
#define LATCH 9 // Тактовый контакт для регистра данных (контакт-защелка)
// служит для одновременного вывода полученных последовательных данных
// на параллельные выходы сдвигового регистра
#define CLK 10 // Тактовый контакт для сдвигового регистра
// При подаче HIGH происходит запись одного бита в сдвиговый регистр
int seq[14] = {1,2,4,8,16,32,64,128,64,32,16,8,4,2}; // последовательность включения светодиодов
void setup()
{
//Установка выводов как выходов
pinMode(SER, OUTPUT);
pinMode(LATCH, OUTPUT);
pinMode(CLK, OUTPUT);
}
void loop()
{
for (int i = 0; i < 14; i++)
{
digitalWrite(LATCH, LOW); // устанавливаем LATCH в LOW, чтобы значения на параллельных выходах
// сдвигового регистра не изменялись во время ввода последовательных
// данных
shiftOut(SER, CLK, MSBFIRST, seq[i]); // ввод последовательных данных в сдвиговый регистр
digitalWrite(LATCH, HIGH); // устанавливаем LATCH в HIGH для вывода значений
// на параллельные выводы сдвигового регистра
delay(100); // задержка 100 мс.
}
}
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino