faire un tableau

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!

Essayes un truc comme ça

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

en langage arduino sa donnerai quoi??

La même chose ...

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

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

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ù..

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 :

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

Bein chez moi ça marche directement sans include ni rien

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 );
  
}

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

le probleme c'est que sa bug souvent quand je fais appel au sprintf je ne sais vraiment pas pourquoi :frowning:

voici un de mes programme de test

#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); 
}

autrement voici mon tableau fait a l'arrache :

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 :-[

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

char tableau[8];
dtostrf(valFloat, 7, 5, tableau);
Serial.print(tableau)