[Risolto] Problema con PCF8574AP

Un saluto a tutti.

Mi sapreste aiutare a risolvere questo problema ?

Non riesco a capire perchè non funziona il PCF8574AP collegato ai pin SDA ed SCL rispettivamente ai pin A4 ed A5 di arduino con la comunicazione I2C.

Mi spiego.
Il circuito legge 8 ingressi digitali collegati al primo PCF8574AP configurato in ingresso e rispettivamente il secondo PCF8574A configurato in uscita ha collegato 8 led.
Alla pressione del tato 1 si deve accendere il led 1, 2 il led 2 e così via.

Tutto bene fino al tasto 4, dopo tutto un casino.

Ho notato che in ingresso, vengono letti tutti gli ingressi correttamente, mentre per le uscite, il valore corretto che viene gestito si ferma a 14, dopo di chè non comprendo perchè le uscite con peso binario 16 e 32 sono sempre attive e quelle con peso 32 e 64 sempre spente.

Il codice utilizzato è il seguente:

// test in-out PCF8574AP

#include<Wire.h>

byte x=0;
byte y=0;

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

void loop()
{

Wire.requestFrom(0x3A,1);
if(Wire.available()) //If the request is available
{
x=Wire.read(); //Receive the data
}
if(x<255) //If the data is less than 255
{
if (x==0) { y = 0; }; //null
if (x==1) { y = 1; }; //P1
if (x==2) { y = 2; }; //P2
if (x==4) { y = 4; }; //P3
if (x==8) { y = 8; }; //P4
if (x==16) { y = 16; }; //P5
if (x==32) { y = 32; }; //P6
if (x==64) { y = 64; }; //P7
if (x==128) { y = 128; }; //P8
}
Wire.beginTransmission(0x3B); //Begin the transmission to PCF8574
Wire.print(y); //Send the data to PCF8574
Wire.endTransmission(); //End the Transmission
Serial.println(y);
}

Grazie per l'attenzione.

:grin:

Scusatemi, ho risolto.

Avevo sbagliato il comando di scrittura.

Lascio comunque la soluzione, anche se mi sento un pò ridicolo per l'errore.

Se i moderatori del forum ritengono che questo sia obsoleto, possono cancellarlo.

Correzione sul comando "wire.print":

// test in-out PCF8574AP

#include<Wire.h>

byte x=0;
byte y=0;

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

void loop()
{

  Wire.requestFrom(0x3A,1); 
    if(Wire.available())              //If the request is available
    {
        x=Wire.read();                //Receive the data
    }
    if(x<255)                         //If the data is less than 255
    {
        if (x==0) { y = 0; }; //null
        if (x==1) { y = 1; }; //P1
        if (x==2) { y = 2; }; //P2
        if (x==4) { y = 4; }; //P3
        if (x==8) { y = 8; }; //P4
        if (x==16) { y = 16; }; //P5        
        if (x==32) { y = 32; }; //P6
        if (x==64) { y = 64; }; //P7
        if (x==128) { y = 128; }; //P8        
    }
    Wire.beginTransmission(0x3B);      //Begin the transmission to PCF8574
    Wire.print(y,0);                     //Send the data to PCF8574
    Wire.endTransmission();            //End the Transmission
  Serial.println(y);
}

La riga corretta è la seguente:

Wire.print(y,0); //Send the data to PCF8574

gli esempi che ho trovato su internet, non evidenziavano questo aspetto "wire.print(y, 0);", ma solo "wire.print(y);" in particolare il codice che vedete l'ho copiato pari da un esempio.

Lascio per scontato che gli esempi che si trovano nelle descrizioni delle librerie, siano testati. Da qui, il problema.