Bonjour,
Si c'est ça que tu veux comme interface, ça me va. Il n'y a pas de "mauvaise" solution (juste certaines plus faciles à utiliser et/ou à programmer).
Tu utilisera un bouton séparé pour valider, c'est bien ça?
Du coup, voici ce que je peux te proposer:
comme fonctionnement détaillé :
- si tu appuis sur le bouton pendant une durée comprise entre t1=10ms et t2=500 ms, alors tu fais défiler les mm (avec 0 qui suit 9)
- si tu appuis sur le bouton pendant une durée >= t3=2s, tu commences à incrémenter de 1cm tous les dt4=1s. Du coup, si initialement tu es à 30.0 cm à t=0, à t=2s (=t3) tu sera à 31.0 cm, puis à t=3s(=t3+1*dt4) tu sera à 32.0 cm, puis à t=4s(=t3+2*dt4) tu sera à 33.0 cm
- si le bouton de défilement n'est pas enfoncé, alors (et alors seulement), si tu appuis sur le bouton valider tu valides. Le fait d'exiger que le bouton de défilement est relâché facilitera un peu le code et je trouve ça plus logique (on ne valide pas pendant qu'on est en train de faire défile). Si ce point te dérange, on pourra le modifier
Nb : pour toutes les durées (t1, t2, t3 et dt4, tu peux bien sur choisir n'importe quelle valeur, la seule contrainte est que t1 < t2 <= t3, pas de contrainte sur dt4)
Je te propose qu'on utilise des distances en mm (ça évite les nombres à virgules), et des durées en millisecondes.
Est-ce que pour les affichages tu tiens à ce que ce soit en cm, ou un affichage en mm te convient aussi bien? (ça marche aussi, ce sera juste un poil moins propre)
Une fois que tu as choisis pour millimètres entiers vs centimètres décimaux, tu pourra faire les étapes suivantes :
1) si tu as choisis de tout faire en mm, commence par adapter le code existant (remplace les float par des int, change la valeur initiale de la distance de 30 à 300, et change l'unité "cm" en "mm")
2) Écris une fonction
void afficherDistanceChoisie(TYPE distance)
{
}
où TYPE est "int" ou "float" selon si tu travailles en mm ou en cm.
Cette fonction sert à afficher la distance sélectionnée actuellement : en gros, c'est la même que afficherDistance sauf que le message change (je pense pas que tu veuilles écrire "Butée" quand tu sélectionne la valeur où aller)
3) Écris une fonction
TYPE selectionnerDistance()
{
int distance=300; //ou float=30.0 si tu restes en cm
//à compléter
return distance;
}
Cette fonction permettra au final de faire toute la sélection de la distance, et d'attendre le bouton de validation.
Pour cette étape, je voudrais que la seule chose que tu fasses dedans, c'est de modifier la distance en 400mm (ou 40.0cm) puis afficher la distance (avec la fonction afficherDistanceChoisie) juste avant de renvoyer la distance (le renvoi est déjà fait avec le return).
Pour tester, je te suggère de transformer ton loop en :
void loop()
{
InitMoteur();
TYPE distance=selectionnerDistance();
afficherDistanceChoisie(distance);
}
Si tout vas bien, tu devrais afficher 2 fois d'affilé la valeur 400mm / 40.0cm
4) Tu modifie la fonction selectionnerDistance pour qu'elle attende que tu ais appuyé sur le bouton de validation pour terminer (il faut utiliser une boucle while qui continue tant que le bouton de validation n'est pas enfoncé).
Je te propose que tu commences par ces 4 étapes, je te détaillerais la suite ensuite. Si tu bloques (ou si c'est pas clair), n'hésite pas à demander. Poste ton code final (et ton code intermédiaire si tu bloques ou que ça ne marches pas comme prévu)