Affichage sur moniteur série

Bonsoir,

dans le cadre d'une partie expérimentale, j'utilise un thermocouple pour mesurer la température et un anémomètre à coupelle pour mesurer la vitesse du vent. Le fonctionnement de l'anémomètre est basé le principe d'interruption du champs magnétique (pour chaque tour complet, il y'a une interruption).
Pour l'affichage des deux mesures sur le moniteur série, je l'ai programmé sur deux colonnes (en utilisant juste un espace entre les deux mesures) la température s'affiche par un pas de temps régulier (5 seconde), par contre la vitesse du vent elle s'affiche aléatoirement en terme du temps parcque l'anémomètre ne fait pas de tour par pas de temps constant (la vitesse ne s'affiche pas au même moment que la température, donc les deux paramètres ne s'affichent pas sur la même ligne comme le montre la figure jointe) .
La question est: est ce qu'il y a un moyen de supprimer l'espace entre les lignes montré en rouge sur la figure, sinon lors de l'exploitation des résultats sur Excel, pour tracer une courbe en fonction du temps par exemple, je dois le faire manuellement et ça va me prendre beaucoup de temps.
Ou est ce qu'il y a un moyen de récupérer les données séparément.

Merci d'avance pour votre aide.

tempsnip

Une solution pourrait être :

  1. Initialiser 2 variables A et B à "-9999".
  2. Stocker la mesure de température dans la variable A.
  3. Attendre la mesure de la vitesse et la stocker dans la variable B.
  4. Lancer le Serial.println() lorsque la variable de température est différente de "-9999".
  5. Reprendre à l'étape 1.

Bonjour athcerr

Si tu veux mettre tes mesures dans Excel, il est préférable d'utiliser, à la place d'espace, le tabulateur (horizontal (HT)) comme séparateur, "en Arduino" c'est \t.
Toujours dans le cas d'un usage dans Excel, il n'est pas nécessaire de répéter le nom des mesures à chaque ligne, c'est mieux de les mettre en entête. Ainsi, tes données sont directement exploitables dans Excel. Attention, avec des valeurs flottantes et le point comme séparateur décimal, si Excel est paramétré avec la virgule, ça va poser des problèmes. Su tu as ce problème, dis-le moi.
Pour ce qui est de l'élimination des "trous", comme c'est le température qui donne le tempo, tu affiches les 2 mesures à ce moment. Le seul "risque" est que pour les 1 ou 2 premières mesures, vitesse ne soit pas initialisé, vu que sa mesure est moins fréquente. Tu pourrais éviter ça en attendant, avant d'afficher les valeurs, que la première mesure vitesse soit faite.

Ca donne ça:

unsigned long affichageChrono = millis();
float mesureVitesse = 1.2;
float mesureTemperature = 24.88;

void setup()
{
	Serial.begin(115200);

	Serial.println(F("Température\tVitesse"));
}

void loop()
{
	if (millis()-affichageChrono >= 5000)
	{
		affichageChrono = millis();
		Serial.print(mesureVitesse);
		Serial.print("\t");
		Serial.println(mesureTemperature);
	}
}

Cordialement
jpbbricole

Merci à vous d'avoir pris la peine de me répondre.

Cependant, j'ai réglé la moitié du problème en suivant vos conseils, les trous de la colonne Température sont effacés, mais pas ceux de la colonne Vitesse (comme le montre la figure jointe). Et aussi, en se basant sur le code ci-dessous, la vitesse du vent ne s'affiche pas après chaque action de linterrupteur, en effet si l'interrupteur de l'anémomètre est actionné exactement au même instant du début d'un nouveau pas temps (la 1ère milliseconde du pas de temps relative à la mesure de la Température), la mesure sera affichée, sinon si l'action de l'interrupteur se fera pendant un autre instant du pas de temps, la mesure vitesse ne va pas s'afficher.
Autrement, l'espace entre les valeurs de vitesses montré en rouge sur la figure, peut contenir des mesures de vitesse mais elles sont pas affichées, parcequ'elles ne sont pas relevées au même moment que la mesure Température.
Ou simplement, si les deux instants des relevés de la vitesse et de la température se coïncident, alors ils vont s'afficher, sinon, c'est uniquement la mesure de la température qui sera affichée.
Voici le code que j'ai utilisé:

#include "max6675.h"
unsigned long affichageChrono = millis();
float mesureVitesse = 1.2;
float mesureTemperature = 24.88;

unsigned long tempsDebut; //relatif à l'anémomètre
int etatPrecedent;//relatif à l'anémomètre

int thermoDO = 4;
int thermoCLK = 5;
int thermoCSeau = 6;
MAX6675 thermocoupleEau(thermoCLK, thermoCSeau, thermoDO);

void setup()
{
  Serial.begin(115200);
  pinMode(3, INPUT); //relatif à l'anémomètre
  etatPrecedent=digitalRead(3); //relatif à l'anémomètre 

  Serial.println(F("Température\tVitesse"));
}

void loop()
{
  int etat; //relatif à l'anémomètre
  unsigned long tempsFin; //relatif à l'anémomètre
  unsigned long delai; //relatif à l'anémomètre
  etat=digitalRead(3); //relatif à l'anémomètre
  
  if (millis()-affichageChrono >= 5000)
  {
    affichageChrono = millis();
    
  if((etat)&&(!etatPrecedent)) //relatif à l'anémomètre
  {
    if(tempsDebut > 0) //relatif à l'anémomètre
    {
       tempsFin=millis();
       unsigned long  delai=tempsFin-tempsDebut;
       mesureVitesse=3.6*2*3.14*0.105*1000/delai; //équation pour mesurer la vitesse du vent en fonction de la vitesse de rotation de l'anémomètre
       Serial.print(mesureVitesse);
    }
    tempsDebut=tempsFin; //relatif à l'anémomètre
  }
  etatPrecedent=etat; //relatif à l'anémomètre
  
    Serial.print("\t");
    Serial.println(mesureTemperature);
  }
}

Je n'arrive pas à comprendre pourquoi les espaces de la colonne Vitesse ne sont pas effacés !

CaptureFor

Oui je sais comment changer le point en virgule sur Excel, Merci :slight_smile:

Si tu as 2 mesures asynchrones, il y aura toujours des trous dans l'une des 2 colonnes sauf lorsque les résultats tombent au même moment.
Il y a plusieurs manières de régler le problème:

  1. Si tu veux afficher ensemble dans le même graphe les 2 courbes en fonction du temps le plus simple serait de remplir les cases vides en répétant le résultat de la mesure précédente.
  2. Si tu veux afficher 2 courbes distinctes, tu peux à coté de chaque mesure ajouter une colonne temps (temps, température, temps, vitesse du vent) et faire tracer les 2 courbes. Les lignes vides sont ignorées (en tout cas, c'est le cas avec libreoffice et il me semble que ça l'est aussi avec excel).

Oui, c'est vrai ça a marché, mais il faut choisir le type de graphe " Nuage de points " tout court, Si vous choisissez "Nuage de points avec une courbe lissée et marqueurs" il va prendre en considération les lignes vides de la colonnes.
Et puis encore je viens de trouver une vidéo qui explique comment faire pour supprimer toutes les cellules vides d'une colonnes ou des lignes vides en quelques cliques, ca permet d'éviter le travail mannuel :grin: :grin: . Voici le lien de la vidéo : EXCEL - SUPPRIMER LES LIGNES VIDES D'UN TABLEAU (Une seule cellule vide, toute la ligne vide...)

Merci à vous.