besoin d'aide pour un menu,

le menu réapparait dans affichage quand je change dans affichage
lcd.setCursor(2, 0);

je voie de nouveau tout les menu mais par contre je voie toujours pas les sous menu 22, 31 et 32 ,41 et 42

et toujours le problème d affichage quand j appuis sur select pour éditer le sous menu

lcd.clear();
  lcd.setCursor(2, 0);
  lcd.print(NumMenu[Menu].Menu);
  lcd.setCursor(2, 1);

Si tu as fait des modifications, reposte le code le plus récent pour qu'on parte sur la même chose.

Je n'ai pas eu le temps ce matin, je vais essayer de regarder cet après midi.

Ton LCD est en I2C ou autre ?

tkt pas prend ton temps c dejas bien que tu m aide

le dernier c le plus propre j ai rien retoucher jte le remet

par contre quand je regarde les exemple fourni de la librairie dans Arduino

https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home

il ont l aire de devoir traiter les donnée en 4 et 8 byte mais pour moi y a beaucoup de chinois dedans c peut être une piste

pour le premier en 16/2 ou j ai pas de soucie non pas de i2c

pour les deux autre avec le variateur souder derrière oui il sont en I2c et c avec eux le soucie

code-menu-OK_sonde-OK _ventil-OK _eeprom-OK _V6.3_en-devcpp.cpp (11.2 KB)

Bon, j'ai revu un peu le code, en surface sans gros changement.

J'ai d'abord défini des valeurs pour l'écran : NB_LIGNES et NB_COL. Ça permet de tester divers écrans sans chercher les lignes à modifier.

Ensuite, j'ai remanié ta gestion de l'EEPROM : tel que tu le fais, tu la sollicites trop souvent. Une EEPROM Arduino a une durée d'utilisation de 100000 cycles d'écriture / effacement. A force, tu risques de la fair vieillir prématurément. Il faut s'en servir uniquement pour le stockage, pas comme une mémoire ordinaire. Au démarrage, tu lis les valeurs et tu mets les variables (Tmin, Tmax, etc) à jour. Ensuite tu utilises tes variables normalement et tu stockes en EEPROM uniquement lorsqu'une de ces variables est modifiée. Aucun besoin de lire l'EEPROM en cours de programme, elle ne sert qu'au démarrage pour se souvenir des réglages précédents (en cas de coupure de courant ou de plantage du code).

Dans la gestion des menus, j'ai simplifié les if.
Si je comprends bien, pour le menu 11

if (Tmin <= 30) Tmin++; else Tmin = 5;

tu augmentes Tmin et tu passes à 5 si ça dépasse 30 : c'est une sorte de boucle ? 5 6 7 ... 29 30 5 6 etc.
Si oui, ça peut s'écrire plus simplement (pour le fun car ton if est très bien) :

Tmin = (Tmin-4)%26 + 5;

J'ai ôté les + String('\xDF') qui risquent de poser problème pour le LCD.

Enfin, je me demande si le menu 32 est correct (lignes 261 & 262) : vérifie au besoin.

Sinon, je ne vois pas ce qui pourrait empêcher le code de marcher. A toi...

Regul.ino (9.67 KB)

ok tout marche bien sur l écran non I2C mais toujours la mème chose avec c PU#### d’écran I2C je croie que je v les garder pour des truc simple a afficher et opter pour d autre type d’écran.

tu ma dit que tu n utiliser pas se type d’écran tu utilise quoi et tu conseillerez quoi ?

j ai vu d'autre type d’écran mais je c pas encore si c'est velue a comprendre pour mon lvl ?

Oui, c'est ça que j'utilise : écran TFT couleur en SPI. Il existe en touchscreen ce qui te permet de faire une interface tactile.

SPI ! c'est important pour ne pas avoir trop de fils à connecter. (un peu comme l'I2C)

Si tu veux monter jusque vers 20€, tu peux prendre un écran Nextion, c'est top. Nextion propose un logiciel pour construire l'IHM, ce qui simplifie énormément le travail.

Moi, je n'en ai jamais testé, mais on trouve de l'aide sur le forum pour ça aussi.

Si tout marche bien maintenant, enlève les lignes à la fin du setup, qui ne servent à rien et diminuent la longévité de ton EEPROM

 Serial.println(EEPROM.read(0));
 Serial.println(EEPROM.read(4));
 Serial.println(EEPROM.read(6));
 Serial.println(EEPROM.read(8));
 Serial.println(EEPROM.read(10));
 Serial.println(EEPROM.read(12));
 Serial.println(EEPROM.read(14));
 Serial.println(EEPROM.read(16));
 Serial.println(EEPROM.read(18));

