Bonjour et merci pour votre aide...
Pour le module LCD, c'est un PCF8574T Avec comme adresse 0100+ A2à0 + A1à1 + A0à0 donc 0x22.
pour les autres se sont des PCA8574AD avec pour adresse 0x38 et 0x39 pour le suivant...
Pour ce problème, j'ai isolé chaque partie car j'avais en plus sur le même bus i2C, 2 autres carte mini et 2 LCD en i2c et des P82B715 qui sont des amplis de bus... et j'avais le même problème sur les lcd des autres cartes arduino
je suis donc revenu a la version la plus simple:
1 Horloge DS1307
1 LCD en I2C
2 PCA8574AD
1 Nano
le problème intervient tout seul, sans rien toucher a partir d'un certain moment ou lorsque je configure le ds1307 ou lorsque j’envoie une trame i2C demandant l’état logique de cette carte
voila le code qui fait afficher des caractères étranges
void requestEvent()
{
///////////////////////////////////////////////////////////////////////
// Variables à envoyer lors d'une requete I2C recue par le Maitre
Variable_Maitre_1[0] = Adresse_I2C_Centrale,HEX;
Variable_Maitre_1[1] = Etat_Centrale_Bureau_I2C,HEX;
Variable_Maitre_1[2] = Etat_Alarme_I2C,HEX;
///////////////////////////////////////////////////////////////////////
Wire.write(Variable_Maitre_1,Nombre_Octets_A_Recevoir);
delay(15); } // Fin du void requestEvent()
ou bien lorsque je navigue dans les menus
MenuItem newMenuItem=changed.to; //get the destination menu
lcd.setCursor(0,1);
if(newMenuItem.getName()==menu.getRoot())
{
lcd.clear();
delay(10); // pour laisser temps effacer écran
lcd.setCursor(0,0);
lcd.print(" DOMOTIQUE AFA ");
lcd.setCursor(0,1);
lcd.print(" Menu Principal ");
}
else if(newMenuItem.getName()=="1")
{
lcd.clear();
delay(10); // pour laisser temps effacer écran
lcd.setCursor(0,0);
lcd.print(" DOMOTIQUE AFA ");
lcd.setCursor(0,1);
lcd.print("1 Etats ");
}
else if(newMenuItem.getName()=="1.1")
{
lcd.clear();
delay(10); // pour laisser temps effacer écran
lcd.setCursor(0,0);
lcd.print(" DOMOTIQUE AFA ");
lcd.setCursor(0,1);
lcd.print("1.1 Horloge ");
}
else if(newMenuItem.getName()=="1.2")
{
lcd.clear();
delay(10); // pour laisser temps effacer écran
lcd.setCursor(0,0);
lcd.print(" DOMOTIQUE AFA ");
lcd.setCursor(0,1);
lcd.print("1.2 Alarme Int ");
}
else if(newMenuItem.getName()=="1.3")
{
lcd.clear();
delay(10); // pour laisser temps effacer écran
lcd.setCursor(0,0);
lcd.print(" DOMOTIQUE AFA ");
lcd.setCursor(0,1);
lcd.print("1.3 Alarme Inc ");
}
else if(newMenuItem.getName()=="1.4")
{
lcd.clear();
delay(10); // pour laisser temps effacer écran
lcd.setCursor(0,0);
lcd.print(" DOMOTIQUE AFA ");
lcd.setCursor(0,1);
lcd.print("1.4 Version Soft");
}
else if(newMenuItem.getName()=="2")
{
lcd.clear();
delay(10); // pour laisser temps effacer écran
lcd.setCursor(0,0);
lcd.print(" DOMOTIQUE AFA ");
lcd.setCursor(0,1);
lcd.print("2 Configuration ");
}
else if(newMenuItem.getName()=="2.1")
{
lcd.clear();
delay(10); // pour laisser temps effacer écran
lcd.setCursor(0,0);
lcd.print(" DOMOTIQUE AFA ");
lcd.setCursor(0,1);
lcd.print("2.1 Horloge ");
}
else if(newMenuItem.getName()=="2.2")
{
lcd.clear();
delay(10); // pour laisser temps effacer écran
lcd.setCursor(0,0);
lcd.print(" DOMOTIQUE AFA ");
lcd.setCursor(0,1);
lcd.print("2.2 Rearm Inc ");
}
else if(newMenuItem.getName()=="2.3")
{
lcd.clear();
delay(10); // pour laisser temps effacer écran
lcd.setCursor(0,0);
lcd.print(" DOMOTIQUE AFA ");
lcd.setCursor(0,1);
lcd.print("2.3 Active Inc ");
}
else if(newMenuItem.getName()=="3")
{
lcd.clear();
delay(10); // pour laisser temps effacer écran
lcd.setCursor(0,0);
lcd.print(" DOMOTIQUE AFA ");
lcd.setCursor(0,1);
lcd.print("3 Hystorique ");
}
else if(newMenuItem.getName()=="3.1")
{
lcd.clear();
delay(10); // pour laisser temps effacer écran
lcd.setCursor(0,0);
lcd.print(" DOMOTIQUE AFA ");
lcd.setCursor(0,1);
lcd.print("3.1 Evenements ");
}
else if(newMenuItem.getName()=="3.2")
{
lcd.clear();
delay(10); // pour laisser temps effacer écran
lcd.setCursor(0,0);
lcd.print(" DOMOTIQUE AFA ");
lcd.setCursor(0,1);
lcd.print("3.2 RAZ Events ");
}
ou bien en réglant l'horloge
// Fonction configurant le DS1307 avec la date/heure fourni
void ecrire(Date *date) {
Wire.beginTransmission(Adresse_Horloge); // Début de transaction I2C
Wire.write(0); // Arrête l'oscillateur du DS1307
Wire.write(dec2bcd(date->secondes)); // Envoi des données
Wire.write(dec2bcd(date->minutes));
Wire.write(dec2bcd(date->heures));
Wire.write(dec2bcd(date->jourDeLaSemaine));
Wire.write(dec2bcd(date->jour));
Wire.write(dec2bcd(date->mois));
Wire.write(dec2bcd(date->annee));
Wire.write(0); // Redémarre l'oscillateur du DS1307
Wire.endTransmission(); // Fin de transaction I2C
delay(15);