- Библиотеки
- Операторы
- Sketch
- Управляющие операторы
- Синтаксис
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Указатели доступа
- Битовые операторы
- Составные операторы
- Данные
- Типы данных
- Преобразование типов данных
- Область видимости переменных и квалификаторы
- Утилиты
- Функции
- Цифровой ввод/вывод
- Аналоговый вход/выход
- Расширенный ввод/вывод
- Время
- Математические функции
- Тригонометрические функции
- Символы
- Случайные числа
- Биты и байты
- Внешние Прерывания
- Прерывания
- Функции передачи данных
- Wire.setWireTimeout()
- Функции
Wire.setWireTimeout()
Описание
Устанавливает тайм-аут для передачи в режиме Ведущего.
Примечание
эти тайм-ауты почти всегда указывают на основную проблему, такую как неправильное поведение устройств, шум, недостаточное экранирование или другие проблемы с электричеством. Эти тайм-ауты предотвратят зависание вашего скетча, но не решат эти проблемы. В таких ситуациях часто (также) происходит повреждение данных, которое не приводит к тайм-ауту или другой ошибке и остается незамеченным. Поэтому, когда происходит тайм-аут, вполне вероятно, что некоторые данные, ранее прочитанные или записанные, также повреждены. Могут потребоваться дополнительные меры для более надежного обнаружения таких проблем (например, контрольные суммы или обратное чтение записанных значений) и устранения их (например, полный сброс системы). Этот тайм-аут и такие дополнительные меры следует рассматривать как последнюю линию защиты, когда, возможно, вместо этого следует устранить основную причину.
Синтаксис
Wire.setWireTimeout(timeout, reset_on_timeout)
Wire.setWireTimeout()
Параметры
timeout a timeout: тайм-аут в микросекундах, если ноль, то проверка тайм-аута отключена
reset_on_timeout: если true, то проводное оборудование будет автоматически перезагружено по тайм-ауту.
Когда эта функция вызывается без параметров, настраивается время ожидания по умолчанию, которого должно быть достаточно для предотвращения зависаний в типичной конфигурации с одним Ведущим.
Возвращаемые значения
нет
Пример
#include <Wire.h>
void setup() {
Wire.begin(); // join i2c bus (address optional for master)
#if defined(WIRE_HAS_TIMEOUT)
Wire.setWireTimeout(3000 /* us */, true /* reset_on_timeout */);
#endif
}
byte x = 0;
void loop() {
/* First, send a command to the other device */
Wire.beginTransmission(8); // transmit to device #8
Wire.write(123); // send command
byte error = Wire.endTransmission(); // run transaction
if (error) {
Serial.println("Error occured when writing");
if (error == 5)
Serial.println("It was a timeout");
}
delay(100);
/* Then, read the result */
#if defined(WIRE_HAS_TIMEOUT)
Wire.clearWireTimeoutFlag();
#endif
byte len = Wire.requestFrom(8, 1); // request 1 byte from device #8
if (len == 0) {
Serial.println("Error occured when reading");
#if defined(WIRE_HAS_TIMEOUT)
if (Wire.getWireTimeoutFlag())
Serial.println("It was a timeout");
#endif
}
delay(100);
}