Mise à zéro de l'affichage du temps dans un capteur de température

Bonsoir,

Voici le code (en pièce jointe) pour un capteur de température à 1 CTN, avec affichage de la température commandée à l'aide d'un bouton poussoir (automate). Le programme fonctionne bien, cependant j'aimerai que l'affichage du temps soit remis à zéro, lors du premier appuie sur le bouton poussoir.

Merci beaucoup pour votre aide!

Thermometre_numerique_automate.ino (2.44 KB)

Voici le code

// Etat en cours de l’automate
int etat;
// Etat à mémoriser
int oldEtat;
// Les états possibles de l'automate
const int WAIT = 2;
const int START = 1;
const int STOP = 0;

// Définition des entrées numériques utilisées du microcontrôleur
const int BP = 3;  // Broche 3 utilisée pour le bouton poussoir

// Définition des entrées analogiques utilisées du microcontrôleur
const int Ur = A1; // Entrée analogique A1 utilisée pour la tension de sortie Ur du pont diviseur - Elle se nomme maintenant : "Ur"

// BOUCLE D'INITIALISATION : exécutée une seule fois
void setup()
{
  oldEtat = LOW;
  etat = WAIT;
  pinMode(BP, INPUT); // "BP" est une broche d'entrée
  Serial.begin(19200); // ouvre le port série et fixe le debit de communication à 19200 bauds (nombre de symboles transmissibles par seconde)
  Serial.print("t"); // Affichage dans le Monieur série, valeur du temps
  Serial.print("\t"); // Ajout d'un espace
  Serial.println("T1"); //Affichage dans le Moniteur Série, valeur de la température T1
  Serial.print("s"); // Affichage dans le Monieur série, unité de t
  Serial.print("\t"); // Ajout d'un espace
  Serial.println("°C"); //Affichage dans le Moniteur Série, unité de T1
}

// BOUCLE PRINCIPALE : exécutée à l'infini
void loop()
{
  int etatBP = digitalRead(BP); // Lecture de l'état du bouton poussoir
  if(oldEtat == LOW && etatBP == HIGH){ // Gestion des états
     if(etat == WAIT)
     {
        etat = START;
     }
     else if (etat == STOP)
     {
        etat = START;
     }
     else if (etat == START)
     {
        etat = STOP;
     }
  }
  // Traitement des états
  if (etat == START){
     int valeur = analogRead(Ur); // Lecture de la valeur numérique (comprise en 0 et 1023) en sortie du CAN relié à la broche analogique "Ur" et stockage du résultat dans "valeur"
     float tension = (valeur / 1024.0) * 5.0; // Conversion de la valeur numérique en tension : la valeur numérique comprise entre 0 et 1023 correspond à une tension comprise entre 0 et 5V
     float temperature = (tension - 1.32)/0.0363; // Relation déterminer à partir de l'étalonnage du thermomètre numérique
     float t = millis()/1000; // t, valeur du temps en s
     Serial.print(t); // Envoi de la valeur temps 
     Serial.print("\t"); // Ajout d'un espace
     Serial.println(temperature); // Envoir de la valeur T1 puis retour à la ligne
     delay(1000);
  }
  oldEtat = etatBP;
}
// FONCTION D'INITIALISATION : exécutée une seule fois

Bonjour,

Il suffit que tu mémorises la valeur de millis() quand tu passes de l'état WAIT à START

void loop()
{
  static unsigned long millisDebut;
  int etatBP = digitalRead(BP); // Lecture de l'état du bouton poussoir
  if(oldEtat == LOW && etatBP == HIGH){ // Gestion des états
     if(etat == WAIT)
     {
        etat = START;
        millisDebut=millis();
     }
     else if (etat == STOP)
     {
        etat = START;
     }
     else if (etat == START)
     {
        etat = STOP;
     }
  }
  // Traitement des états
  if (etat == START){
     int valeur = analogRead(Ur); // Lecture de la valeur numérique (comprise en 0 et 1023) en sortie du CAN relié à la broche analogique "Ur" et stockage du résultat dans "valeur"
     float tension = (valeur / 1024.0) * 5.0; // Conversion de la valeur numérique en tension : la valeur numérique comprise entre 0 et 1023 correspond à une tension comprise entre 0 et 5V
     float temperature = (tension - 1.32)/0.0363; // Relation déterminer à partir de l'étalonnage du thermomètre numérique
     float t = (millis()-millisDebut)/1000.0; // t, valeur du temps en s
     Serial.print(t); // Envoi de la valeur temps 
     Serial.print("\t"); // Ajout d'un espace
     Serial.println(temperature); // Envoir de la valeur T1 puis retour à la ligne
     delay(1000);
  }
  oldEtat = etatBP;
}

Mets ton code entre balises

Excellent, ça fonctionne!! Merci beaucoup Kamill.

Dernier petit beug, lorsque je copie mes valeurs dans Regressi, le symbole "°C", n'apparait pas correctement mais précédé du symbole Amstrong???!!

Quelle est ta version de l'ide arduino ?
Dans les dernières versions les caractères spéciaux et accentués sont correctement affichés.

D'accord, merci je télécharge la nouvelle version.