Arduino:Примеры/SFRRangerReader
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Считывание данных с ультразвукового дальномера Devantech при помощи библиотеки Wire [1]
Этот пример демонстрирует, как при помощи Arduino-библиотеки Wire считывать данные с Devantech SRFxx, ультразвукового дальномера, коммуницирующего через синхронный последовательный протокол I2C.
В протоколе I2C для отправки и передачи данных используется два контакта: Serial Clock (SCL), через который Arduino отбивает тактовый импульс, и Serial Data (SDA), по которому и проходит обмен данными между девайсами.
Если тактовый импульс меняется с LOW на HIGH (этот сценарий известен как «положительный фронт тактового сигнала»), Arduino через SDA-линию отсылает I2C-девайсу бит информации, содержащий адрес конкретного устройства, а также запрос на отправку данных. Если тактовый импульс меняется с HIGH на LOW («отрицательный фронт тактового сигнала»), «разбуженный» I2C-девайс в ответ на запрос отсылает Arduino необходимые данные по той же SDA-линии.
Поскольку I2C-протокол позволяет всем подключенным девайсам иметь свой уникальный адрес, а оба устройства (и ведущее, и ведомое) обмениваются информацией по одной и той же линии, Arduino может коммуницировать с несколькими девайсами (но по очереди), при этом используя лишь два контакта микроконтроллера.
Необходимое оборудование
- Плата Arduino;
- Ультразвуковой дальномер Devantech SRFxx (модели SRF02, SRF08 или SRF10);
- Конденсатор на 1100 микрофарад;
- Макетная плата Breadboard;
- Провода-перемычки;
Цепь
SDA-контакт дальномера подключите к 4-ому аналоговому контакту Arduino, а SCL-контакт – к 5-ому аналоговому контакту. Чтобы запитать дальномер, подсоедините его к 5V на Arduino, но с параллельным подключением через конденсатор на 1100 микрофарад, чтобы смягчить подаваемую для питания мощность.
Схема
Код
Если вы используете на одной и той же линии не один, а два дальномера, убедитесь, что они не используют один и тот же адрес. Инструкцию по переадресовке ультразвуковых дальномеров можно найти в нижней части кода, приложенного ниже:
// Пример с ультразвуковым дальномером Devantech SRF10 или SRF08, работающим через I2C,
// от Николаса Замбетти (Nicholas Zambetti, http://www.zambetti.com)
// и Джеймса Тиченора (James Tichenor, http://www.jamestichenor.net).
// Демонстрирует использование библиотеки Wire. Считывает данные от
// ультразвукового дальномера Devantech SFR08 и SFR10.
// Создан 29 апреля 2006.
// Этот код не защищен авторским правом.
#include <Wire.h>
void setup()
{
Wire.begin(); // подключаем шину I2C (для ведущего устройства адрес опционален)
Serial.begin(9600); // запускаем последовательную передачу данных на скорости 9600 бит в секунду
}
int reading = 0;
void loop()
{
// Шаг 1. Инструктируем датчик о том, как ему считывать эхо:
Wire.beginTransmission(112); // передаем девайсу #112 (0x70);
// адрес, указанный в «даташите» – это 224 (0xE0),
// но в I2C используются «верхние» 7 бит, так что получается «112»
Wire.write(byte(0x00)); // настраиваем регистровый указатель на командный регистр (0x00)
Wire.write(byte(0x50)); // приказываем датчику измерять в «дюймах» (0x50)
// для сантиметров используйте 0x51
// для микросекунд используйте 0x52
Wire.endTransmission(); // останавливаем передачу данных
// Шаг 2. Ждем, когда начнется считывание:
delay(70); // в «даташите» указано, что нужно как минимум 65 миллисекунд
// Шаг 3. Инструктируем датчик о том, как возвращать считанное эхо:
Wire.beginTransmission(112); // передаем данные девайсу #112
Wire.write(byte(0x02)); // отправляем байт с инструкцией
Wire.endTransmission(); // останавливаем передачу данных
// Шаг 4. Запрашиваем у датчика считанные данные:
Wire.requestFrom(112, 2); // запрашиваем 2 байта у ведомого устройства с адресом #112
// Шаг 5. Получаем данные от датчика:
if(2 <= Wire.available()) // если было получено два байта
{
reading = Wire.read(); // принимаем «верхний» байт (он перезапишет предыдущее считывание)
reading = reading << 8; // «верхним» байтом будут «верхние» 8 бит
reading |= Wire.read(); // принимаем «нижний» байт, как «нижние» 8 бит
Serial.println(reading); // выводим считанные данные на Serial Monitor
}
delay(250); // пользователь – не робот :) поэтому немного ждем, чтобы он успел прочитать то, что мы показали на Serial Monitor
}
/*
// Нижеследующий код меняет адрес ультразвукового дальномера Devantech (SRF10 или SRF08).
// Пример использования – changeAddress(0x70, 0xE6);
void changeAddress(byte oldAddress, byte newAddress)
{
Wire.beginTransmission(oldAddress);
Wire.write(byte(0x00));
Wire.write(byte(0xA0));
Wire.endTransmission();
Wire.beginTransmission(oldAddress);
Wire.write(byte(0x00));
Wire.write(byte(0xAA));
Wire.endTransmission();
Wire.beginTransmission(oldAddress);
Wire.write(byte(0x00));
Wire.write(byte(0xA5));
Wire.endTransmission();
Wire.beginTransmission(oldAddress);
Wire.write(byte(0x00));
Wire.write(newAddress);
Wire.endTransmission();
}
*/
См.также
- [Reference/WireBegin | Wire.begin()]]
- Wire.beginTransmission()
- Wire.endTransmission()
- Wire.send()
- Wire.RequestFrom()
- Wire.receive()
- Wire Library
- digital_potentiometer
- Master Reader/Slave Writer
- Master Writer/Slave receiver
Внешние ссылки
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
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino