analogRead et valeur sur LCD, stabilité

Bonjour,

Je suis en train d'essayer de reporter la valeur lue par une entrée analogique sur un écran LCD, mais je rencontre quelques soucis de stabilité. La valeur est modifiée avec un potentiomètre de 10k ohm.

int value;
 void setup () {... }
 void loop {

value = analogRead (analogPin);
lcd.setCursor(0, 1);
lcd.print  (value, DEC);
}

Le premier problème avec ce code est que l'écran est rafraîchi à chaque cycle, ce qui est un peu inutile. Le 2ème problème est que parfois, il y a une hésitation entre 2 valeurs et donc l'affichage change en permanence de 228 à 229 par exemple, ce qui le rend illisible. Le 3ème problème est que l'écran n'est pas rafraîchi et donc quand je passe de 1000 à 25, les 2 derniers 0 du 1000 restent affichés.

J'ai donc écrit le code suivant pour essayer de faire face à tout ça :

int value;
int previous_value;
 void setup () {... }
 void loop {

value = analogRead (analogPin);

if (previous_value != value) {            // Si il y a un changement de valeur

previous_value = value;
lcd.clear ();                                    // Reset de l'écran
lcd.setCursor(0, 1);
lcd.print  (value, DEC);
}
}

Avec ce code j'ai de nouveau le problème de l'hésitation entre 2 valeurs. La lecture est aussi difficile à cause du rafraîchissement quand je tourne le potar.

Ce que j'aimerais, c'est à la fois un affichage fluide, précis et instantané de la valeur sur le LCD. Je tiens à préciser que je ne peux pas utiliser de delay ().

Y a-t-il une solution à ça ? Merci d'avance :)

kevo: Ce que j'aimerais, c'est à la fois un affichage fluide, précis et instantané de la valeur sur le LCD. Je tiens à préciser que je ne peux pas utiliser de delay ().

Y a-t-il une solution à ça ? Merci d'avance :)

Bonjour Il y a là quelques conditions un peu antinomiques :grin: appliquer un peu de filtrage numerique , genre Vaff= 0.85 n + 0.15 n-1 discuté récemment sur le forum faut juste retrouver les topics :grin:

Au lieu d'utiliser delay() tu mets tes fonctions d'affichage dans une boucle avec la fonction millis() (voir blink w/out delay).

Haha oui, je suis très exigeant dès fois :grin: Je vais un peu trifouiller sur le forum !

Tu peux effacer les deux derniers 00 avec un affichage de type "25 " en rajoutant deux espaces vide derrière le "25". Ce sera mieux que d'utiliser lcd.clear sans arrêt.

Très bonne idée, ça résout déjà 1 problème, merci ;-) Le delay sans delay () ne semble pas nécessaire pour l'instant alors. Mais il pourrait me servir pour d'autres fonctions.

Il me reste plus que le souci de stabilité, je vais me renseigner sur le filtrage numérique.

Ou en es tu sur la stabilité de ton affichage, j'ai le même soucis...

Est-ce que le fait d'utiliser un autre potentiometre (genre 50k) permettrait d'avoir une meilleur stabilité de l'affichage ?