Go Down

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

romain

Jun 04, 2010, 05:36 pm Last Edit: Jun 05, 2010, 11:39 am by freeman32 Reason: 1
bonjour

je souhaiterais faire un tableau de ce type à l'aide d'un terminal :

Vitesse                    | Courant
consigne: 10              | consigne: 20
mesure:  20               | mesure: 60
...
et les valeurs sont bien sur variables
merci d'avance!

Franxoois

Essayes un truc comme ça

Code: [Select]
char ascii[32];
sprintf(ascii,"consigne: %d \t| consigne: %d",consigneV,consigneC);
Serial.print(ascii);


romain

en langage arduino sa donnerai quoi??

B@tto

Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

romain

hein mais comment il est possible de faire un sprintf avec arduino??

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

romain

#10
Jun 11, 2010, 10:07 am Last Edit: Jun 11, 2010, 10:10 am by freeman32 Reason: 1
le probleme c'est que sa bug souvent quand je fais appel au sprintf je ne sais vraiment pas pourquoi :(

romain

#11
Jun 11, 2010, 10:20 am Last Edit: Jun 11, 2010, 10:21 am by freeman32 Reason: 1
voici un de mes programme de test
Code: [Select]
#define HOME 1

char ascii[32];
char ascii1[32];
int consigneV,consigneC,consigneV2,consigneC2;

void setup() {
Serial.begin(9600);
consigneV=20;
consigneC=30;
consigneV2=60;
consigneC2=70;
}

void loop() {
Serial.print(HOME,BYTE);
sprintf(ascii,"consigne: %d \t| consigne: %d \n",consigneV,consigneC);
sprintf(ascii1,"consigne2: %d \t| consigne2: %d",consigneV2,consigneC2);
Serial.print(ascii);
}



romain

autrement voici mon tableau fait a l'arrache :
Code: [Select]
Serial.print(HOME,BYTE);
 Serial.print("vitesse");Serial.print("                         | ");Serial.println("courant");
 Serial.print("consigne(cv): ");Serial.print(ConsigneVitesse, DEC);Serial.print("\t| ");Serial.print("consigne(cc): ");Serial.println(ConsigneCourant, DEC);
 Serial.print("Mesure(en V): ");Serial.print(MesureVitesse, DEC);Serial.print("\t| ");Serial.print("Mesure(en A): ");Serial.println(MesureCourant, DEC);
 Serial.print("Kp(kpv): ");Serial.print(chiffreKpv, DEC);Serial.print("\t                | ");Serial.print("Kp(kpc): ");Serial.println(chiffreKpc, DEC);
 Serial.print("Ki(kiv): "); Serial.print(chiffreKiv, DEC);Serial.print("\t                | "); Serial.print("Ki(kic): "); Serial.println(chiffreKic, DEC);
 Serial.print("Kd(kdv): "); Serial.print(chiffreKdv, DEC);Serial.print("\t                | ");Serial.print("Kd(kdc): "); Serial.println(chiffreKdc, DEC);
 Serial.print("AUTO/MANUAL(1/0)(amv): ");Serial.print(chiffreAmv);Serial.print("\t| ");Serial.print("AUTO/MANUAL(1/0)(amc): ");Serial.println(chiffreAmc);
 

il marche mais j'ai souvent des bugs :-[

Jean-François

#13
Jan 09, 2011, 10:47 am Last Edit: Jan 09, 2011, 10:47 am by jfs Reason: 1

La fonction dtostrf() permet de passer un float dans un tableau de char.

Code: [Select]
char tableau[8];
dtostrf(valFloat, 7, 5, tableau);
Serial.print(tableau)
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Go Up