Go Down

Topic: faire un tableau (Read 2 times) previous topic - next topic

romain

bon j'ai essayer en utilisant la biblio stdio sa marche mais seulement une fois sur 10... quelqu'un aura pas une autre solution ?

ekaki

A priori les valeurs type float ne passent pas dans le sprintf avec stdio (?).
Une solution serait de faire passer les valeur de float en ascii avec sprintf(ascii,...
J'ai lu cela quelque part sur le forum UK, je ne sais plus où..

Gaiden

Pour ma part j'utilise ce code pour afficher des nombres décimaux sur mon lcd. (ce n'est pas de moi)

Voila ce que ça donne pour une écriture sur le port série :
Code: [Select]


char buf[12];
double var=1.11;

void setup() {
 Serial.begin(9600);
}

void loop() {
 PrintDouble(var,2);
}


void PrintDouble( double val, byte precision){

 if(val < 0.0){
   Serial.println('-');
   val = -val;
 }

 Serial.print(itoa(val,buf,10));  //prints the int part
 if( precision > 0) {
   Serial.print("."); // print the decimal point
   unsigned long frac;
   unsigned long mult = 1;
   byte padding = precision -1;
   while(precision--)
     mult *=10;

   if(val >= 0)
     frac = (val - int(val)) * mult;
   else
     frac = (int(val)- val ) * mult;
   unsigned long frac1 = frac;
   while( frac1 /= 10 )
     padding--;
   while(  padding--)
     Serial.print("0");
   Serial.println(itoa(frac,buf,10)) ;
 }
}


Si tu as des questions , n'hésite pas



Franxoois

Bein chez moi ça marche directement sans include ni rien
Code: [Select]
void setup()
{
 Serial.begin(9600);
}

void loop()
{
 int val = 18 ;
 
 char buffer[54];
 
 sprintf( buffer , "Je veux afficher %04d" , val );
 
 Serial.println( buffer );
 
 delay( 1000 );
 
}


Gaiden

Perso j'ai pas tester ta maniere, je devrais peut etre le faire avec la routine pour l'affichage de float pour mon lcd  :D

Go Up