From b2ee34761b3f1768b31b9d5c812e9612d943d1bc Mon Sep 17 00:00:00 2001 From: Brian Helterline Date: Thu, 9 Jul 2020 14:23:56 -0700 Subject: [PATCH 1/3] Added new Wire functions into libraries/Wire/keywords.txt --- libraries/Wire/keywords.txt | 2 ++ 1 file changed, 2 insertions(+) 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) From 08c383b046b4ea442ab8de075d54ecb6fb40d3df Mon Sep 17 00:00:00 2001 From: Brian Helterline Date: Thu, 9 Jul 2020 14:33:36 -0700 Subject: [PATCH 2/3] Added Wire/examples/digital_potentiometer_timeout/digital_potentiometer_timeout.ino example --- .../digital_potentiometer_timeout.ino | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 libraries/Wire/examples/digital_potentiometer_timeout/digital_potentiometer_timeout.ino 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..891f39915 --- /dev/null +++ b/libraries/Wire/examples/digital_potentiometer_timeout/digital_potentiometer_timeout.ino @@ -0,0 +1,43 @@ +// 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 + count++; + } + + val++; // increment value + if (val == 64) { // if reached 64th position (max) + val = 0; // start over from lowest value + } + delay(500); +} From 93301a1c8226fa601b9bf732a079b23729a7cd0e Mon Sep 17 00:00:00 2001 From: Brian Helterline Date: Mon, 4 Oct 2021 11:54:41 -0700 Subject: [PATCH 3/3] Update digital_potentiometer_timeout.ino Have to clear Timeout flag in user code if it ever gets set --- .../digital_potentiometer_timeout.ino | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/Wire/examples/digital_potentiometer_timeout/digital_potentiometer_timeout.ino b/libraries/Wire/examples/digital_potentiometer_timeout/digital_potentiometer_timeout.ino index 891f39915..61ac5dc4f 100644 --- a/libraries/Wire/examples/digital_potentiometer_timeout/digital_potentiometer_timeout.ino +++ b/libraries/Wire/examples/digital_potentiometer_timeout/digital_potentiometer_timeout.ino @@ -32,6 +32,7 @@ void loop() { if ( Wire.getWireTimeoutFlag() ) { // handle timeout + Wire.clearWireTimeoutFlag(); count++; }