diff --git a/libraries/Wire/examples/digital_potentiometer_timeout/digital_potentiometer_timeout.ino b/libraries/Wire/examples/digital_potentiometer_timeout/digital_potentiometer_timeout.ino new file mode 100644 index 000000000..61ac5dc4f --- /dev/null +++ b/libraries/Wire/examples/digital_potentiometer_timeout/digital_potentiometer_timeout.ino @@ -0,0 +1,44 @@ +// I2C Digital Potentiometer with timeout +// originally +// by Nicholas Zambetti +// and Shawn Bonkowski + +// Demonstrates use of the Wire library with timeout +// Controls AD5171 digital potentiometer via I2C/TWI + +// Created 7 July 2020 + +// This example code is in the public domain. + +const uint32_t timeout = 5000; // microseconds, 0 = infinite, default = 25000 +const bool reset = true; // true = force TWI reset if timeout occurs, default = false + +#include + +void setup() { + Wire.begin(); // join i2c bus (address optional for master) + Wire.setWireTimeout( timeout, reset ); +} + +byte val = 0; +int count = 0; + +void loop() { + Wire.beginTransmission(44); // transmit to device #44 (0x2c) + // device address is specified in datasheet + Wire.write(byte(0x00)); // sends instruction byte + Wire.write(val); // sends potentiometer value byte + Wire.endTransmission(); // stop transmitting + + if ( Wire.getWireTimeoutFlag() ) { + // handle timeout + Wire.clearWireTimeoutFlag(); + count++; + } + + val++; // increment value + if (val == 64) { // if reached 64th position (max) + val = 0; // start over from lowest value + } + delay(500); +} diff --git a/libraries/Wire/keywords.txt b/libraries/Wire/keywords.txt index 5e3d2b1ca..2e12e9fbe 100644 --- a/libraries/Wire/keywords.txt +++ b/libraries/Wire/keywords.txt @@ -17,6 +17,8 @@ endTransmission KEYWORD2 requestFrom KEYWORD2 onReceive KEYWORD2 onRequest KEYWORD2 +setWireTimeout KEYWORD2 +getWireTimeoutFlag KEYWORD2 ####################################### # Instances (KEYWORD2)