Problème affichage TFT pourcentage

Bonjour à tous je vous explique mon problème.

J'apprends depuis peu à me servir de l'écran TFT.

Tout se passe bien pour le moment sauf que quand j'ai un affichage en "pourcentage" il y a toujours un 0 qui reste devant (ex : 04% )

où il reste il reste affiché trois chiffres (ex : 480 au lieu de 48%) donc c'est illisible..

PS : je suis débutant et je vais composer mon code de jour en jour.

Je ne sais absolument pas où ça va mener, j'essaye d'intégrer un petit peu tout et n'importe quoi c'est histoire de passer le temps et apprendre.

Sinon pour le moment le code fonctionne sur un écran TFT divisé en quatre.

Une fois le problème résolu de l'affichage du pourcentage j'aimerais commencer à apprendre à faire un affichage avec la fonction tactile pour faire des sous menu.

///////////////////////TFT NE PAS TOUCHER ////////////////////////////
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

#define TFT_CLK 13
#define TFT_MISO 12
#define TFT_MOSI 11
#define TFT_DC 9
#define TFT_CS 10
#define TFT_RST 8
#define largeur 240
#define longuer 320

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
///////////////////////TFT NE PAS TOUCHER ////////////////////////////


///////////////////////SONDE 1////////////////////////
  const int ValeursecheA0 = 494;              //CHANGER de valeur haute humide apres test
  const int ValeurhumideA0 = 216;             //CHANGER Valeur base seche apres test

  int SondeanalogPinA0 = A0;                  // PIN A0 pour le capteur de l’humidité du sol
  int SondedigitalValA0;                      // Lecture de la sonde
/////////////////////////////////////SONDE 1////////////

//////////////////////SONDE 2////////////////////////
  const int ValeursecheA1 = 494;              //CHANGER de valeur haute humide apres test
  const int ValeurhumideA1 = 216;             //CHANGER Valeur base seche apres test

  int SondeanalogPinA1 = A1;                  // PIN A1 pour le capteur de l’humidité du sol
  int SondedigitalValA1;                      // Lecture de la sonde
/////////////////////////////////////SONDE 2////////////


///////////////////////SONDE 3////////////////////////
  const int ValeursecheA2 = 498;              //CHANGER de valeur haute humide apres test
  const int ValeurhumideA2 = 382;             //CHANGER Valeur base seche apres test
  
  int SondeanalogPinA2 = A2;                  // PIN A2 pour le capteur de l’humidité du sol
  int SondedigitalValA2;                      // Lecture de la sonde
/////////////////////////////////////SONDE 3////////////

/*
///////////////////////SONDE 4////////////////////////
  const int ValeursecheA3 = 490;              //CHANGER de valeur haute humide apres test
  const int ValeurhumideA3 = 219;             //CHANGER Valeur base seche apres test

  int SondeanalogPinA3 = A3;                  // PIN A3 pour le capteur de l’humidité du sol
  int SondedigitalValA3;                      // Lecture de la sonde
/////////////////////////////////////SONDE 4////////////
*/
//////////////////////Convertion en %//////////////////////
  int ValeurPourcentageA0 = A0;                 //Sonde1 pin A0
  int ValeurPourcentageA1 = A1;                 //Sonde1 pin A1
  int ValeurPourcentageA2 = A2;                 //Sonde1 pin A2
  int ValeurPourcentageA3 = A3;                 //Sonde1 pin A3
//////////////////////Convertion en %//////////////////////

void setup() 
{

  Serial.begin(9600); 

 ///////////////////////TFT NE PAS TOUCHER ////////////////////////////
  tft.begin();
  tft.setRotation(3);
  tft.fillScreen(ILI9341_BLACK);

  //HAUT GAUCHE
  tft.setTextColor(ILI9341_GREEN);
  tft.setTextSize(3);
  tft.setCursor(20,10);
  tft.println("Bananier");

  //HAUT DROITE
  tft.setTextColor(ILI9341_GREEN);
  tft.setTextSize(3);
  tft.setCursor(210,10);
  tft.println("Oliver");

  //BAS GAUCHE
  tft.setTextColor(ILI9341_GREEN);
  tft.setTextSize(3);
  tft.setCursor(20,140);
  tft.println("Monstera");

  //BAS DROITE
  tft.setTextColor(ILI9341_GREEN);
  tft.setTextSize(3);
  tft.setCursor(195,140);
  tft.println("Yucca");
  
  //CENTRE ECRAN
  tft.drawLine (0, 120, 320 ,120 ,ILI9341_WHITE);   
  tft.drawLine (155, 0, 155 ,340 ,ILI9341_WHITE);
  tft.drawCircle(155, 120, 31 ,ILI9341_WHITE);
  tft.fillCircle(155, 120, 30 ,ILI9341_BLACK);
  
  tft.setTextColor (ILI9341_WHITE);
  tft.setTextSize (5);
  tft.setCursor (145,103);
  tft.println ("%"); 

///////////////////////TFT NE PAS TOUCHER ////////////////////////////
}

