Skip to content

Commit

Permalink
IOExpander: add readAll() API
Browse files Browse the repository at this point in the history
  • Loading branch information
facchinm authored Jun 8, 2022
1 parent 155bb20 commit a8f1623
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 11 deletions.
19 changes: 10 additions & 9 deletions examples/Digital_programmable/Digital_input/Digital_input.ino
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ void setup() {
}

void loop() {
//Reads and Prints all channels and
//Reads and Prints all channels (in a single operation)
readAll();

//Read one-by-one each channel and print them one-by-one
Expand Down Expand Up @@ -62,13 +62,14 @@ void loop() {
}

uint8_t readAll() {
Serial.println("CH00: " + String(digital_inputs.read(DIN_READ_CH_PIN_00)));
Serial.println("CH01: " + String(digital_inputs.read(DIN_READ_CH_PIN_01)));
Serial.println("CH02: " + String(digital_inputs.read(DIN_READ_CH_PIN_02)));
Serial.println("CH03: " + String(digital_inputs.read(DIN_READ_CH_PIN_03)));
Serial.println("CH04: " + String(digital_inputs.read(DIN_READ_CH_PIN_04)));
Serial.println("CH05: " + String(digital_inputs.read(DIN_READ_CH_PIN_05)));
Serial.println("CH06: " + String(digital_inputs.read(DIN_READ_CH_PIN_06)));
Serial.println("CH07: " + String(digital_inputs.read(DIN_READ_CH_PIN_07)));
uint32_t inputs = digital_inputs.readAll();
Serial.println("CH00: " + String((inputs & (1 << DIN_READ_CH_PIN_00)) >> DIN_READ_CH_PIN_00));
Serial.println("CH01: " + String((inputs & (1 << DIN_READ_CH_PIN_01)) >> DIN_READ_CH_PIN_01));
Serial.println("CH02: " + String((inputs & (1 << DIN_READ_CH_PIN_02)) >> DIN_READ_CH_PIN_02));
Serial.println("CH03: " + String((inputs & (1 << DIN_READ_CH_PIN_03)) >> DIN_READ_CH_PIN_03));
Serial.println("CH04: " + String((inputs & (1 << DIN_READ_CH_PIN_04)) >> DIN_READ_CH_PIN_04));
Serial.println("CH05: " + String((inputs & (1 << DIN_READ_CH_PIN_05)) >> DIN_READ_CH_PIN_05));
Serial.println("CH06: " + String((inputs & (1 << DIN_READ_CH_PIN_06)) >> DIN_READ_CH_PIN_06));
Serial.println("CH07: " + String((inputs & (1 << DIN_READ_CH_PIN_07)) >> DIN_READ_CH_PIN_07));
Serial.println();
}
8 changes: 8 additions & 0 deletions src/utility/ioexpander/ArduinoIOExpander.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,14 @@ int ArduinoIOExpanderClass::read(int pin)
return -1;
}

uint32_t ArduinoIOExpanderClass::readAll()
{
uint8_t banks[3];
_tca.readAll(banks);
return *(uint32_t*)banks;
}


void ArduinoIOExpanderClass::initPins()
{

Expand Down
1 change: 1 addition & 0 deletions src/utility/ioexpander/ArduinoIOExpander.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ class ArduinoIOExpanderClass {
bool set(int pin, int status) { return set( pin, (PinStatus)status); };

int read(int pin);
uint32_t readAll();
bool pinMode(int pin, PinMode direction);

private:
Expand Down
4 changes: 2 additions & 2 deletions src/utility/ioexpander/TCA6424A.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ uint8_t TCA6424A::readBank(uint8_t bank) {
* @param banks Container for all bank's pin values (P00-P27)
*/
void TCA6424A::readAll(uint8_t *banks) {
I2Cdev::readBytes(devAddr, TCA6424A_RA_INPUT0, 3, banks);
I2Cdev::readBytes(devAddr, TCA6424A_RA_INPUT0 | TCA6424A_AUTO_INCREMENT, 3, banks);
}
/** Get all pin logic levels from all banks.
* Reads into individual 1-byte containers.
Expand All @@ -96,7 +96,7 @@ void TCA6424A::readAll(uint8_t *banks) {
* @param bank2 Container for Bank 2's pin values (P20-P27)
*/
void TCA6424A::readAll(uint8_t *bank0, uint8_t *bank1, uint8_t *bank2) {
I2Cdev::readBytes(devAddr, TCA6424A_RA_INPUT0, 3, buffer);
I2Cdev::readBytes(devAddr, TCA6424A_RA_INPUT0 | TCA6424A_AUTO_INCREMENT, 3, buffer);
*bank0 = buffer[0];
*bank1 = buffer[1];
*bank2 = buffer[2];
Expand Down

0 comments on commit a8f1623

Please sign in to comment.