#include //adresses codées sur 7bits #define SLAVE_ADDR_8574_A 0x3E #define SLAVE_ADDR_8574_B 0x3F ////////////////////////////////////////// char readPort8574(char addr, char * ptr_value) /*addr, l'adresse du PCF8574 ptr_value, pointeur pour renvoyer la valeur lue sur le port retourne -1 si échec 0 sinon*/ { Wire.requestFrom((byte)addr, (byte)1);// demande la lecture d'1 octet depuis l'adresse du pérpiphérique if (Wire.available() == 1) //si l'octet est disponible { (* ptr_value) = Wire.read(); // lire l'octet return 0; } else { (* ptr_value) = 0; //valeur par défaut si le composant n'a pas acquité return -1; } } ////////////////////////////////////////// char writePort8574(char addr, char value) /*addr, l'adresse du PCF8574 value, la valeur à écrire sur le port retourne -1 si échec 0 sinon */ { Wire.beginTransmission((byte)addr);//démarre la transmission avec l'adresse du pérpiphérique Wire.write((byte)value); //envoie la donnée if (Wire.endTransmission() == 0) //stoppe la transmission return 0; else return -1; } ////////////////////////////////////////// void setup() { Serial.begin(9600); // start serial port at 9600 bps: Serial.print("Bonjour"); Wire.begin(); // joindre le bus i2c en tant que maître writePort8574( SLAVE_ADDR_8574_B , 0xff); //configure le composant B en entrée } ////////////////////////////////////////// void loop() { char val; if (Serial.available() > 0) { val = Serial.read(); writePort8574(SLAVE_ADDR_8574_A, &val); switch (val) { case '0': break; case '1': break; case '2': break; default: break; } Serial.println((int)val, DEC); } /* if (readPort8574(SLAVE_ADDR_8574_B,&val)==0) { // Serial.print("lecture 8574 OK, "); writePort8574(SLAVE_ADDR_8574_A,val); } delay(100);*/ }