buona sera a tutti ,
ho un problema con un pcf , ho 4 pin in lettura che sono P0,P1,P2,P3 ed 2 pin in output che sono P4 ed P5
queste ultime 2 per provare il funzionamento cambio lo stato della variabile pc1 o pc2 e di conseguenza deve cambiale lo stato di P4 o P5
, non riesco a fare combinare le 2 cose , legge male sia gli ingressi che le uscite sono 2 giorni che non riesco a farli funzionare insieme ,se leggo o scrivo solamente riesco a farli funzionare ma insieme non riesco
ecco il codice, ringrazio er il vostro aiuto ad arrivare alla soluzione
#include <Wire.h>
#define PCF8574_ADDRESS 0x27
bool pc1 = false;
bool pc2 = false;
unsigned long lastTime_pc1 = 0;
unsigned long lastTime_pc2 = 0;
void setup() {
Wire.begin(); // Inizializza la libreria Wire
Serial.begin(9600); // Inizializza la comunicazione seriale
Wire.beginTransmission(PCF8574_ADDRESS);
Wire.write(0b00001111); // Imposta i pin P0, P1, P2, P3 come input (bit 0 a 1, gli altri a 0)
Wire.endTransmission();
}
void loop() {
// Cambia lo stato di pc1 ogni 500 ms
if (millis() - lastTime_pc1 >= 500) {
pc1 = !pc1;
Serial.print("pc1: ");
Serial.println(pc1 ? "HIGH" : "LOW");
// Scrivi lo stato delle variabili pc1 pin P4
byte outputState = (pc1 << 0);
Wire.beginTransmission(PCF8574_ADDRESS);
Wire.write(outputState);
Wire.endTransmission();
lastTime_pc1 = millis();
}
// Cambia lo stato di pc2 ogni 1000 ms
if (millis() - lastTime_pc2 >= 1000) {
pc2 = !pc2;
Serial.print(" pc2: ");
Serial.println(pc2 ? "HIGH" : "LOW");
// Scrivi lo stato delle variabili pc2 sui pin P5
byte outputState = (pc2 << 1) ;
Wire.beginTransmission(PCF8574_ADDRESS);
Wire.write(outputState);
Wire.endTransmission();
lastTime_pc2 = millis();
}
// Leggi lo stato dei pin P0, P1, P2, P3
Wire.requestFrom(PCF8574_ADDRESS, 1);
if (Wire.available()) {
byte pinState = Wire.read();
bool pin0State = pinState & (1 << 0); // Leggi lo stato del pin P0
bool pin1State = pinState & (1 << 1); // Leggi lo stato del pin P1
bool pin2State = pinState & (1 << 2); // Leggi lo stato del pin P2
bool pin3State = pinState & (1 << 3); // Leggi lo stato del pin P3
Serial.print("Stato del pin P0: ");
Serial.println(pin0State ? "HIGH" : "LOW");
Serial.print("Stato del pin P1: ");
Serial.println(pin1State ? "HIGH" : "LOW");
Serial.print("Stato del pin P2: ");
Serial.println(pin2State ? "HIGH" : "LOW");
Serial.print("Stato del pin P3: ");
Serial.println(pin3State ? "HIGH" : "LOW");
}
}
