Arduino:Примеры/Гистограмма расстояния с помощью сдвигового регистра 74HC595 и ИК-датчика расстояния
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Гистограмма расстояния с помощью сдвигового регистра 74HC595 и ИК-датчика расстояния
Данный пример демонстрирует как создать гистограмму расстояния с 8-ю светодиодами задействуя только 3 цифровых контакта Arduino и ИК-датчик расстояния. В этом нам поможет сдвиговый регистр 74HC595.
Схема работы кода(o - светодиод не горит, к - красный светодиод горит, з - зеленый светодиод горит, ж - желтый светодиод горит), где справа указаны значения которые мы будет передавать регистру сдвига:
oooooooo 0
oooooooз 1
ooooooзз 3
oooooззз 7
ooooзззз 15
oooжзззз 31
ooжжзззз 63
oжжжзззз 127
кжжжзззз 255
Сдвиговый регистр это синхронное устройство, он принимает данные по нарастающему фронту сигнала. В данном случае, когда мы подаем на вход SH_CP сдвигового регистра 74HC595 высокий уровень сигнала, все значения, хранящиеся в нем сдвигаются на одну позицию и происходит запись в первую ячейку значения которое установлено на входе DS сдвигового регистра 74HC595. Данные из последней ячейки или отбрасываются или передаются на выход Q7"(при каскадном подключении). За восемь тактов мы можем загрузить в регистр сдвига новые значения. При подаче на вход ST_CP сдвигового регистра 74HC595 высокого уровня напряжения, происходит вывод значений, хранящихся в ячейках, на выходы регистра.
В данном примере мы будем использовать встроенную функцию shiftOut для поразрядной выдачи данных на выход Arduino, которая упростит работу со сдвиговым регистром.
Она принимает в качестве аргументов:
- номер контакта Arduino, подключенный к контакту DS ввода последовательных данных сдвигового регистра;
- номер контакта Arduino, подключенный к тактовому контакту SH_CP сдвигового регистра;
- порядок выдачи битов;
- MSBFIRST - старший бит будет отправлен первым;
- LSBFIRST - младший бит будет отправлен первым;
- значение для вывода на выводы сдвигового регистра;
Необходимые компоненты
- Плата Arduino, 1шт.;
- ИК-датчик расстояния Sharp GP2Y0A41SK0F, 1 шт.;
- Сдвиговый регистр 74HC595, 1 шт.;
- Резистор на 220 Ом, 8 шт.;
- Красный светодиод, 1 шт.;
- Желтый светодиод, 3 шт.;
- Зеленый светодиод, 4 шт.;
- Провода-перемычки;
- Макетная плата, 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 происходит запись одного бита в сдвиговый регистр
#define DIST 0 // Контакт для подключения датчика расстояния
int vals[9] = {0,1,3,7,15,31,63,127,255}; // возможные значения для регистра сдвига
int maxVal = 500; // максимальное значение расстояния
int minVal = 0; // минимальное значение расстояния
void setup()
{
//Установка выводов как выходов
pinMode(SER, OUTPUT);
pinMode(LATCH, OUTPUT);
pinMode(CLK, OUTPUT);
}
void loop()
{
int distance = analogRead(DIST); // считываем значение с датчика расстояния
distance = map(distance, minVal, maxVal, 0, 8); // масштабируем значение
distance = constrain(distance,0,8); // накладываем ограничение на диапазон возможных значений
digitalWrite(LATCH, LOW); // устанавливаем LATCH в LOW, чтобы значения на параллельных выходах
// сдвигового регистра не изменялись во время ввода последовательных
// данных
shiftOut(SER, CLK, MSBFIRST, vals[distance]); // ввод последовательных данных в сдвиговый регистр
digitalWrite(LATCH, HIGH); // устанавливаем LATCH в HIGH для вывода значений
// на параллельные выводы сдвигового регистра
delay(10); // задержка 10 мс.
}
См.также
Внешние ссылки
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