Джереми Блум - Изучаем Arduino: инструметы и методы технического волшебства
- Название:Изучаем Arduino: инструметы и методы технического волшебства
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2015
- Город:Санкт-Петербург
- ISBN:978-5-9775-3585-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Джереми Блум - Изучаем Arduino: инструметы и методы технического волшебства краткое содержание
Для радиолюбителей
Изучаем Arduino: инструметы и методы технического волшебства - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
0000000* | 1 | t=1
000000*0 | 2 | t=2
00000*00 | 4 | t=3
0000*000 | 8 | t=4
000*0000 | 16 | t=5
0*000000 | 64 | t=7
*0000000 | 128 | t=8
0*000000 | 64 | t=9
00*00000 | 32 | t=10
000*0000 | 16 | t=11
0000*000 | 8 | t=12
00000*00 | 4 | t=13
000000*0 | 2 | t=14
Рис. 7.6. Пошаговое представление эффекта "бегущий всадник"
- 162 -
Листинг 7.2. Световой эффект "бегущий всадник" - lightrider.ino
// Создание световой анимации "бегущий всадник"
const int SER=8;// Контакт для подключения вывода DATA
const int LATCH =9;// Контакт для подключения вывода LATCH
const int CLK =10;// Контакт для подключения вывода CLOCK
// Последовательность включения светодиодов
int seq[14] = {1,2,4,8,16,32,64,128,64,32,16,8,4,2};
void setup()
{
// Установить контакты на вывод (OUTPUT)
pinMode(SER, OUTPUT);
pinMode(LATCH, OUTPUT);
pinMode(CLK, OUTPUT);
}
void loop()
{
for (int i = 0; i < 14; i++)
{
digitalWrite(LATCH, LOW);// LATCH - низкий
shiftOut(SER, CLK, MSBFIRST, seq[i]); // Старший бит - первый
digitalWrite(LATCH, HIGH);// LATCH - высокий
delay(100);// Скорость анимации
}
}
Регулируя величину задержки, можно менять скорость анимации. Попробуйте изменить значения в массиве последовательностей, чтобы получить различные комбинации включения светодиодов.
ПРИМЕЧАНИЕ
Для просмотра демонстрационного видеоклипа программы lightrider зайдите по адресу http://www.exploringarduino.com/content/ch7. Видеоклип также доступен на сайте издательства Wiley.
7.4.2. Отображение данных в виде гистограммы добавив ИК-датчик расстояния в предыдущую схему, можно создать светящуюся гистограмму, которая показывает, насколько близко вы находитесь. Для большей наглядности возьмите несколько светодиодов разного цвета. Принципиальная схема устройства с разноцветными светодиодами и ИК-датчиком расстояния приведена на рис. 7.7.
- 163 -

Рис. 7.7. Схема устройства, реализующего эффект "гистограммы расстояния"
Зная принцип действия аналогового датчика и регистра сдвига, вы в состоянии самостоятельно выбрать пороги расстояния и соответствующие им комбинации включенных и выключенных светодиодов (рис. 7.8).
Из главы 3 ясно, что диапазон используемых значений для ИК-датчика расстояния не должен превышать 10 бит (у меня максимальное значение оказалось равно 500, у вас оно возможно отличается). Лучше всего самостоятельно проверить дальность действия датчика и уточнить соответствующие значения. Все десятичные комбинации гистограммы хранятся в массиве из девяти элементов. Ограничиваем максимальное расстояние и приводим значения к диапазону от 0 до 8. Листинг 7.3 иллюстрирует программную реализацию эффекта гистограммы.
Листинг 7.3 Гистограмма отображения расстояния - bargraph.ino
// Гистограмма расстояния
const int SER=8;// Контакт для подключения вывода DATA
const int LATCH =9; // Контакт для подключения вывода LATCH
- 164 -
const int CLK =10;// Контакт для подключения вывода CLOCK
const int DIST =0;// Контакт для подключения датчика расстояния
// Возможные значения светодиодов
int vals[9] = {0,1,3,7,15,31,63,127,255};
// Максимальное значение расстояния
int maxVal = 500;
// Минимальное значение расстояния
int minVal = 0;
void setup()
{
// Установить контакты на вывод (OUTPUT)
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 - низкий - начало отправки
shiftOut(SER, CLK, MSBFIRST, vals[distance]); // Старший бит - первый
digitalWrite(LATCH, HIGH);// LATCH - высокий
delay (10);// Скорость анимации
}

