Page 1 sur 1

Probleme type de données  [RESOLU]

Posté : ven. 17 juin 2016 20:47
par EVOTk
Bonjour,

Débutant en C++, je ne sait pas comment manipuler les types de données et se que je trouve sur internet n'est pas tres clair a se sujet ?!

Code : Tout sélectionner

      unsigned long fin_tps_test = millis();
      unsigned long tps_test = fin_tps_test - debut_tps_test;
      double tps_h_test = tps_test / 3600000;
      double tension_moy = tension_total / nb_test;
      double mamp_moy = ( tension_moy / resistance ) / 1000;
      double capacite = mamp_moy * tps_h_test;
      
      
      lcd.clear();
      lcd.home();
      lcd.print("TEST FINI");
      lcd.setCursor(0, 1);
      lcd.print(tps_h_test);
      lcd.setCursor(0, 2);
      lcd.print(tension_moy);
      lcd.setCursor(0, 3);
      lcd.print(capacite);
      lcd.print(" mAh");
Dans se test, tps_h_test m'affiche 0.00, normal car la valeur est 0.0041666 mais dans se cas, comment lui faire afficher le nombre jusqu’à 6 après la virgule par exemple ?
Edit:
En faite, le soucis est peut etre pluot que je divise dans un "double" un "unsigned" avec "3600000"

Re: Probleme type de données

Posté : ven. 17 juin 2016 22:45
par destroyedlolo
Salut,

Je ne sais pas comment fonctionne ton compilo, mais il y a des chances que :

Code : Tout sélectionner

tps_test / 3600000;
reste un entier et comme le résultat est <1, arrondit à un entier ca donne 0.

J'essaierai de faire un cast histoire que tous les calculs se fassent en flottant.

Code : Tout sélectionner

double tps_h_test = (double)tps_test / 3600000.0;

Re: Probleme type de données

Posté : sam. 18 juin 2016 08:25
par guillaume9344
Bonjour,
il y a aussi la fonction lcd.print() qui peut couper le résultat 2 chiffre aprés la virgule.
pour en étre sur , faire :

Code : Tout sélectionner

lcd.print("0.123456");
Vous étes toujours sur arduino IDE? voir peut etre la doc de la fonction lcd.
Je crois aussi me souvenir que l'IDE posséde une interface série , peut etre est il possible d'envoyer des infos de débugage avec la fonction cout du c++ (équivalent à un printf mais qui accepte tous les type de variable en entrée et les convertis pour l'affichage.

@+

Re: Probleme type de données

Posté : sam. 18 juin 2016 09:20
par EVOTk
Effectivement,
Si je fait un test :

Code : Tout sélectionner

#include <Wire.h>  // This library is already built in to the Arduino IDE
#include <LiquidCrystal_I2C.h> //This library you can add via Include Library > Manage Library > 
LiquidCrystal_I2C lcd(0x3F, 20, 4);

double test = 0.123456789;
uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0};
  
void setup()  {
  lcd.init();                     
  lcd.backlight();
  lcd.createChar(1, heart);
}
  
void loop()  {
  lcd.home();
  lcd.print("   Hello World !!");
  lcd.setCursor(1, 1);
  lcd.write(byte(1));
  lcd.print(" Test LCD 4x20 ");
  lcd.write(byte(1));
  lcd.setCursor(0, 2);
  lcd.print("0.123456789");
  lcd.setCursor(0, 3);
  lcd.print(test); 
}
L'ecran m'affiche sur la 3eme ligne : 0.123456789 et sur le 4eme : 0.12

@destroyedlolo :

Merci pour l'histoire du cast. Je les mis en place, maintenant le calcul se fait meme il est arrondi a .00 a cause de lcdprint.

Re: Probleme type de données

Posté : sam. 18 juin 2016 13:20
par guillaume9344
EVOTk a écrit :Effectivement,
Si je fait un test :

L'ecran m'affiche sur la 3eme ligne : 0.123456789 et sur le 4eme : 0.12
il semble que la fonction lcd.print coupe les variables 2 chiffres aprés la virgule , mais affiche correctement les chaines de carractéres (lcd.print("0.123456879")
donc une solution est de convertir le double en chaine de caractéres :

Code : Tout sélectionner

#include <iostream>   
#include <string>
using namespace std;

double test = 0.123456789;
lcd.print(to_string(test));

@+

Re: Probleme type de données

Posté : sam. 18 juin 2016 13:30
par EVOTk
@ guillaume9344

merci pour cette précision !