Arduino:Примеры/MasterReader
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Ведущий считывает/ведомый отправляет[1]
В некоторых ситуациях может быть полезно использовать не одну, а две (или больше!) платы Arduino, чтобы они обменивались информацией друг с другом. В этом примере две Arduino будут запрограммированы таким образом, чтобы «общаться» друг с другом по принципу «ведущий считывает / ведомый отправляет» через синхронный последовательный протокол I2C. Для того, чтобы выполнить эту задачу, нам понадобятся ряд функций из библиотеки Wire. Плата Arduino 1 (т.е. ведущее устройство) будет запрограммирована таким образом, чтобы делать запрос, а затем считывать 6 байтов, присланных от Arduino 2 (т.е. от ведомого устройства) с уникальным адресом. Кода сообщение будет получено, его можно будет наблюдать в окне Serial Monitor.
В протоколе I2C для отправки и передачи данных используется два контакта: Serial Clock (SCL), через который Arduino отбивает тактовый импульс, и Serial Data (SDA), по которому и проходит обмен данными между девайсами.
Если тактовый импульс меняется с LOW на HIGH (этот сценарий известен как «положительный фронт тактового сигнала»), Arduino через SDA-линию отсылает I2C-девайсу бит информации, содержащий адрес конкретного устройства, а также запрос на отправку данных. Если тактовый импульс меняется с HIGH на LOW («отрицательный фронт тактового сигнала»), «разбуженный» I2C-девайс в ответ на запрос отсылает Arduino необходимые данные по той же SDA-линии.
Поскольку I2C-протокол позволяет всем подключенным девайсам иметь свой уникальный адрес, а оба устройства (и ведущее, и ведомое) обмениваются информацией по одной и той же линии, Arduino может коммуницировать с несколькими девайсами (но по очереди), при этом используя лишь два своих контакта.
Необходимое оборудование
- Две платы Arduino;
- Провода-перемычки;
Цепь
4-ый (SDA) и 5-ый (SCL) контакты ведущей Arduino 1 подключите к 4-ому и 5-ому контактам ведомой Arduino 2. Также убедитесь, что контакты с «землей» у обеих плат тоже подключены друг к другу. Кроме того, чтобы иметь возможность запустить последовательную передачу данных, ведущая Arduino 1 должна быть через USB подключена к компьютеру.
Если независимое питание плат сделать затруднительно, подключите 5V-контакт ведущей Arduino к VIN-контакту на ведомой.
Схема
Код
Код для ведущей платы, т.е. для Arduino 1:
// Пример «Ведущая считывающая плата; библиотека Wire»
// от Николаса Замбетти (Nicholas Zambetti, http://www.zambetti.com)
// Демонстрирует использование библиотеки Wire.
// Считывает данные от ведомого устройства через I2C/TWI.
// Работает в паре с примером «Ведомая отправляющая плата, библиотека // Wire».
// Создан 29 марта 2006.
// Этот пример не защищен авторским правом.
#include <Wire.h>
void setup()
{
Wire.begin(); // запускаем шину I2C (для ведомой платы адрес опционален)
Serial.begin(9600); // запускаем последовательную передачу данных
}
void loop()
{
Wire.requestFrom(2, 6); // запрашиваем 6 байт у ведомой платы #2
while(Wire.available()) // ведомая плата может отправить меньше, чем мы запрашиваем
{
char c = Wire.read(); // отсылаем байт как char
Serial.print(c); // отображаем присланный символ на Serial Monitor
}
delay(500);
}
Код для ведомой платы, т.е. для Arduino 2:
// Пример «Ведомая отправляющая плата, библиотека Wire»
// от Николаса Замбетти (Nicholas Zambetti, http://www.zambetti.com).
// Демонстрирует использование библиотеки Wire.
// Отправляет данные ведущему устройству через I2C/TWI.
// Работает в паре с примером «Ведущая считывающая плата; библиотека Wire».
// Создан 29 марта 2006.
// Этот код не защищен авторским правом.
#include <Wire.h>
void setup()
{
Wire.begin(2); // подключаем шину I2C с адресом #2
Wire.onRequest(requestEvent); // зарегистрированное событие, которое будет возникать в ответ на вопрос
}
void loop()
{
delay(100);
}
// Эта пользовательская функция будет выполняться всякий раз,
когда ведущее устройство будет делать запрос данных.
// Она зарегистрирована как событие (см. блок setup).
void requestEvent()
{
Wire.write("hello "); // отвечаем сообщением из 6 байтов, как ведущая плата того и ждет
}
См.также
- Wire.begin()
- Wire.RequestFrom()
- Wire.receive()
- Wire.send()
- Wire.onRequest()
- Wire Library
- digital_potentiometer
- 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