Valeur qui s'affiche dans le moniteur série au démarrage

Bonjour,

J'utilise un capteur de pression : la mesure (en fait la moyenne d'une série de mesures) s'affiche lorsque la commande S est envoyée dans le buffer (via un programme Python).
J'ai un souci car lorsque j'ouvre le moniteur série il m'indique 0.0 alors que je n'ai rien saisi. Je n'arrive pas à trouver d'où provient cette valeur, qui m'embête car lorsque je pilote mes mesures via Python, il me conserve la première valeur (donc 0) qui ne correspond à rien.

Mon programme :

//déclaration des variables fixes du programme
const unsigned long flux = 250000; //flux de la liaison série
const unsigned int cycles = 100; //nombre de cycle pour la moyenne

// Broches de branchement au circuit
const byte mesurePression = 0;

// Déclaration des variables du programme
unsigned long mesure;   // initialisation de la variable mesure
float pression;  // initialisation de la variable tension

// Déclaration des variables pour le capteur
const float pente = 222.0; //issu de l'étalonnage
const float ordonnee = 105.2; //issu de l'étalonnage

int topDepart = 0; //variable pour lancer l'acquisition
String envoi;


void setup() {

  //on initialise le port série pour communiquer avec le PC
  Serial.begin(flux);

}

// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
void loop()
{
  int messageRecu = 0;

  if (Serial.available() > 0)
  {
    messageRecu = Serial.read();
    if (messageRecu == 'S') // commande d'envoi de données
    {
      mesure = 0 ; //on réinitialise la somme des mesures pour calculer une nouvelle valeur

      //boucle sur le nombre de cycles pour faire la moyenne
      for (int i = 0 ; i < cycles ; i++)
      {
        mesure += analogRead(mesurePression) ;    //lecture analogique de la tension, entre 0 et 1023
      }
      pression = ((mesure * 5.0 / 1023.0) / cycles) * pente + ordonnee ; //conversion en tension, calcul de la moyenne puis de la pression
    }

    // Envoie les données
    Serial.println(pression, 1); // donne la valeur recalculée de tension aux bornes de C

  }
}

D'où peut venir cet affichage de 0.0 ?
Merci pour votre aide

votre Arduino reboot au moment où le script Python ouvre la connexion série. Il peut y avoir des "scories" qui trainent sur la voie série pendant la phase de boot de votre arduino. Ce charabia (suivant comment vous avez écrit le code côté Python) peut être évalué à 0.

Ensuite vous envoyez la pression même si vous n'avez pas reçu 'S' du moment que quelque chose trainait dans le buffer série.

éventuellement

  • à la fin du setup() envoyer "OK\n" vers votre programme python et dans le code python après avoir ouvert la voie série, tant que vous n'avez pas reçu comme derniers 3 caractères le "OK\n", vous ignorez ce qui arrive.

ça vous donnera un point de synchro.

Au-delà de la communication avec Python, j'ai le même souci quand j'ouvre le moniteur série (donc sans liaison avec Python), le 0.0 s'affiche à chaque démarrage.

Ouvrir le moniteur série revient au même qu'ouvrir la ligne série avec PYTHON.
Le DTR monte et l'ARDUINO reboote.
Pour ma part je placerais la ligne Serial.println() après l'affectation de pression :

      pression = ((mesure * 5.0 / 1023.0) / cycles) * pente + ordonnee ; 
      Serial.println(pression, 1);
    }

Merci beaucoup pour l'astuce car désormais je n'ai plus le problème !

c'est ce que je voulais dire par

Ensuite vous envoyez la pression même si vous n'avez pas reçu 'S' du moment que quelque chose trainait dans le buffer série.

ça veut dire que quelque chose a été quand même envoyé sur le port série et ce n'était pas 'S'

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