Arduino:Примеры/MasterWriter
Содержание | Знакомство с 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-линии.
Начальные 8 бит (т.е. 8 тактовых импульсов) от ведущего устройства к ведомому содержат адрес девайса, от которого ведущее устройство хочет получить данные. Последующие биты содержат адрес памяти у ведомого устройства, откуда ведущее устройство хочет сосчитать данные или записать их туда.
У каждого ведомого устройства есть собственный уникальный адрес, причем и ведущее устройство, и ведомое поочередно коммуницируют по одной и той же линии. Таким образом, ваша Arduino может «общаться» с несколькими девайсами или другими Arduino, используя лишь два своих контакта и уникальные адреса других устройств.
Необходимое оборудование
- Две платы Arduino;
- Провода-перемычки;
Цепь
5-ый (SCL) и 4-ый (SDA) контакты на ведущей Arduino 1 подключите к 5-ому и 4-ому контактам на ведомой Arduino 2. Кроме того, убедитесь, что контакты с «землей» у обеих плат тоже подключены друг к другу. Также, чтобы иметь возможность запустить последовательную передачу данных, ведомая Arduino должна быть через 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 (для ведущего устройства адрес опционален)
}
byte x = 0;
void loop()
{
Wire.beginTransmission(4); // начинаем передачу девайсу #4
Wire.write("x is "); // отправляем 5 байт
Wire.write(x); // отправляем 1 байт
Wire.endTransmission(); // останавливаем передачу данных
x++;
delay(500);
}
Код для ведомой платы, т.е. для Arduino 2:
// Пример «Ведомая считывающая плата; библиотека Wire»
// от Николаса Замбетти (Nicholas Zambetti, http://www.zambetti.com).
// Демонстрирует использование библиотеки Wire.
// Получает данные от ведущей платы через I2C/TWI.
// Работает в паре с примером «Ведущая отправляющая плата; библиотека Wire».
// Создан 29 марта 2006
// Этот код не защищен авторским правом.
#include <Wire.h>
void setup()
{
Wire.begin(4); // подключаем шину I2C с адресом #4
Wire.onReceive(receiveEvent); // регистрируем событие
Serial.begin(9600); // запускаем последовательную передачу данных, чтобы отображать данные на Serial Monitor
}
void loop()
{
delay(100);
}
// Эта функция будет выполнятся всякий раз, когда от ведущей платы
// будут получены какие-либо данные.
// Она зарегистрирована как событие (см. блок setup):
void receiveEvent(int howMany)
{
while(1 < Wire.available()) // пробегаемся по всем, кроме последнего
{
char c = Wire.read(); // получаем байт как символ
Serial.print(c); // показываем символ на Serial Monitor
}
int x = Wire.read(); // получаем байт как целое число
Serial.println(x); // показываем это целое число на Serial Monitor
}
См.также
- Wire.begin()
- Wire.beginTransmission()
- Wire.endTransmission()
- Wire.send()
- Wire.OnReceive()
- Wire.available)
- Wire Library
- digital_potentiometer
- master_reader
Внешние ссылки
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