Nombre du moniteur série au format anglais export format français

Bonjour,
Je suis enseignant, Regressi est un tableur scientifique surtout utilisé au lycée en sciences physiques.
J'utilise Arduino pour par exemple mesurer la durée d'une expérience (durée) et une associée tension (Ucnum). A l'aide d'un programme adapté j'obtiens dans le moniteur série :

duree Ucnum
s
0 0
101 92
201 174
302 249
402 318

Je copie l'ensemble de ce tableau dans le presse papier. Si je colle directement ce tableau dans le tableur Regressi cela ne marche pas ....
les nombres issuent d'Arduino étant au format ango-saxon 3.00 alors que Regressi reconnait uniquement le format français 3,00
Je suis obliger de passer par excell (ou mieux openoffice) pour effectuer la conversion et là ça marche. Mais c'est pas terrible....

Ma question, il y a t-il un moyen pour exprimer directement les nombres d'arduino avec le format français (utilisation d'une virgule au lieu d'un point pour les décimales) ?
Merci d'avance pour votre réponse
Jean Rio

Bonjour,

Les nombres en C/C++ sont au format anglo saxon.

Si tu veux des virgules il faut substituer le . à , dans une chaine de caractères.

  • tu convertis ton nombre en chaine de caractères
  • tu recherches le point dans la chaine
  • tu le remplaces par une virgule
  • tu envoies la chaine modifiée sur la liaison série.

Merci pour cette réponse rapide.
J'ai fait quelques recherches, déjà pour convertir un nombre en chaine de caractère cela demande un peu de travail ....tout du moins un peu d'habitude en code C++...

A défaut je vai me contenter de la méthode open office.....

C'est pourtant assez simple.
Un petit exemple

  float val = 12.24;
  char str[10];
  dtostrf(val, 6, 2, str);
  char *p = strchr(str, '.');
  if (p != nullptr)
    *p = ',';
  Serial.println(str);

dotostrf() c'est pour processeur AVR. Si c'est pour un autre processeur (par exemple esp32) tu peux utiliser sprintf()

Bonjour rio42

Voilà la version Arduino, c'est décrit ici.

	float varFloat = 46.35;     // Variable flotante
	String varFloatStr = String(varFloat);     // En chaîne de caractère 
	varFloatStr.replace(".", ",");     // Remplacer point par virgule

	Serial.println(varFloatStr);

Cordialement
jpbbricole

Super,
Merci pour vos réponses rapides.
Avec un peu d'avance bonne année
J Rio

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.