Посмотр рубрик

Wire

Wire - отправка и чтение данных по I2C. Наследует класс Stream.

Система #

begin #

void begin()
void begin(uint8_t address)
Запустить шину. Если указать адрес address - работать как Slave-устройство, без адреса - как Master-устройство для опроса других устройств. Настройка пинов и подтяжек зависит от ядра, в классических Arduino пины переключаются в INPUT_PULLUP. Для надёжной работы I2C обычно нужны внешние подтягивающие резисторы. Типовая частота по умолчанию - 100 кГц.

end #

void end()
Завершить работу

setClock #

void setClock(uint32_t hz)
Установить частоту шины в Гц. Базовая 100000, быстрая 400000. Некоторые устройства поддерживают более низкую и более высокую частоту.

onReceive #

void onReceive(void (*)(int data))
Подключить функцию, которая будет вызываться при поступлении данных от master устройства

onRequest #

void onRequest(void (*)(void))
Подключить функцию, которая будет вызываться при запросе данных от master устройства

setWireTimeout #

void setWireTimeout(uint32_t timeout = 25000, bool reset_with_timeout = false)
Установить таймаут timeout операций в Master-режиме, в микросекундах. reset_with_timeout - перезапустить аппаратный модуль Wire при таймауте. В AVR-реализации вызов также сбрасывает флаг предыдущего таймаута.

Функция поддерживается не во всех Arduino-ядрах

getWireTimeoutFlag #

bool getWireTimeoutFlag()
Прочитать флаг таймаута

clearWireTimeoutFlag #

void clearWireTimeoutFlag()
Сбросить флаг таймаута

Чтение #

read, peek, available #

Наследуется из Stream

requestFrom #

uint8_t requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop = true)
Запросить quantity байт с устройства по адресу address для дальнейшего чтения. sendStop:

  • true - отправить сигнал стоп и освободить линию
  • false - отправить сигнал на перезапуск и не отключаться

Вернёт количество принятых байт. Оно может быть меньше quantity, а максимальный размер ограничен буфером конкретной реализации Wire.

Отправка #

write #

size_t write(uint8_t)
size_t write(const uint8_t *buffer, size_t size)
Отправить данные

beginTransmission #

void beginTransmission(uint8_t address)
Начать передачу данных устройству с адресом address. Дальше нужно отправлять данные через write (пишутся в буфер).

endTransmission #

uint8_t endTransmission(uint8_t sendStop = true)
Передать данные из буфера устройству, с которым была начата передача в beginTransmission(). sendStop:

  • true - отправить сигнал стоп и освободить линию
  • false - отправить сигнал на перезапуск и не отключаться

Вернёт:

  • 0 - успешная отправка
  • 1 - данные не поместились в буфер
  • 2 - получен NACK при отправке адреса
  • 3 - получен NACK при отправке данных
  • 4 - другие ошибки
  • 5 - таймаут в ядрах, где поддерживается такой код

Обработчики onReceive() и onRequest() на многих платформах вызываются из прерывания, поэтому должны быть короткими и не использовать блокирующий код

Полезные страницы #


Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Прокрутить вверх