From 011eb1b5f57888923e6bf5230680253192533c62 Mon Sep 17 00:00:00 2001 From: Renzo Date: Mon, 13 Nov 2017 21:55:25 +0100 Subject: [PATCH] Fix on readAll --- PCF8574.cpp | 18 ++++++------ examples/05_readAll_Interrupt.ino | 48 +++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 9 deletions(-) create mode 100644 examples/05_readAll_Interrupt.ino diff --git a/PCF8574.cpp b/PCF8574.cpp index 111b190..1bf1b5a 100644 --- a/PCF8574.cpp +++ b/PCF8574.cpp @@ -176,16 +176,16 @@ PCF8574::DigitalInput PCF8574::digitalReadAll(void){ DEBUG_PRINT("Buffer value "); DEBUG_PRINTLN(byteBuffered, BIN); - if (bit(0)&readMode>0) digitalInput.p0 = (byteBuffered&bit(0)>0)?HIGH:LOW; - if (bit(1)&readMode>0) digitalInput.p1 = (byteBuffered&bit(1)>0)?HIGH:LOW; - if (bit(2)&readMode>0) digitalInput.p2 = (byteBuffered&bit(2)>0)?HIGH:LOW; - if (bit(3)&readMode>0) digitalInput.p3 = (byteBuffered&bit(3)>0)?HIGH:LOW; - if (bit(4)&readMode>0) digitalInput.p4 = (byteBuffered&bit(4)>0)?HIGH:LOW; - if (bit(5)&readMode>0) digitalInput.p5 = (byteBuffered&bit(5)>0)?HIGH:LOW; - if (bit(6)&readMode>0) digitalInput.p6 = (byteBuffered&bit(6)>0)?HIGH:LOW; - if (bit(7)&readMode>0) digitalInput.p7 = (byteBuffered&bit(7)>0)?HIGH:LOW; + if ((bit(0) & readMode)>0) digitalInput.p0 = ((byteBuffered & bit(0))>0)?HIGH:LOW; + if ((bit(1) & readMode)>0) digitalInput.p1 = ((byteBuffered & bit(1))>0)?HIGH:LOW; + if ((bit(2) & readMode)>0) digitalInput.p2 = ((byteBuffered & bit(2))>0)?HIGH:LOW; + if ((bit(3) & readMode)>0) digitalInput.p3 = ((byteBuffered & bit(3))>0)?HIGH:LOW; + if ((bit(4) & readMode)>0) digitalInput.p4 = ((byteBuffered & bit(4))>0)?HIGH:LOW; + if ((bit(5) & readMode)>0) digitalInput.p5 = ((byteBuffered & bit(5))>0)?HIGH:LOW; + if ((bit(6) & readMode)>0) digitalInput.p6 = ((byteBuffered & bit(6))>0)?HIGH:LOW; + if ((bit(7) & readMode)>0) digitalInput.p7 = ((byteBuffered & bit(7))>0)?HIGH:LOW; - if (readMode & byteBuffered>0){ + if ((readMode & byteBuffered)>0){ byteBuffered = ~readMode & byteBuffered; DEBUG_PRINT("Buffer hight value readed set readed "); DEBUG_PRINTLN(byteBuffered, BIN); diff --git a/examples/05_readAll_Interrupt.ino b/examples/05_readAll_Interrupt.ino new file mode 100644 index 0000000..253218b --- /dev/null +++ b/examples/05_readAll_Interrupt.ino @@ -0,0 +1,48 @@ +#include "Arduino.h" +#include "PCF8574.h" + +// For arduino uno only pin 1 and 2 are interrupted +#define ARDUINO_UNO_INTERRUPTED_PIN 2 + +// Function interrupt +void keyChangedOnPCF8574(); + +// Set i2c address +PCF8574 pcf8574(0x39, ARDUINO_UNO_INTERRUPTED_PIN, keyChangedOnPCF8574); +unsigned long timeElapsed; +void setup() +{ + Serial.begin(115200); + + pcf8574.pinMode(P0, OUTPUT); + pcf8574.pinMode(P1, INPUT); + pcf8574.pinMode(P2, INPUT); + pcf8574.begin(); + + Serial.println("START"); + + timeElapsed = millis(); +} + +bool keyChanged = false; +void loop() +{ + if (keyChanged){ + PCF8574::DigitalInput di = pcf8574.digitalReadAll(); + Serial.print("READ VALUE FROM PCF P1: "); + Serial.print(di.p0); + Serial.print(" - "); + Serial.print(di.p1); + Serial.print(" - "); + Serial.print(di.p2); + Serial.print(" - "); + Serial.println(di.p3); +// delay(5); + keyChanged= false; + } +} + +void keyChangedOnPCF8574(){ + // Interrupt called (No Serial no read no wire in this function, and DEBUG disabled on PCF library) + keyChanged = true; +}