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

Commit c66f3bc

Browse files
authored
Digital in gpio expander support
added support for digital in io expander and removed useless API from temp prorb class
1 parent 5c48c14 commit c66f3bc

File tree

8 files changed

+128
-80
lines changed

8 files changed

+128
-80
lines changed

src/AutomationCarrier.h

+22-32
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,22 @@ namespace automation {
1515

1616
class RTDClass {
1717
public:
18-
void setTH() {
19-
rtd_th = 1;
20-
}
21-
void resetTH() {
22-
rtd_th = 0;
23-
}
2418
void selectChannel(int channel) {
2519
for (int i=0; i<3; i++) {
2620
ch_sel[i] = (i == channel ? 1 : 0);
2721
}
2822
delay(150);
2923
}
3024
void enableTC() {
25+
rtd_th = 0;
3126
digitalWrite(PI_0, LOW);
3227
digitalWrite(PA_6, HIGH);
3328
}
34-
3529
void enableRTD() {
30+
rtd_th = 1;
3631
digitalWrite(PI_0, HIGH);
3732
digitalWrite(PA_6, LOW);
33+
3834
}
3935
void disableCS() {
4036
digitalWrite(PI_0, HIGH);
@@ -44,7 +40,7 @@ class RTDClass {
4440
MAX31855Class tc = MAX31855Class(7);
4541

4642
private:
47-
mbed::DigitalOut ch_sel[3] = { mbed::DigitalOut(PA_0C), mbed::DigitalOut(PI_4), mbed::DigitalOut(PG_10)};
43+
mbed::DigitalOut ch_sel[3] = { mbed::DigitalOut(PD_6), mbed::DigitalOut(PI_4), mbed::DigitalOut(PG_10)};
4844
mbed::DigitalOut rtd_th = mbed::DigitalOut(PC_15);
4945

5046
};
@@ -56,7 +52,7 @@ static mbed::CAN _can(PB_8, PH_13);
5652
class COMMClass {
5753
public:
5854
// to be tested: cjeck if can be made a big pin initialization
59-
void init(){
55+
void init() {
6056
//SHUTDOWN OF RS485 LEDS
6157
digitalWrite(PA_0, LOW);
6258
digitalWrite(PI_9, LOW);
@@ -182,14 +178,14 @@ class AnalogInClass {
182178

183179
mbed::DigitalOut ch_in[12] = {
184180
mbed::DigitalOut(PD_4), mbed::DigitalOut(PD_5), mbed::DigitalOut(PE_3), mbed::DigitalOut(PG_3),
185-
mbed::DigitalOut(PA_6), mbed::DigitalOut(PH_6), mbed::DigitalOut(PJ_7), mbed::DigitalOut(PH_15),
181+
mbed::DigitalOut(PD_7), mbed::DigitalOut(PH_6), mbed::DigitalOut(PJ_7), mbed::DigitalOut(PH_15),
186182
mbed::DigitalOut(PH_10), mbed::DigitalOut(PA_4), mbed::DigitalOut(PA_8), mbed::DigitalOut(PC_6)
187183
};
188184

189185
private:
190186
mbed::AnalogIn in_0 = mbed::AnalogIn(PC_3C);
191-
mbed::AnalogIn in_2 = mbed::AnalogIn(PA_1C);
192187
mbed::AnalogIn in_1 = mbed::AnalogIn(PC_2C);
188+
mbed::AnalogIn in_2 = mbed::AnalogIn(PA_1C);
193189
};
194190

195191
extern AnalogInClass analog_in;
@@ -393,7 +389,7 @@ extern AnalogOutClass analog_out;
393389
*/
394390

395391
static QEI _enc_0(PJ_8, PH_12, PH_11, 0);
396-
static QEI _enc_1(PC_13, PK_1, PJ_10, 0);
392+
static QEI _enc_1(PC_13, PI_7, PJ_10, 0);
397393

398394
class EncoderClass {
399395
public:
@@ -423,6 +419,9 @@ extern EncoderClass encoders;
423419

424420
class ProgrammableDIOClass : public ArduinoIOExpanderClass {
425421
public:
422+
bool init() {
423+
return begin(IO_ADD);
424+
}
426425
void setLatch() {
427426
prog_latch_retry = 0;
428427
}
@@ -447,10 +446,17 @@ class DigitalOutputsClass {
447446
void set(int index, bool val) {
448447
out[index] = val;
449448
}
449+
void setLatch() {
450+
dig_out_latch_retry = 0;
451+
}
452+
void setRetry() {
453+
dig_out_latch_retry = 1;
454+
}
450455
mbed::DigitalOut& operator[](int index) {
451456
return out[index];
452457
}
453458
private:
459+
mbed::DigitalOut dig_out_latch_retry = mbed::DigitalOut(PB_2);
454460
mbed::DigitalOut out[8] = {
455461
mbed::DigitalOut(PI_6), mbed::DigitalOut(PH_9), mbed::DigitalOut(PJ_9), mbed::DigitalOut(PE_2),
456462
mbed::DigitalOut(PI_3), mbed::DigitalOut(PI_2), mbed::DigitalOut(PD_3), mbed::DigitalOut(PA_14)
@@ -459,30 +465,14 @@ class DigitalOutputsClass {
459465

460466
extern DigitalOutputsClass digital_outputs;
461467

462-
463-
class DigitalInputsClass {
468+
class ProgrammableDINClass : public ArduinoIOExpanderClass {
464469
public:
465-
uint8_t readAll() {
466-
uint8_t val = 0;
467-
for (int i = 0; i < 8; i++) {
468-
val |= (in[i] << i);
469-
}
470-
return val;
471-
}
472-
uint8_t read(int index) {
473-
return in[index];
474-
}
475-
mbed::DigitalIn& operator[](int index) {
476-
return in[index];
470+
bool init() {
471+
return begin(DIN_ADD);
477472
}
478-
private:
479-
mbed::DigitalIn in[8] = {
480-
mbed::DigitalIn(PD_6), mbed::DigitalIn(PD_7), mbed::DigitalIn(PB_14), mbed::DigitalIn(PB_15),
481-
mbed::DigitalIn(PB_3), mbed::DigitalIn(PB_4), mbed::DigitalIn(PB_2), mbed::DigitalIn(PI_7)
482-
};
483473
};
484474

485-
extern DigitalInputsClass digital_inputs;
475+
extern ProgrammableDINClass digital_inputs;
486476

487477

488478
class RtcControllerClass : public PCF8563TClass {

src/Objects.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ AnalogInClass analog_in;
88
AnalogOutClass analog_out;
99
EncoderClass encoders;
1010
DigitalOutputsClass digital_outputs;
11-
DigitalInputsClass digital_inputs;
11+
ProgrammableDINClass digital_inputs;
1212
ProgrammableDIOClass digital_programmables;
1313
RtcControllerClass rtc_controller;
1414
}

src/utility/THERMOCOUPLE/MAX31855.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ uint32_t MAX31855Class::readSensor()
6969
_spi->endTransaction();
7070

7171
digitalWrite(_cs, HIGH);
72-
7372
return read;
7473
}
7574

@@ -100,6 +99,7 @@ float MAX31855Class::readTemperature(int type)
10099
// conversion factor from K type to J type
101100
celsius = celsius * 4/5;
102101
}
102+
Serial.println(celsius);
103103
return celsius;
104104
}
105105

@@ -123,6 +123,7 @@ float MAX31855Class::readReferenceTemperature(int type)
123123
// multiply for the LSB value
124124
ref = rawword * 0.0625f;
125125
}
126+
Serial.println(ref);
126127
return ref;
127128
}
128129

src/utility/THERMOCOUPLE/MAX31855.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
class MAX31855Class {
3131
public:
32-
MAX31855Class(int cs = A4, SPIClass& spi = SPI);
32+
MAX31855Class(int cs = 7, SPIClass& spi = SPI);
3333

3434
int begin();
3535
void end();

src/utility/ioexpander/ArduinoIOExpander.cpp

+74-42
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,18 @@
1818

1919
bool ArduinoIOExpanderClass::begin()
2020
{
21-
Wire.begin();
22-
_tca.initialize();
21+
if(!_tca.testConnection()) {
22+
return false;
23+
}
24+
//Initialize all pins to the default mode
25+
initPins();
26+
27+
return true;
28+
}
29+
30+
bool ArduinoIOExpanderClass::begin(uint8_t address)
31+
{
32+
setAddress(address);
2333
if(!_tca.testConnection()) {
2434
return false;
2535
}
@@ -43,6 +53,10 @@ bool ArduinoIOExpanderClass::pinMode(int pin, PinMode direction)
4353
return true;
4454
}
4555

56+
void ArduinoIOExpanderClass::setAddress(uint8_t address) {
57+
_tca.setAddress(address);
58+
}
59+
4660
bool ArduinoIOExpanderClass::set(int pin, PinStatus status)
4761
{
4862
if (pin < IO_READ_CH_PIN_00) {
@@ -57,52 +71,70 @@ bool ArduinoIOExpanderClass::set(int pin, PinStatus status)
5771

5872
int ArduinoIOExpanderClass::read(int pin)
5973
{
60-
if (pin > IO_READ_CH_PIN_11) {
61-
return _tca.readPin(pin) == true ? 1 : 0;
74+
if(_tca.getAddress() == IO_ADD) {
75+
if (pin > TCA6424A_P13 && pin <= TCA6424A_P27) {
76+
return _tca.readPin(pin) == true ? 1 : 0;
77+
}
78+
} else if(_tca.getAddress() == DIN_ADD) {
79+
if ((pin >= TCA6424A_P00) && (pin <= TCA6424A_P10) && (pin !=TCA6424A_P03)) {
80+
return _tca.readPin(pin) == true ? 1 : 0;
81+
}
6282
}
6383
return -1;
6484
}
6585

6686
void ArduinoIOExpanderClass::initPins()
6787
{
68-
PinStatus status = SWITCH_OFF;
69-
pinMode(IO_WRITE_CH_PIN_00, OUTPUT);
70-
pinMode(IO_WRITE_CH_PIN_01, OUTPUT);
71-
pinMode(IO_WRITE_CH_PIN_02, OUTPUT);
72-
pinMode(IO_WRITE_CH_PIN_03, OUTPUT);
73-
pinMode(IO_WRITE_CH_PIN_04, OUTPUT);
74-
pinMode(IO_WRITE_CH_PIN_05, OUTPUT);
75-
pinMode(IO_WRITE_CH_PIN_06, OUTPUT);
76-
pinMode(IO_WRITE_CH_PIN_07, OUTPUT);
77-
pinMode(IO_WRITE_CH_PIN_08, OUTPUT);
78-
pinMode(IO_WRITE_CH_PIN_09, OUTPUT);
79-
pinMode(IO_WRITE_CH_PIN_10, OUTPUT);
80-
pinMode(IO_WRITE_CH_PIN_11, OUTPUT);
81-
pinMode(IO_READ_CH_PIN_00, INPUT);
82-
pinMode(IO_READ_CH_PIN_01, INPUT);
83-
pinMode(IO_READ_CH_PIN_02, INPUT);
84-
pinMode(IO_READ_CH_PIN_03, INPUT);
85-
pinMode(IO_READ_CH_PIN_04, INPUT);
86-
pinMode(IO_READ_CH_PIN_05, INPUT);
87-
pinMode(IO_READ_CH_PIN_06, INPUT);
88-
pinMode(IO_READ_CH_PIN_07, INPUT);
89-
pinMode(IO_READ_CH_PIN_08, INPUT);
90-
pinMode(IO_READ_CH_PIN_09, INPUT);
91-
pinMode(IO_READ_CH_PIN_10, INPUT);
92-
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);
88+
89+
if (_tca.getAddress() == IO_ADD) {
90+
PinStatus status = SWITCH_OFF;
91+
pinMode(IO_WRITE_CH_PIN_00, OUTPUT);
92+
pinMode(IO_WRITE_CH_PIN_01, OUTPUT);
93+
pinMode(IO_WRITE_CH_PIN_02, OUTPUT);
94+
pinMode(IO_WRITE_CH_PIN_03, OUTPUT);
95+
pinMode(IO_WRITE_CH_PIN_04, OUTPUT);
96+
pinMode(IO_WRITE_CH_PIN_05, OUTPUT);
97+
pinMode(IO_WRITE_CH_PIN_06, OUTPUT);
98+
pinMode(IO_WRITE_CH_PIN_07, OUTPUT);
99+
pinMode(IO_WRITE_CH_PIN_08, OUTPUT);
100+
pinMode(IO_WRITE_CH_PIN_09, OUTPUT);
101+
pinMode(IO_WRITE_CH_PIN_10, OUTPUT);
102+
pinMode(IO_WRITE_CH_PIN_11, OUTPUT);
103+
pinMode(IO_READ_CH_PIN_00, INPUT);
104+
pinMode(IO_READ_CH_PIN_01, INPUT);
105+
pinMode(IO_READ_CH_PIN_02, INPUT);
106+
pinMode(IO_READ_CH_PIN_03, INPUT);
107+
pinMode(IO_READ_CH_PIN_04, INPUT);
108+
pinMode(IO_READ_CH_PIN_05, INPUT);
109+
pinMode(IO_READ_CH_PIN_06, INPUT);
110+
pinMode(IO_READ_CH_PIN_07, INPUT);
111+
pinMode(IO_READ_CH_PIN_08, INPUT);
112+
pinMode(IO_READ_CH_PIN_09, INPUT);
113+
pinMode(IO_READ_CH_PIN_10, INPUT);
114+
pinMode(IO_READ_CH_PIN_11, INPUT);
115+
116+
set(IO_WRITE_CH_PIN_00, status);
117+
set(IO_WRITE_CH_PIN_01, status);
118+
set(IO_WRITE_CH_PIN_02, status);
119+
set(IO_WRITE_CH_PIN_03, status);
120+
set(IO_WRITE_CH_PIN_04, status);
121+
set(IO_WRITE_CH_PIN_05, status);
122+
set(IO_WRITE_CH_PIN_06, status);
123+
set(IO_WRITE_CH_PIN_07, status);
124+
set(IO_WRITE_CH_PIN_08, status);
125+
set(IO_WRITE_CH_PIN_09, status);
126+
set(IO_WRITE_CH_PIN_10, status);
127+
set(IO_WRITE_CH_PIN_11, status);
128+
} else {
129+
pinMode(DIN_READ_CH_PIN_00, INPUT);
130+
pinMode(DIN_READ_CH_PIN_01, INPUT);
131+
pinMode(DIN_READ_CH_PIN_02, INPUT);
132+
pinMode(DIN_READ_CH_PIN_03, INPUT);
133+
pinMode(DIN_READ_CH_PIN_04, INPUT);
134+
pinMode(DIN_READ_CH_PIN_05, INPUT);
135+
pinMode(DIN_READ_CH_PIN_06, INPUT);
136+
pinMode(DIN_READ_CH_PIN_07, INPUT);
137+
}
106138
}
107139

108140
ArduinoIOExpanderClass Expander;

src/utility/ioexpander/ArduinoIOExpander.h

+17-3
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
#pragma once
1818

1919
#include <Arduino.h>
20-
#include <Wire.h>
2120
#include "TCA6424A.h"
2221

22+
#define IO_ADD TCA6424A_ADDRESS_ADDR_LOW // address pin low (GND)
23+
#define DIN_ADD TCA6424A_ADDRESS_ADDR_HIGH // address pin high (VCC)
24+
2325
#define SWITCH_ON HIGH
2426
#define SWITCH_OFF LOW
2527

@@ -51,18 +53,30 @@ enum {
5153
IO_READ_CH_PIN_11 = TCA6424A_P14
5254
};
5355

56+
enum {
57+
DIN_READ_CH_PIN_00 = TCA6424A_P10,
58+
DIN_READ_CH_PIN_01 = TCA6424A_P05,
59+
DIN_READ_CH_PIN_02 = TCA6424A_P04,
60+
DIN_READ_CH_PIN_03 = TCA6424A_P02,
61+
DIN_READ_CH_PIN_04 = TCA6424A_P01,
62+
DIN_READ_CH_PIN_05 = TCA6424A_P00,
63+
DIN_READ_CH_PIN_06 = TCA6424A_P07,
64+
DIN_READ_CH_PIN_07 = TCA6424A_P06,
65+
};
66+
5467
class ArduinoIOExpanderClass {
5568

5669
public:
5770
ArduinoIOExpanderClass() = default;
5871
~ArduinoIOExpanderClass() = default;
5972

6073
bool begin();
74+
bool begin(uint8_t address);
6175

6276
operator bool();
63-
77+
void setAddress(uint8_t address);
6478
bool set(int pin, PinStatus status);
65-
bool set(int pin, int status) { return set(pin, (PinStatus)status); };
79+
bool set(int pin, int status) { return set( pin, (PinStatus)status); };
6680

6781
int read(int pin);
6882
bool pinMode(int pin, PinMode direction);

src/utility/ioexpander/TCA6424A.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,11 @@ void TCA6424A::setAllDirection(uint8_t bank0, uint8_t bank1, uint8_t bank2) {
311311
buffer[2] = bank2;
312312
I2Cdev::writeBytes(devAddr, TCA6424A_RA_CONFIG0 | TCA6424A_AUTO_INCREMENT, 3, buffer);
313313
}
314+
315+
void TCA6424A::setAddress(uint8_t address) {
316+
devAddr = address;
317+
}
318+
319+
uint8_t TCA6424A::getAddress() {
320+
return devAddr;
321+
}

src/utility/ioexpander/TCA6424A.h

+3
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ class TCA6424A {
9696
void initialize();
9797
bool testConnection();
9898

99+
void setAddress(uint8_t address);
100+
uint8_t getAddress();
101+
99102
// INPUT* registers (x0h - x2h)
100103
bool readPin(uint16_t pin);
101104
uint8_t readBank(uint8_t bank);

0 commit comments

Comments
 (0)