probleme d affichage de valeur entree analogique

bonjour

je n arrive pas a afficher sur mon écran tft lcd la valeur précise de mon entrée analogique.

j ai un phmétre avec sortie 4/20mA , une platine électronique convertie le 4/20mA en 0/5vdc.
l échelle du phmétre est 0/14 unités PH, la conversion du 4/20 en 0/5 est correcte.

le problème est que je veux sur l'afficheur 1 chiffre derrière la virgule.
tous ce que je réussi a afficher est 0 a 14 mais pas de chiffre derrière la virgule
(celui-ci ne bouge pas de 0)
si quelqu’un pouvais m'aider ce serait cool.

je mets la partie du code incriminé

int valeurPH = A6; //entree du signal de 0 a 5vdc
                   //4/20mA convertie en 0 / 5vdc
                   // echelle du 4/20mA phmetre 0 a 14 ph 
                   
int tension = 0;
int periodeDeMesure=500;


   //affichage texte PH
      myGLCD.setColor(255, 255, 0); // texte en jaune
      myGLCD.print(F("  PH"), 273, 15);
      
  // void loop(){   
         int valeurLue = analogRead (valeurPH);
   float tensionLue = map(valeurLue, 0.0, 1023.0, 0.0, 14.0);//mise a l echelle du 0 / 5 vdc
                                                             //pour affichage de 0 a 14 unité PH
   
   // affichage de la valeur de ph sur l ecran
   myGLCD.setFont(DotMatrix_M_Num); //font caractere
      myGLCD.setColor(100, 221, 23);// affichage en vert
      myGLCD.printNumF(tensionLue,1, 270, 25);
    delay(periodeDeMesure); //delais d'attendre jusqu'à la prochaine mesure

merci
cordialement
patrick

C'est bizarre, je ne vois pas de problème avec ton appel à printNumF (bibliothèque UTFT).

void printNumF(double num, byte dec, int x, int y, char divider='.', int length=0, char filler=' ');


As-tu vérifié que tensionLue a bien des chiffres après la virgule ?

Fais

Serial.println (tensionLue ,1);

Quel Arduino utilises-tu ?

Bonjour,

Le problème vient peut être de la déclaration de valeurLue qui est un int.
Essayez avec un float

bonjour,

le type utilisé n'a rien à voir :

The map() function uses integer math so will not generate fractions, when the math might indicate that it should do so. Fractional remainders are truncated, and are not rounded or averaged.

il faudrait faire le calcul "à la main" avec des float

Le problème vient peut être de la déclaration de valeurLue qui est un int.

analogRead retourne un int, donc valeurLue doit être un int.

Il faut décomposer l’opération. Pour obtenir la tension :

float voltage = valeurLue * 5.0 / 1023;

Si 0V correspond à PH 0.0 et 5V correspond à PH 14.0 → faire une règle de trois pour obtenir le PH.

faire une règle de trois pour obtenir le PH.

Les jeunes ne vont pas te comprendre : la règle de 3 n'existe plus, il faut dire "produit en croix". :slight_smile:

Tout dépend donc de son âge ...
:slight_smile: