Изучаем Arduino: инструметы и методы технического волшебства - [42]

Шрифт
Интервал

{

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 и реализуем его, чтобы связаться с цифровым датчиком температуры, возвращающим результат измерений в градусах, а не в виде произвольного аналогового значения. Опираясь на знания, полученные в предыдущих главах, вы научитесь создавать более сложные проекты.

ПРИМЕЧАНИЕ

Вы можете шаг за шагом пройти данную главу, воспользовавшись демонстрационным видеоуроком, расположенным по адресу http://www.jeremyblum.com/2011/02/13/arduino-tutorial-7-I>2C-and-processing/[10]. Этот видеоклип доступен и на сайте издательства Wiley.

8.1. История создания протокола I>2C


Чтобы уяснить, почему популярен тот или иной протокол связи, лучше всего посмотреть, как он развивался с течением времени. Протокол I>2C был предложен фирмой Philips в начале 1980-х годов для обеспечения низкоскоростной связи между различными интегральными микросхемами. В 1990 году этот протокол был стандартизирован и другие компании начали его использовать, выпуская свои собственные совместимые чипы. Протокол часто называют "двухпроводным", поскольку связь осуществляется по двум шинам: линии синхронизации и линии передачи данных. Хотя не все двухпроводные протоколы, строго говоря, могут называться I>2C (из-за неоплаты права на использование названия), но, как правило, их называют I>2C-устройствами. Так же марку KLEENEX® часто ставят даже на тех тканях, которые не производит эта фирма. Если в описании какого-то устройства сказано, что оно поддерживает "двухпроводной" протокол связи, можно быть уверенным, что оно будет работать так, как описано в этой главе.

8.2. Схема подключения устройств I>2C


Подключение устройств по протоколу связи I>2C иллюстрирует рис. 8.1. От предыдущих способов цифровой передачи данных, рассмотренных в этой книге, I>2C отличается тем, что несколько устройств используют одни и те же линии связи: шину синхронизации сигнала (SCL) и двунаправленную шину данных (SDA). Последняя служит для отправки данных от ведущего устройства к ведомым. Обратите внимание, что на каждой шине I