PCF8574 duvida

ola, é possivel criar uma array ou algo parecido para contralar de forma mais facil o PCF8574 tipo

P0 = 0 P1 = 1 P2 =0

eu estou usando esse codigo:

#include "Wire.h"
#define expander 0x20

void setup()
{
Wire.begin();
}

void loop()
{
  
  expanderWrite(B11111111);
  delay(1000);

  expanderWrite(B00000000);
  delay(1000);
}

void expanderWrite(byte _data )
{
  Wire.beginTransmission(expander);
  Wire.write(_data);
  Wire.endTransmission();
  
}

E de que maneira é que o array ia controlar o PCF8574?

para ativar uma porta no PCF8574 eu estou usando o expanderWrite(B11111111)

mais gostaria de simplificar usando algo do tipo writedigital(P0, Low)

ponde o P0 seria a porta 0 do PCF8574

Com array é menos eficiente... algo como:

#define P0   0x1
#define P1   0x2
#define P2   0x4
#define P3   0x8
//completa o resto

void expanderBitWrite( unsigned char bit, unsigned char value) {

unsigned char status = expanderRead(); //deve haver uma destas funcões para ler o estado do registo

if (value == HIGH) expanderWrite(status | bit); 
else expanderWrite(status &~(bit));

}

ok eu vou olhar seu codigo com calma para entender eu usar assim no Bascom-AVR usando BASIC

**Variavel
Dim Bytearray(1) As Byte


** Saidas
S1 Alias Bytearray(1).0
S2 Alias Bytearray(1).1
S3 Alias Bytearray(1).2
S4 Alias Bytearray(1).3
S5 Alias Bytearray(1).4
S6 Alias Bytearray(1).5
S7 Alias Bytearray(1).6

S1 = 0
S2 = 1
S4 = 1

*** depois mandava assim

' Envias dados PC8574
I2cstart
I2cwbyte Pcf8574
I2cwbyte Bytearray(1)
I2cstop




S8 Alias Bytearray(1).7

Eu não sei BASIC...

opa eu achei uma biblioteca para usar com o PCF8574

ficou mais simples:

#include <PCF8574.h> // Required for ... all 

#include <Wire.h> // Required for I2C communication

PCF8574 expander; // Create object from PCF8574 class

void setup(){

  Serial.begin(9600); // Setup serial for read echo
  
  expander.pinMode(0,OUTPUT); // Setup pin D0 as output
  expander.pinMode(1,OUTPUT); // Setup pin D1 as output
  expander.pinMode(2,OUTPUT); // Setup pin D2 as output
  
  expander.set(); // coloca todas as saidas em HIGH
  expander.begin(0x20);
  
}

void loop(){
  expander.digitalWrite(0, LOW); // Blink led 1
  delay(1000);
  expander.digitalWrite(0, HIGH); // Blink led 2
  delay(1000);

} // Loop forever

Boa Noite.

Estou usando esta mesma biblioteca e queria dar nome aos pino do PCF8574 como no caso dos servos, parei nesta parte e não consigo avançar:
#include <Wire.h>
#include <Servo.h>
#include <PCF8574.h>
#include <LiquidCrystal_I2C.h>

PCF8574 PCF_EXP1;

//SERVOS
const int SPEEDO_PIN =A0;
const int RPM_PIN = 5;
const int BRAKE_AIR_PRESSURE_PIN = 6;
const int FUEL_PIN = 9;
const int OIL_TEMPERATURE_PIN =10;
const int WATER_TEMPERATURE_PIN =11;

//LEDS
const int PCF_EXP1 RIGHT_INDICATOR =P0;
const int FUEL_WARNING =P1;
const int PARKING_BREAK =P2;
const int LIGHT_PARKING =P3;
const int MOTOR_BRAKE =P4;
const int LIGHT_HIGH_BEAM =P5;
const int BATTERY_VOLTAGE_WARNING =P6;
const int LEFT_INDICATOR =P7;

void setup() {
Serial.begin(115200);
PCF_EXP1.begin(0x20);
}

void loop() {
}

Desde ja muito obrigado!

Não sei se estou a perceber bem a questão, mas penso que o problema deve estar relacionado com estas linhas:

const int PCF_EXP1 RIGHT_INDICATOR    =P0;
const int FUEL_WARNING                      =P1;
const int PARKING_BREAK                     =P2;
const int LIGHT_PARKING                      =P3;
const int MOTOR_BRAKE                        =P4;
const int LIGHT_HIGH_BEAM                  =P5;
const int BATTERY_VOLTAGE_WARNING   =P6;
const int LEFT_INDICATOR                     =P7;

Tente fazer:

const int PCF_EXP1 RIGHT_INDICATOR    = 0;
const int FUEL_WARNING                      = 1;
const int PARKING_BREAK                     = 2;
const int LIGHT_PARKING                      = 3;
const int MOTOR_BRAKE                        = 4;
const int LIGHT_HIGH_BEAM                  = 5;
const int BATTERY_VOLTAGE_WARNING   = 6;
const int LEFT_INDICATOR                     = 7;

Assim, já pode chamar outro nome aos pinos e fazer:

  expander.pinMode(FUEL_WARNING, OUTPUT);

e:

  expander.digitalWrite(FUEL_WARNING, HIGH);