Skip to content
This repository was archived by the owner on Feb 28, 2024. It is now read-only.

Commit b271e98

Browse files
authored
Modified the IOexpander utility
* Modified the IOexpander utility - Added pins initialization to SWITCH_OFF in order to erase any 'memory' effects as required in: #25 - Renamed digitalRead and Digitalwrite to set and read, defined switch ON and OFF in order to be more auto explicative in terms of I/O behavior as requested in: #15 - renamed IOexpander object name as requested in: #12
1 parent d8634b4 commit b271e98

File tree

5 files changed

+62
-40
lines changed

5 files changed

+62
-40
lines changed

examples/Digital_programmable/Digital_programmable.ino

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -25,54 +25,52 @@ void setup() {
2525
Serial.begin(9600);
2626
while (!Serial);
2727

28-
if (!programmable_digital_io.begin()){
28+
if (!digital_programmables.begin()){
2929
Serial.println("GPIO expander initialization fail!!");
3030
}
3131

3232
Serial.println("GPIO expander initialization done");
33-
//Initialize all pins to the default mode
34-
programmable_digital_io.initPins();
35-
programmable_digital_io.setLatch();
33+
digital_programmables.setLatch();
3634
}
3735

3836
void loop() {
39-
writeAll(HIGH);
37+
setAll(SWITCH_ON);
4038
readAll();
4139
delay(1000);
42-
writeAll(LOW);
40+
setAll(SWITCH_OFF);
4341
readAll();
4442
delay(1000);
4543

4644
}
4745

48-
void writeAll(PinStatus status) {
46+
void setAll(PinStatus status) {
4947
// write the status value to each pin
50-
programmable_digital_io.digitalWrite(IO_WRITE_CH_PIN_00, status);
51-
programmable_digital_io.digitalWrite(IO_WRITE_CH_PIN_01, status);
52-
programmable_digital_io.digitalWrite(IO_WRITE_CH_PIN_02, status);
53-
programmable_digital_io.digitalWrite(IO_WRITE_CH_PIN_03, status);
54-
programmable_digital_io.digitalWrite(IO_WRITE_CH_PIN_04, status);
55-
programmable_digital_io.digitalWrite(IO_WRITE_CH_PIN_05, status);
56-
programmable_digital_io.digitalWrite(IO_WRITE_CH_PIN_06, status);
57-
programmable_digital_io.digitalWrite(IO_WRITE_CH_PIN_07, status);
58-
programmable_digital_io.digitalWrite(IO_WRITE_CH_PIN_08, status);
59-
programmable_digital_io.digitalWrite(IO_WRITE_CH_PIN_09, status);
60-
programmable_digital_io.digitalWrite(IO_WRITE_CH_PIN_10, status);
61-
programmable_digital_io.digitalWrite(IO_WRITE_CH_PIN_11, status);
48+
digital_programmables.set(IO_WRITE_CH_PIN_00, status);
49+
digital_programmables.set(IO_WRITE_CH_PIN_01, status);
50+
digital_programmables.set(IO_WRITE_CH_PIN_02, status);
51+
digital_programmables.set(IO_WRITE_CH_PIN_03, status);
52+
digital_programmables.set(IO_WRITE_CH_PIN_04, status);
53+
digital_programmables.set(IO_WRITE_CH_PIN_05, status);
54+
digital_programmables.set(IO_WRITE_CH_PIN_06, status);
55+
digital_programmables.set(IO_WRITE_CH_PIN_07, status);
56+
digital_programmables.set(IO_WRITE_CH_PIN_08, status);
57+
digital_programmables.set(IO_WRITE_CH_PIN_09, status);
58+
digital_programmables.set(IO_WRITE_CH_PIN_10, status);
59+
digital_programmables.set(IO_WRITE_CH_PIN_11, status);
6260
}
6361

6462
void readAll() {
6563
// Reads from input pin. This API returns -1 if you try to read from a write channel.
66-
Serial.println("Pin 00: " + String(programmable_digital_io.digitalRead(IO_READ_CH_PIN_00)));
67-
Serial.println("Pin 01: " + String(programmable_digital_io.digitalRead(IO_READ_CH_PIN_01)));
68-
Serial.println("Pin 02: " + String(programmable_digital_io.digitalRead(IO_READ_CH_PIN_02)));
69-
Serial.println("Pin 03: " + String(programmable_digital_io.digitalRead(IO_READ_CH_PIN_03)));
70-
Serial.println("Pin 04: " + String(programmable_digital_io.digitalRead(IO_READ_CH_PIN_04)));
71-
Serial.println("Pin 05: " + String(programmable_digital_io.digitalRead(IO_READ_CH_PIN_05)));
72-
Serial.println("Pin 06: " + String(programmable_digital_io.digitalRead(IO_READ_CH_PIN_06)));
73-
Serial.println("Pin 07: " + String(programmable_digital_io.digitalRead(IO_READ_CH_PIN_07)));
74-
Serial.println("Pin 08: " + String(programmable_digital_io.digitalRead(IO_READ_CH_PIN_08)));
75-
Serial.println("Pin 09: " + String(programmable_digital_io.digitalRead(IO_READ_CH_PIN_09)));
76-
Serial.println("Pin 10: " + String(programmable_digital_io.digitalRead(IO_READ_CH_PIN_10)));
77-
Serial.println("Pin 11: " + String(programmable_digital_io.digitalRead(IO_READ_CH_PIN_11)));
64+
Serial.println("Pin 00: " + String(digital_programmables.read(IO_READ_CH_PIN_00)));
65+
Serial.println("Pin 01: " + String(digital_programmables.read(IO_READ_CH_PIN_01)));
66+
Serial.println("Pin 02: " + String(digital_programmables.read(IO_READ_CH_PIN_02)));
67+
Serial.println("Pin 03: " + String(digital_programmables.read(IO_READ_CH_PIN_03)));
68+
Serial.println("Pin 04: " + String(digital_programmables.read(IO_READ_CH_PIN_04)));
69+
Serial.println("Pin 05: " + String(digital_programmables.read(IO_READ_CH_PIN_05)));
70+
Serial.println("Pin 06: " + String(digital_programmables.read(IO_READ_CH_PIN_06)));
71+
Serial.println("Pin 07: " + String(digital_programmables.read(IO_READ_CH_PIN_07)));
72+
Serial.println("Pin 08: " + String(digital_programmables.read(IO_READ_CH_PIN_08)));
73+
Serial.println("Pin 09: " + String(digital_programmables.read(IO_READ_CH_PIN_09)));
74+
Serial.println("Pin 10: " + String(digital_programmables.read(IO_READ_CH_PIN_10)));
75+
Serial.println("Pin 11: " + String(digital_programmables.read(IO_READ_CH_PIN_11)));
7876
}

src/AutomationCarrier.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ class ProgrammableDIOClass : public ArduinoIOExpanderClass {
352352
mbed::DigitalOut prog_latch_retry = mbed::DigitalOut(PH_14);
353353
};
354354

355-
extern ProgrammableDIOClass programmable_digital_io;
355+
extern ProgrammableDIOClass digital_programmables;
356356

357357

358358
class DigitalOutputsClass {

src/Objects.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ AnalogOutClass analog_out;
99
EncoderClass encoders;
1010
DigitalOutputsClass digital_outputs;
1111
DigitalInputsClass digital_inputs;
12-
ProgrammableDIOClass programmable_digital_io;
12+
ProgrammableDIOClass digital_programmables;
1313
RtcControllerClass rtc_controller;
1414
}

src/utility/ioexpander/ArduinoIOExpander.cpp

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,13 @@ bool ArduinoIOExpanderClass::begin()
2020
{
2121
Wire.begin();
2222
_tca.initialize();
23-
return _tca.testConnection();
23+
if(!_tca.testConnection()) {
24+
return false;
25+
}
26+
//Initialize all pins to the default mode
27+
initPins();
28+
29+
return true;
2430
}
2531

2632
ArduinoIOExpanderClass::operator bool()
@@ -37,7 +43,7 @@ bool ArduinoIOExpanderClass::pinMode(int pin, PinMode direction)
3743
return true;
3844
}
3945

40-
bool ArduinoIOExpanderClass::digitalWrite(int pin, PinStatus status)
46+
bool ArduinoIOExpanderClass::set(int pin, PinStatus status)
4147
{
4248
if (pin < IO_READ_CH_PIN_00) {
4349
if (status > HIGH)
@@ -49,7 +55,7 @@ bool ArduinoIOExpanderClass::digitalWrite(int pin, PinStatus status)
4955
return false;
5056
}
5157

52-
int ArduinoIOExpanderClass::digitalRead(int pin)
58+
int ArduinoIOExpanderClass::read(int pin)
5359
{
5460
if (pin > IO_READ_CH_PIN_11) {
5561
return _tca.readPin(pin) == true ? 1 : 0;
@@ -59,6 +65,7 @@ int ArduinoIOExpanderClass::digitalRead(int pin)
5965

6066
void ArduinoIOExpanderClass::initPins()
6167
{
68+
PinStatus status = SWITCH_OFF;
6269
pinMode(IO_WRITE_CH_PIN_00, OUTPUT);
6370
pinMode(IO_WRITE_CH_PIN_01, OUTPUT);
6471
pinMode(IO_WRITE_CH_PIN_02, OUTPUT);
@@ -83,6 +90,19 @@ void ArduinoIOExpanderClass::initPins()
8390
pinMode(IO_READ_CH_PIN_09, INPUT);
8491
pinMode(IO_READ_CH_PIN_10, INPUT);
8592
pinMode(IO_READ_CH_PIN_11, INPUT);
93+
94+
set(IO_WRITE_CH_PIN_00, status);
95+
set(IO_WRITE_CH_PIN_01, status);
96+
set(IO_WRITE_CH_PIN_02, status);
97+
set(IO_WRITE_CH_PIN_03, status);
98+
set(IO_WRITE_CH_PIN_04, status);
99+
set(IO_WRITE_CH_PIN_05, status);
100+
set(IO_WRITE_CH_PIN_06, status);
101+
set(IO_WRITE_CH_PIN_07, status);
102+
set(IO_WRITE_CH_PIN_08, status);
103+
set(IO_WRITE_CH_PIN_09, status);
104+
set(IO_WRITE_CH_PIN_10, status);
105+
set(IO_WRITE_CH_PIN_11, status);
86106
}
87107

88108
ArduinoIOExpanderClass Expander;

src/utility/ioexpander/ArduinoIOExpander.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
#include <Wire.h>
2121
#include "TCA6424A.h"
2222

23+
#define SWITCH_ON HIGH
24+
#define SWITCH_OFF LOW
25+
2326
enum {
2427
IO_WRITE_CH_PIN_00 = TCA6424A_P00,
2528
IO_WRITE_CH_PIN_01 = TCA6424A_P01,
@@ -58,13 +61,14 @@ class ArduinoIOExpanderClass {
5861

5962
operator bool();
6063

61-
void initPins();
62-
bool digitalWrite(int pin, PinStatus status);
63-
bool digitalWrite(int pin, int status) { return digitalWrite(pin, (PinStatus)status); };
64+
bool set(int pin, PinStatus status);
65+
bool set(int pin, int status) { return set(pin, (PinStatus)status); };
6466

65-
int digitalRead(int pin);
67+
int read(int pin);
6668
bool pinMode(int pin, PinMode direction);
6769

70+
private:
71+
void initPins();
6872
private:
6973
TCA6424A _tca {};
7074
};

0 commit comments

Comments
 (0)