Рис. 7.8. Комбинации включенных и выключенных светодиодов и соответствующие им десятичные значения
- 165 -
Загрузите программу на плату Arduino, запустите на выполнение и перемещайте руку вперед-назад перед датчиком расстояния. Вы должны увидеть, что гистограмма реагирует на движение руки. Если устройство работает неправильно, отрегулируйте значения maxVal и minVal, чтобы лучше соответствовать показаниям датчика расстояния. Для контроля значений, которые вы получаете на различных расстояниях, можно инициализировать последовательное соединение в заголовке setup() и вызвать функцию Serial.println(DIST) сразу после выполнения шага analogRead(DIST).
ПРИМЕЧАНИЕ
Для просмотра демонстрационного видеоклипа программы, формирующей гистограмму расстояния, зайдите по адресу http://www.exploringarduino.com/content/ch7. Этот видеоклип доступен также на сайте издательства Wiley.
Резюме
• Как работают сдвиговые регистры.
• Чем отличается последовательная и параллельная передача данных.
• В чем различие между десятичной и двоичной формой представления данных.
• Как создать световую анимацию с помощью сдвигового регистра.
Часть III. Интерфейсы передачи данных
В этой части
Глава 8. Интерфейсная шина I 2C
Глава 9. Интерфейсная шина SPI
Глава 10. Взаимодействие с жидкокристаллическими дисплеями
Глава 11. Беспроводная связь с помощью радиомодулей ХВее
Глава 8. Интерфейсная шина I 2C
Для повторения примеров главы вам понадобятся следующие детали:
плата Arduino Uno;
USB-кабель В (для Uno );
1 красный светодиод;
3 желтых светодиода;
4 зеленых светодиода;
8 резисторов номиналом 220 Ом;
2 резистора номиналом 4,7 кОм;
сдвиговый регистр SN74HC595N в DIP-корпусе;
I 2C датчик температуры TC74A0-5.0VAT;
перемычки;
макетная плата.
На странице http://www.exploringarduino.com/content/ch8 можно загрузить программный код, видеоуроки и другие материалы для данной главы. Кроме того, листинги примеров можно скачать со страницы www.wiley.com/go/exploringarduino в разделе Downloads.
Вы уже знаете, как использовать аналоговые и цифровые вводы-выводы, но как общаться с более сложными устройствами? Плата Arduino способна раскрыть свои новые возможности, взаимодействуя через интерфейсы с множеством внешних модулей. Во многих интегральных схемах реализованы стандартные цифровые протоколы связи, упрощающие обмен данными между микроконтроллером и всевозможными периферийными устройствами. В этой главе рассмотрим шину I 2C.
- 170 -
Шина I 2C обеспечивает устойчивую высокоскоростную двустороннюю связь между устройствами и требует минимального числа контактов ввода-вывода.
К шине I 2C подключено ведущее устройство ( обычно микроконтроллер) и одно или несколько ведомых устройств, которые получают информацию от ведущего. Далее мы опишем протокол I 2C и реализуем его, чтобы связаться с цифровым датчиком температуры, возвращающим результат измерений в градусах, а не в виде произвольного аналогового значения. Опираясь на знания, полученные в предыдущих главах, вы научитесь создавать более сложные проекты.
Читать дальшеИнтервал:
Закладка: