modifier des consignes de temperature via afficheur lcd et boutons

bonjour à tous,

j' ai coder une régulation de chauffage de type "loi d'eau" et d'eau chaude sanitaire, avec gestion de la production solaire, du poêle à bois bouilleur et de la résistance électrique d'appoint.
Les températures mesurées sont affiché sur un écran LCD I2C.

d'après mes tests tout fonctionne bien.

Pour compléter mon code je souhaiterai pouvoir modifier les consignes de températures ( d'ambiance, ECS, de fumée , limite de sur-chauffe, et ballon haut)

Voila un moment que je fait des recherches, des tests, mais je n'y arrive pas.
Je ne comprend pas comment afficher un menu "réglages" et modifier mes variables de temperatues.

voici mon code de départ : (en pièces jointe, il ne passe pas)

si quelqu'un pouvais m'aider ?

reguleChauffage.cpp (9.98 KB)

Je suis en train de chercher a comprendre comment fonctionne la librairie MenuBackend.

mon code :

#include <MenuBackend.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include "Menu.h"

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

/** Fonction retournant le bouton appuyé (s’il y en a un). */
Button_t readPushButton(void) {
 
  /* Lecture de l'entrée A0 */
  unsigned int val = analogRead(A0);
 
  /* Test suivant les fourchettes de valeurs */
  if (val > 1000) return BP_NONE;
  if (val < 50) return BP_RIGTH;  
  if (val < 195) return BP_UP; 
  if (val < 380) return BP_DOWN; 
  if (val < 555) return BP_LEFT; 
  if (val < 790) return BP_SELECT;
 
  /* Par défaut aucun bouton n'est appuyé */
  return BP_NONE;
};

//On crée l'objet du menu principal
MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent);
	//On crée les objets de chaques éléments du menu
	MenuItem reglages = MenuItem("Reglages");
		MenuItem ambiance = MenuItem("Ambiance");
		MenuItem ECS = MenuItem("ECS");
                MenuItem fumee = MenuItem("Fumee");
                MenuItem surChauffe = MenuItem("SurChauffe");
                MenuItem ballonHaut = MenuItem("BallonHaut");


	MenuItem options = MenuItem("Options");
		MenuItem setDelay = MenuItem("Delay");
			MenuItem d100 = MenuItem("100 ms");
			MenuItem d200 = MenuItem("200 ms");
			MenuItem d300 = MenuItem("300 ms");
			MenuItem d400 = MenuItem("400 ms");



//On crée / initialise les éléments au menu et les relations (gauche, droite, haut, bas)
void menuSetup()
{
	Serial.println("Setting up menu...");
	//add the file menu to the menu root
	menu.getRoot().add(reglages); // Il faut ajouter cette fonction dans le fichier :
	menu.getRoot().add(ambiance);
        menu.getRoot().add(ECS);
        menu.getRoot().add(fumee);

                reglages.addBefore(options);
		//setup the settings menu item
		reglages.addRight(ambiance);
                ambiance.addRight(ECS);
                ECS.addRight(fumee);
                fumee.addRight(surChauffe);
			//we want looping both up and down
			//pin.addBefore(debug);
			//ECS.add(fumee);
			//we want a left movement to pint to settings from anywhere
			reglages.addLeft(ambiance);
			ambiance.addLeft(ECS);
                        ECS.addLeft(surChauffe);
                        surChauffe.addLeft(ballonHaut);
         menu.moveDown();//On ce déplace du menu root, vers le menu Settings (setings est en dessous du menu root)
}
         //Si on a apeler la fonction menu.Use()
void menuUseEvent(MenuUseEvent used)
{
        lcd.setCursor(0,0);
        lcd.print("You used        ");
        lcd.setCursor(0,1);
        lcd.print(used.item.getName());
        refresh(menu.getCurrent());
}
void menuChangeEvent(MenuChangeEvent changed)
{
	Serial.print("Menu change ");
	Serial.print(changed.from.getName());
	Serial.print(" -> ");
	Serial.println(changed.to.getName());
	
    MenuItem newMenuItem=changed.to; //get the destination menu
    refresh(newMenuItem);
}
//La fonction qui va ce charger de "rafraichir" l'affichage du LCD lors d'un changement de menu
void refresh(MenuItem newMenuItem)
{
        Serial.println("refresh !");
        clearLine(1);
        lcd.setCursor(0,1); //set the start position for lcd printing to the second row
        if(newMenuItem.getName()==menu.getRoot().getName())
        {
            lcd.print("Main Menu        ");
        }
        else if(newMenuItem==reglages)
        {
            lcd.print("Reglages");
        }
        else if(newMenuItem==ambiance)
        {
            lcd.print("Ambiance");
        }
        else if(newMenuItem==ECS)
        {
            lcd.print("ECS");
        }
        else if(newMenuItem==fumee)
        {
            lcd.print("Fumee");
        }
      /*  else if(newMenuItem==setDelay)
        {
            lcd.print("Delay");
        }
        else if(newMenuItem==d100)
        {
            lcd.print("100 ms");
        }
        else if(newMenuItem==d200)
        {
            lcd.print("200 ms");
        }
        else if(newMenuItem==d300){
            lcd.print("300 ms");
        }
        else if(newMenuItem==d400){
            lcd.print("400 ms");
        }*/
}
void clearLine(byte line)
{
  lcd.setCursor(0, line);
  lcd.print("                ");
  lcd.setCursor(0, line);
}
void setup()
{
    lcd.begin(16, 2);
	menuSetup();
    lcd.setCursor(0,0);
    lcd.print("Start");
   // keypad.setDebounceTime(150);//Le temps d'appuis entre chaque touche, pour éviter les anti-rebond
    Serial.begin(9600);
    Serial.print("start");
}
void loop()
{
  char key = readPushButton(); //keypad.getKey();
  if (key != BP_NONE);// NO_KEY)
  {
    switch(key)
    {
      case 'BP_UP'://Up
        menu.moveUp();
        break;
      case 'BP_LEFT'://Left
        menu.moveLeft();
        break;
      case 'BP_RIGTH'://Right
        menu.moveRight();
        break;
      case 'BP_DOWN'://Down
        menu.moveDown();
        break;
      case '*':
        menu.moveBack();
        break;
      case 'BP_SELECT':
        menu.use();
        break;
    }
  }
}

mon écran est bloqué sur l'affichage :

Start
 Fumee

bon j'ai un peut avancé. Maintenant j'ai des problèmes de rebond ! et pas de condo de 10nano F.
si quelqu'un sait où je peut mettre un délais ?

Pour me faire la conversation :

Mes menus sont fonctionnels.
Les problèmes de délais sont réglés.

Reste à faire :
trouver la (les) solution(s) pour incrémenter les consignes par un appuis bouton.

Bonjour

moi je suis tres interreser par votre travail, car je veux exactement faire quoi vous faite pour un systeme de chauffage et climatisation dans une ecurie (cheveaux) mais juste une chose je suis un debutant genre nul mais me connait tres bien en programmation et en info et electronique.

j'aurait quelque questiona vous poser si vous voulez bien m'aider ????

merci bcp a l'avance