Texte sur écran LCD qui clignote faiblement

Bonjour,

Pour étalonner un capteur (pHmètre DFRobot SEN0161 pour être exact), j'utilise une fonction dédiée etalonnage : comme il me faut 2 points d'étalonnage (pH=7 et pH=4 ou 10), j'ai rajouté une variable de type byte pour savoir quel point d'étalonnage est en cours. En fonction de la valeur prise j'affiche lavaleur du tampon 7 ou du tampon 4/10 (selon les manips, il faut parfois 4 parfois 10 donc j'ai converti en string pour l'affichage)

void setup()
{
  //initialisation de la liaison série, du module pH et du lcd et du capteur de température
  ph.begin();
  lcd.init(); // initialisation de l'afficheur

while (testEtalonnage == 0)
  {
    etalonnage(7);
  }
  testEtalonnage = 0;
  
  while (testEtalonnage == 0)
  {
    etalonnage(4);
  }
}
void etalonnage(byte valtampon) //fonction qui lance la procédure d'étalonnage du capteur
{
  lcd.clear();
  String tampon;
  if (valtampon == 7)
    tampon = "7";
  else
    tampon = "4/10";

  //Affichage sur LCD par fonction
  affiche_texte_lcd(5, 0, "ETALONNAGE");
  delay(1000);
  affiche_texte_lcd(0, 1, "Plonger sonde dans");
  affiche_texte_lcd(0, 2, "sol. tampon pH=");
  affiche_texte_lcd(15, 2, tampon);
  affiche_texte_lcd(0, 3, "Appuyer ENTER si OK");
}

void affiche_texte_lcd(byte caractere, byte ligne, String texte)
{
  lcd.setCursor(caractere, ligne);
  lcd.print(texte);
}

En lançant le programme, le texte à partir de "Plonger sonde" clignote en étant faiblement éclairé (alors que le texte ETALONNAGE s'affiche sans clignoter et correctement éclairé)
Le problème vient des premières lignes de la fonction etalonnage car quand je les enlève (en enlevant également l'affichage de la variable tampon), le texte ne clignote plus.

Pourquoi est-ce que cela se produit ?

Merci pour votre aide

vous allez resté coincé dans le while, puisque testEtalonnage n'est jamais modifié.... et ça affiche un texte constant... ça sert à quoi de l'appeler en boucle ? (ça clignote car vous effacez l'écran et ré-affichez)

vous n'avez sans doute pas partagé le vrai code

vous n'avez pas non plus besoin de la classe String, faites juste

void affiche_texte_lcd(byte caractere, byte ligne, const char* texte)
{
  lcd.setCursor(caractere, ligne);
  lcd.print(texte);
}

void messageEtalonnage(byte valtampon) //fonction qui affiche la procédure d'étalonnage du capteur
{
  lcd.clear();
  affiche_texte_lcd(5, 0, "ETALONNAGE");
  affiche_texte_lcd(0, 1, "Plonger sonde dans");
  affiche_texte_lcd(0, 2, "sol. tampon pH=");
  if (valtampon == 7)
    affiche_texte_lcd(15, 2, "7");
  else
    affiche_texte_lcd(15, 2, "4/10");
  affiche_texte_lcd(0, 3, "Appuyer ENTER si OK");
}

où même

void affiche_texte_lcd(byte caractere, byte ligne, const char* texte)
{
  lcd.setCursor(caractere, ligne);
  lcd.print(texte);
}

void messageEtalonnage(byte valtampon) //fonction qui affiche la procédure d'étalonnage du capteur
{
  lcd.clear();
  affiche_texte_lcd(5, 0, "ETALONNAGE");
  affiche_texte_lcd(0, 1, "Plonger sonde dans");
  affiche_texte_lcd(0, 2, (valtampon == 7) ? "sol. tampon pH=7" : "sol. tampon pH=4/10");
  affiche_texte_lcd(0, 3, "Appuyer ENTER si OK");
}

si vous voulez regrouper en fonction de la valeur de byte dans une opération ternaire

J-M-L:
vous allez resté coincé dans le while, puisque testEtalonnage n'est jamais modifié.... et ça affiche un texte constant... ça sert à quoi de l'appeler en boucle ? (ça clignote car vous effacez l'écran et ré-affichez)

vous n'avez sans doute pas partagé le vrai code

Je n'ai extrait qu'une partie de mon code, il reste toute la procédure d'étalonnage (la suite de la fonction) à l'issue de laquelle la variable testEetalonnage est mise à jour.
J'ai essayé

void etalonnage(byte valtampon) //fonction qui lance la procédure d'étalonnage du capteur
{
  //Affichage sur LCD par fonction
  affiche_texte_lcd(5, 0, "ETALONNAGE");
  delay(1000);
  affiche_texte_lcd(0, 1, "Plonger sonde dans");
  affiche_texte_lcd(0, 2, "sol. tampon pH=");
  if (valtampon == 7)
    affiche_texte_lcd(15, 2, "7");
  else
    affiche_texte_lcd(15, 2, "4/10");
  affiche_texte_lcd(0, 3, "Appuyer ENTER si OK");

qui fonctionne (problème du lcd.clear() apparemment, ce qui peut se comprendre car le texte n'avait pas le temps de s'afficher complètement en bouclant).
Merci

Bonjour,

Dans la première version, il y a un delay(1000) après l'affichage de "ETALONNAGE"
Donc l'écran est effacé pendant un court instant et le message "ETALONNAGE" est affiché pendant au moins 1 seconde et l'effacement ne se voit pas.
Alors que pour les autres messages ils sont effacés pendant au moins une seconde et affiché un court instant donc il clignote.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.