ok je nettoie sa

au début en faite je penser que EEPROM avez une durée de vie mais a l écriture je ne penser pas que la lecture impacter aussi

sinon ouep je vient voir une vidéo sur le logiciel de l'écran et c juste ouf et sa na pas l aire incompréhensible je croie je v partir sur sa. leur logiciel et utilisable pour tout leur écran ? ou faut que je fasse gaffe ?

Je pense que c'est pour tous leurs écrans. Je crois que tu peux le télécharger et l'essayer sans acheter d'écran

bin parfait je v regarder sa et m en prendre un le mois prochain je croie en tout cas un grand merci pour ton aide tu ma fait avancer énormément dans mon projet.

Pas de souci, ça m'a fait plaisir. A+ pour la suite !

J'ai suivi en diagonale.

Si j'ai bien compris :
Vous ne parvenez pas à afficher quoi que ce soit avec un LCD 20x4 I2C ?

Pourtant avec la librairie proposée par lesept : GitHub - fdebrabander/Arduino-LiquidCrystal-I2C-library: Library for the LiquidCrystal LCD display connected to an Arduino board., ça marche tout seul.

hello
moi j'utilise celle ci sans prob

LiquidCrystal_I2C.zip (7.95 KB)

dfgh hbachetti en faite je n 'est aucun soucie pour des affichage simple mais avec mon menu je doit avoir certaine incompatibilité avec la librairie

sans I2C sa marche impeccable et des que je passe avec I2C tout est en vrac et j ai pu constater que beaucoup de monde était dans mon cas

Tu pourrais être plus précis et poster le code avec I2C ?

bien-sur pas de soucie jte poste sa. etre plus précis c compliquer pour moi je suis novice sur le Arduino

pas de soucie quand je suis sans I2C mon menu affiche bien je peux naviguer rentrer dans les sous menu et les éditer

par contre en I2C mes sonde sont bien afficher j arrive a rentrer dans le menu j'affiche les menu 10,20,30

pour les sous menu seul les sous menu 11,12 et 21 apparaisse le 22 j ai uniquement le dernier caractère de mon sous menu qui s affiche

et quand je souhaite augmenter la température de ma regul dans le sous menu l' affichage de celui si plante

second soucie il ne prend plus en conte mes ventilo et ne d’éclanche plus

merci

code-menu-OK_sonde-OK _ventil-OK _eeprom-OK _V6.3_en-devcpp.cpp (11.2 KB)

Il n'y a pas de LCD I2C dans ce code.

ah !!! zut je me suis planté de code dsl

test i2c .cpp (6.99 KB)

test i2c positive.cpp (9.83 KB)

Il manque :

  • type de carte utilisée
  • librairie LCD utilisée

J'ai trouvé : https://bitbucket.org/fmalpartida/new-liquidcrystal/src

Dans to premier code :

LiquidCrystal_I2C lcd(0x27,20,4);// adressage de votre carte.

Cette librairie possède un constructeur qui correspond à ce passage de paramètres mais les paramètres ne sont pas ceux que tu crois :

   LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t backlighPin, 
                                     t_backlightPol pol = POSITIVE)
   // plus loin dans ton setup :
  lcd.init();             // inutile
  lcd.backlight();
  lcd.begin(16, 2);  // 16x2 ???

Tu mélanges tout.

Parlons du deuxième code :

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Les paramètres correspondent à ce constructeur :

LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw,
                                     uint8_t Rs, uint8_t d4, uint8_t d5,
                                     uint8_t d6, uint8_t d7, uint8_t backlighPin, 
                                     t_backlightPol pol = POSITIVE )

Ce constructeur permet de préciser quelles pins du convertisseur I2C sont reliées aux pins de l'afficheur.
Es-tu sûr de la correspondance ?

Sincèrement tu ferais mieux d'utilisée cette librairie : Arduino-LiquidCrystal-I2C-library.git

Dans le premier code, supprime l'appel à lcd.init() et les paramètres de lcd.begin()

//  lcd.init();
  lcd.backlight();
  lcd.begin();

La librairie new-liquidcrystal est un monstre qui permet d'adresser beaucoup d'afficheurs.
Inutile dans ton cas.