Skip to content

Commit

Permalink
oc cannot control the output because it cannot modify the mode
Browse files Browse the repository at this point in the history
  • Loading branch information
H-sw123 committed Oct 16, 2024
1 parent 9e8adf4 commit de6636b
Showing 1 changed file with 42 additions and 45 deletions.
87 changes: 42 additions & 45 deletions examples/TestCH422G/TestCH422G.ino
Original file line number Diff line number Diff line change
@@ -1,19 +1,6 @@
#include <Arduino.h>
#include <ESP_IOExpander_Library.h>

/*********************
Connect IO0 of CH4-22G to OC0, and IO5 to OC1.
Then, the program is burned, and the serial terminal will output:
Test begin
Original status:
Set pint 0 and 5 to input mode:
Pin level: 0, 0
Pin level: 1, 1
Pin level: 0, 0
Pin level: 1, 1
...
**********************/

/**
* Create an ESP_IOExpander object, Currently supports:
* - TCA95xx_8bit
Expand All @@ -25,6 +12,8 @@ Pin level: 1, 1
#define EXAMPLE_I2C_NUM (0)
#define EXAMPLE_I2C_SDA_PIN (8)
#define EXAMPLE_I2C_SCL_PIN (9)
#define EXAMPLE_I2C_ADDR (ESP_IO_EXPANDER_I2C_CH422G_ADDRESS) // Modify this value according to the
// hardware address

#define _EXAMPLE_CHIP_CLASS(name, ...) ESP_IOExpander_##name(__VA_ARGS__)
#define EXAMPLE_CHIP_CLASS(name, ...) _EXAMPLE_CHIP_CLASS(name, ##__VA_ARGS__)
Expand All @@ -34,56 +23,64 @@ ESP_IOExpander *expander = NULL;
void setup()
{
Serial.begin(115200);
delay(1000);
Serial.println("Test begin");

expander = new EXAMPLE_CHIP_CLASS(EXAMPLE_CHIP_NAME,
(i2c_port_t)EXAMPLE_I2C_NUM, ESP_IO_EXPANDER_I2C_CH422G_ADDRESS_000,
EXAMPLE_I2C_SCL_PIN, EXAMPLE_I2C_SDA_PIN);
expander = new EXAMPLE_CHIP_CLASS(EXAMPLE_CHIP_NAME, (i2c_port_t)EXAMPLE_I2C_NUM, EXAMPLE_I2C_ADDR,
EXAMPLE_I2C_SCL_PIN, EXAMPLE_I2C_SDA_PIN);
expander->init();
expander->begin();

/* For CH422G */
// static_cast<ESP_IOExpander_CH422G *>(expander)->enableOC_PushPull();
// static_cast<ESP_IOExpander_CH422G *>(expander)->enableOC_OpenDrain();

Serial.println("Original status:");
expander->printStatus();

//Set pint 0 and 5 to input mode
expander->pinMode(8, OUTPUT);
expander->pinMode(9, OUTPUT);
// expander->multiPinMode(IO_EXPANDER_PIN_NUM_2 | IO_EXPANDER_PIN_NUM_3, OUTPUT);

Serial.println("Set pint 8 and 9 to output mode:");
expander->printStatus();

expander->digitalWrite(8, LOW);
expander->digitalWrite(9, LOW);
// expander->multiDigitalWrite(IO_EXPANDER_PIN_NUM_2 | IO_EXPANDER_PIN_NUM_3, LOW);

Serial.println("Set pint 0 and 5 to low level:");
expander->printStatus();

expander->pinMode(0, INPUT);
expander->pinMode(5, INPUT);
// expander->multiPinMode(IO_EXPANDER_PIN_NUM_0 | IO_EXPANDER_PIN_NUM_5, INPUT);
// expander->multiPinMode(IO_EXPANDER_PIN_NUM_2 | IO_EXPANDER_PIN_NUM_3, INPUT);

Serial.println("Set pint 0 and 5 to input mode:");
expander->printStatus();

}

int level[4] = {0, 0, 0, 0};
uint32_t level_temp;
String level_str;

void loop()
{
//Set od pint 0-1 to low level
expander->digital_od_Write(0, LOW);
expander->digital_od_Write(1, LOW);
// expander->multiDigital_od_Write(OD_IO_EXPANDER_PIN_NUM_0 | OD_IO_EXPANDER_PIN_NUM_1, LOW);
delay(1);
// Read pin 0 and 5 level
level[0] = expander->digitalRead(0);
level[1] = expander->digitalRead(5);
Serial.print("Pin level: ");
Serial.print(level[0]);
Serial.print(", ");
Serial.println(level[1]);
delay(1000);
for(int i = 0;i < 100;i++)
{
expander->digitalWrite(8, i%2);
expander->digitalWrite(9, !(i%2));

//Set od pint 0-1 to high level
expander->digital_od_Write(0, HIGH);
expander->digital_od_Write(1, HIGH);
// expander->multiDigital_od_Write(OD_IO_EXPANDER_PIN_NUM_0 | OD_IO_EXPANDER_PIN_NUM_1, HIGH);

delay(1);
level[0] = expander->digitalRead(0);
level[1] = expander->digitalRead(5);
Serial.print("Pin level: ");
Serial.print(level[0]);
Serial.print(", ");
Serial.println(level[1]);
delay(1000);
// Read pin 0 and 5 level
level[0] = expander->digitalRead(0);
level[1] = expander->digitalRead(5);

Serial.print("Pin level: ");
Serial.print(level[0]);
Serial.print(", ");
Serial.println(level[1]);

delay(1000);
}

}

0 comments on commit de6636b

Please sign in to comment.