J'ai fais les essais du nouveau code et dès le téléversement, l'écran affiche "Butée" suivis de clignotement anarchique .
Il y a trop de de chose qui me mélange quand je relie ce code pour comprendre son fonctionnement .
a) Je peux supposé qu'il y a conflit avec l'affichage de l'écran entre le setup et l'affichage de la variable "distance "( Pour info, le code d'affichage de l'ecran écrit dans le setup est devenu inutile pour moi maintenant) .
Non, le setup n'y est très probablement pour rien (il n'est exécuté qu'une fois, donc ne peut pas "contredire" ce qui se fait dans le loop.
J'ai jamais utilisé d'afficheur LCD (j'en ai jamais eu l'utilité), mais il est possible qu'il faille un peu de temps pour rafraichir l'affichage : vu que tu rafraichi l'affichage à chaque tour du loop, et qu'un tour de loop vas très vite, bah ça clignote vite.
Pour vérifier si c'est ça, deux petits tests :
- si tu appuis sur le bouton d'incrémentation des cm, ça continue à clignoter?
- si tu rajoute un delay(5000) à la fin du loop, est-ce que ça reste affiché pendant 5 secondes avant de disparaitre pour un très court instant (<0.1s)?
Si la réponse aux deux questions est oui, alors c'est probablement ça.

La raison est que ce n'est pas UNE variable unique, mais TROIS variables DISTINCTES : simplement, on se débrouille pour copier les valeurs de l'une vers l'autre.
c)
void loop() {
static float maDistance = 30; // Variable qui va stocker la distance de consigne
initMoteur (); // Repositionne le moteur si jamais on appuis sur le bouton
maDistance = ReglageAffichageDistance (maDistance); // Stock le résultat de la distance modifiée
AfficherLaDistance(maDistance); // on met à jour l'affichage
}
1) le "static" devant "float maDistance = 30;" : ça fait qu'au premier tour du loop, on donne la valeur 30.0 à maDistance, mais aux tours suivant, maDistance garde sa valeur
2) "ReglageAffichageDistance (maDistance);" : on passe la valeur de maDistance à la fonction ReglageAffichageDistance (ie on la copie dans startValue) : de cette manière, on peut reprendre le réglage là où on en était
3) "maDistance = ReglageAffichageDistance (maDistance);" : on récupère le résultat de ReglageAffichageDistance (ie la valeur de la variable NouvelleDistance, qu'on renvoi avec return) et on le stocke dans maDistance.
Pour résumer 2 et 3), on actualise la valeur de maDistance, en fonction de son ancienne valeur et des appuis sur les boutons