Инструкции

Справочный раздел

В этом разделе Вы найдетё инструкции, справочники, и всевозможные хелпы по использованию программного обеспечения.

Разделы инструкций

В сети

Пользователей: 130
Из них просматривают:
Аналоги: 23. Даташиты: 16. Инструкции: 13. Остальное: 4. Форум: 74.
Участников: 2
Гостей: 128

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.
Оглавление

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);
}

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.

Разное

Интересно

Наличие высокого напряжения на присоске можно проверить отверткой, соединенной с корпусом через резистор 3-5 МОм
Наличие резистора обязательно, так как без него из-за большого тока можно повредить умножитель или строчный трансформатор типа ТДКС.

Похожие инструкции