void loop() {

////////////////////// SONDE 1 //////////////////////////// 
 
  int ValeurPourcentageA0 = A0;
  ValeurPourcentageA0 = map (analogRead(SondeanalogPinA0), ValeursecheA0, ValeurhumideA0, 0, 99); //map(valeur, deValeurbasse, deValeurHaute, versValeurBasse, vers ValeurHaute);
  Serial.print("Sonde 1 : ");  Serial.println(analogRead(A0)); 
  Serial.print(ValeurPourcentageA0);
 
  tft.setTextColor(ILI9341_WHITE,ILI9341_BLACK);
  tft.setTextSize(4);
  tft.setCursor(50, 60);
  tft.println(ValeurPourcentageA0);
/////////////////////// SONDE 1 ////////////////////////////

  
/////////////////////// SONDE 2 ////////////////////////////
  int ValeurPourcentageA1 = A1;
  ValeurPourcentageA1 = map (analogRead(SondeanalogPinA1), ValeursecheA1, ValeurhumideA1, 0, 99); //map(valeur, deValeurbasse, deValeurHaute, versValeurBasse, vers ValeurHaute);
  Serial.print("Sonde 2 : "); Serial.println(analogRead(A1)); 
  
  tft.setTextColor(ILI9341_WHITE,ILI9341_BLACK);
  tft.setTextSize(4);
  tft.setCursor(220, 60);
  tft.println(ValeurPourcentageA1);
/////////////////////// SONDE 2 ////////////////////////////


/////////////////////// SONDE 3 ////////////////////////////
  int ValeurPourcentageA2 = A2;
  ValeurPourcentageA2 = map (analogRead(SondeanalogPinA2), ValeursecheA2, ValeurhumideA2, 0, 99); //map(valeur, deValeurbasse, deValeurHaute, versValeurBasse, vers ValeurHaute);
  Serial.print("Sonde 3 : "); Serial.println(analogRead(A2)); 

 
  tft.setTextColor(ILI9341_WHITE,ILI9341_BLACK);
  tft.setTextSize(4);
  tft.setCursor(50,180);
  tft.println(ValeurPourcentageA2);
/////////////////////// SONDE 3 ////////////////////////////

/////////////////////// SONDE 4 ////////////////////////////
  int ValeurPourcentageA3 = A3;
  ValeurPourcentageA3 = map (analogRead(SondeanalogPinA3), ValeursecheA3, ValeurhumideA3, 0, 99); //map(valeur, deValeurbasse, deValeurHaute, versValeurBasse, vers ValeurHaute);
  Serial.print("Sonde 4 : ");  Serial.println(analogRead(A3)); 
  
  tft.setTextColor(ILI9341_WHITE,ILI9341_BLACK);
  tft.setTextSize(4);
  tft.setCursor(210,180);
  tft.println(ValeurPourcentageA3);
  delay(50);
/////////////////////// SONDE 3 ////////////////////////////  

}

Bonjour,

Avec ton programme, je ne comprend pas comment il peut y avoir un 0 qui reste devant. S'il reste des chiffres de l'affichage précédent c'est forcément derrière.

Pour solutionner le problème il faut

  • s'assurer que le pourcentage est bien entre 0 et 99 avec constrain
  • si la valeur est inférieure à 10 afficher un espace derrière pour effacer in éventuel chiffre restant
  ////////////////////// SONDE 1 ////////////////////////////
  ValeurPourcentageA0 = map (analogRead(SondeanalogPinA0), ValeursecheA0, ValeurhumideA0, 0, 99); //map(valeur, deValeurbasse, deValeurHaute, versValeurBasse, vers ValeurHaute);
  ValeurPourcentageA0=constrain(ValeurPourcentageA0,0,99);
  Serial.print("Sonde 1 : ");  Serial.print(analogRead(A0)); Serial.print("  ");
  Serial.println(ValeurPourcentageA0);

  tft.setTextColor(ILI9341_WHITE, ILI9341_BLACK);
  tft.setTextSize(4);
  tft.setCursor(40, 60);
  tft.print(ValeurPourcentageA0);
  if (ValeurPourcentageA0<10)
    tft.print("  ");
  /////////////////////// SONDE 1 ////////////////////////////

Remarques:

  int ValeurPourcentageA0 = A0;
  • Il ne faut pas redéfinir en local des variables déjà définies en global
  • Ca sert à quoi d'affecter la valeur A0? Il suffit simplement de définir la variable sans lui affecter de valeur

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