setWireTimeout()

Leírás

Beállítja az időkorlátot a Wire átvitelekhez master módban.

Megjegyzés: ezek az időtúllépések szinte mindig valamilyen mögöttes problémát jeleznek, például rosszul működő eszközöket, zajt, nem megfelelő árnyékolást vagy egyéb elektromos problémákat. Ezek az időtúllépések megakadályozzák a vázlat bezáródását, de nem oldják meg ezeket a problémákat. Ilyen helyzetekben gyakran (is) fordul elő adatsérülés, amely nem eredményez időtúllépést vagy egyéb hibát, és észrevétlen marad. Ha tehát időtúllépés történik, akkor valószínűleg néhány korábban olvasott vagy írt adat is megsérül. További intézkedésekre lehet szükség az ilyen problémák megbízhatóbb észleléséhez (pl. ellenőrző összegek vagy írott értékek visszaolvasása) és helyreállításuk (például teljes rendszer-visszaállítás). Ezt az időtúllépést és az ilyen további intézkedéseket az utolsó védelmi vonalnak kell tekinteni, és ha lehetséges, inkább a kiváltó okot kell megszüntetni.

Szintaxis

Wire.setWireTimeout(timeout, reset_on_timeout)
Wire.setWireTimeout()

Paraméterek

timeout: időtúllépés mikroszekundumban, ha nulla, akkor az időtúllépés ellenőrzése le van tiltva.
reset_on_timeout: ha true, akkor a Wire hardver automatikusan visszaáll az időtúllépéskor.

Ha ezt a függvényt paraméterek nélkül hívják meg, akkor egy alapértelmezett időtúllépés kerül konfigurálásra, amely elegendő ahhoz, hogy megakadályozza a leállásokat egy tipikus egyetlen-master konfigurációban.

Visszatérési érték

Nincs.

Példa

#include <Wire.h>

void setup() {
  Wire.begin(); // Csatlakozás I2C buszhoz (a cím opcionális a masterhez)
  #if defined(WIRE_HAS_TIMEOUT)
    Wire.setWireTimeout(3000 /* mikros. */, true /* reset_on_timeout */);
  #endif
}

byte x = 0;

void loop() {
  /* Először küldjön parancsot a másik eszközre */
  Wire.beginTransmission(8); // továbbítja a 8-as eszközre
  Wire.write(123);           // parancs küldése
  byte error = Wire.endTransmission(); // futtassa a tranzakciót
  if (error) {
    Serial.println("Error occured when writing");
    if (error == 5)
      Serial.println("It was a timeout");
  }

  delay(100);

  /* Aztán olvassa az eredményt */
  #if defined(WIRE_HAS_TIMEOUT)
  Wire.clearWireTimeoutFlag();
  #endif
  byte len = Wire.requestFrom(8, 1); // kérjen 1 bájtot a 8-as eszköztől
  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);
}