Problème calcul débimètre

Bonjour tout le monde !
Je suis en terminal STI2D SIN et pour mon projet de fin d'année je doit faire afficher la valeur de débit sur une page web.
Et là commence le problème smiley-confuse , je n'arrive pas à faire les calculs de débit sur mon programme , je sais que en sortie de mon débitmètre ce sont des impulsions. Il y a 44.25 impulsions par litre d'eau mais pour afficher la valeur du débit je pense qu'il faudrait compter le nombre d'impulsion par minute pour ensuite en déduire le nombre de litre/minute et ça je n'ai aucune idée de la façon de je pourrais faire pour y parvenir... J'ai déjà épluché pas mal de sites, de forums pour essayer de trouver une solution mais soit je ne trouve rien soit je ne comprend rien à la méthode smiley-cry j'ai mis le programme que j'ai réalisé, il est déjà compilé, pas de fautes de frappes ou de variables indéfinies. j'espère que mon problème est compréhensible et que vous pourrez m'aider !

sketch_apr09a.ino (2.66 KB)

La fonction millis() retourne le nombre de millisecondes écoulées depuis le démarrage du programme.

Tu as un compteur d'impulsions, tu note quand tu commence à compter avec milli, tu compte,
tu arrête de compter après la valeur milli de départ + 60 000 millisecondes (1min). Tu obtient alors
ton nombre d'impulsions en 1 minute. :slight_smile:

Et ne met pas l'affichage dans le loop. Fait une fonction à part.

merci , j'ai fait les modifications dans le programme est-ce que ça se rapproche de la solution ??
et je ne comprend pas ce que tu veux dire dans "mettre l'affichage dans une fonction à part " ??

sketch_apr09a.ino (2.73 KB)

void loop(){
...
Affichage();

}

void Affichage() {
...
}

ok je vais essayer de faire ça mais d'abord j'aimerai réussir à faire fonctionner mon calcul d'impulsion par minute, est-ce que ce que j'ai fait ce rapproche de la solution (juste pour le calcul ) ?

sketch_apr09a.ino (2.73 KB)

Mon système de calcul est-il bon ?

#include <SPI.h> //Inclure la bibliothèque SPI
#include <Ethernet.h> //Inclure la bibliothèque Ethernet

byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0xAA, 0xF8 }; // Adresse MAC du shield (à modifier)


EthernetServer server(80); //Initialise le serveur Ethernet, port 80 par défaut pour HTTP

int capteurPin = A1; //Défini la variable sur l'entrée analogique 1
long chrono = 0;

void setup()
{
  Serial.begin(9600); //ouvre le port série, fixe le taux de données à 9600 bps
  Ethernet.begin(mac); //Démarer la connexion Ethernet
  server.begin(); //Démarer le serveur
  Serial.print("L'adresse du serveur HTTP est: "); //Affichage sur le moniteur série
  Serial.println(Ethernet.localIP()); //Afficher l'adresse IP du serveur
  pinMode(capteurPin, INPUT); //Défini le port de l'arduino en entrée
}

void loop()
{
  analogRead(A1); //lire la broche d'entrée A1
  chrono = millis();
  while (millis() + 60000);
}
{
  EthernetClient client = server.available(); //serveur disponible pour le client entrant
  if (client)
{
    boolean currentLineIsBlank = true; //requête http se termine par une ligne vide
    while (client.connected()) //le client est connecté
    {
     if (client.available()) //le client est disponible
     {
       char c = client.read(); //read char by char HTTP request
       {
        client.println("HTTP/1.1 200 OK"); //la requête du client a été exécutée avec succès par le serveur
        client.println("Content-Type: text/html");
        client.println("Connnection: close"); //la connexion sera fermée après l'achèvement de la réponse
        
        client.println (); //envoie de la page web
        client.println("<!DOCTYPE HTML>");
        client.println("<html>"); 
        client.print("<head>");
        client.println("<meta http-equiv=\"refresh\" content=\"0.2\">");  // balise meta pour réactualisation automatique de la page Web toutes les 0.2 secondes
            client.print("<span style=color:#FF0000>");
            client.print ("<font size=7>");
            client.print ("<font face=Comic sans MS>");
            client.print("VALEUR DU DEBIT : ");
            client.print ("</font size>");
            client.print ("</font face>");
            client.print("
");
            client.print("
");
            client.print("</head>");
        {
        int capteurPin = analogRead(A1); //La variable capteurPin prend la valeur de l'entrée analogique A1
        client.println("<span style=color:#000000>");
        client.print("la valeur du debit est : ");
        client.print(A1);
        client.print(capteurPin);
        client.println("
");
        
        }
        client.println("<body style=background:#00FFFF>");
       client.println("</html>");
       break;
      }
     }
    }
    }
  }
}

Houla c'est un sacré bordel, prend l'habitude de bien tout indenter correctement (mettre des espaces) et évite les copier coller partiel quand tu ne comprends pas le fonctionnement, faut soit tout copier coller sans comprendre soit le réécrire sois meme en s'aidant de l'exemple (la deuxième solution est bien évidement la meilleure

Tu dis dans ton premier post que le module emet des impultions et dans ton bout de code tu essaies de lire la valeur analogique du pin, je ne vois pas du tout le rapport entre les deux, j'ai remis au propre ton bout de code en corrigeant le mauvais copier coller, il faut encore que tu t'occupes d'incrémenter la variable pulse à chaque fois que ton module émet une impulsion, je te laisse faire des recherches et essayer de résoudre ce problème par toi meme on ne va pas faire tout ton boulot !

#include <SPI.h> //Inclure la bibliothèque SPI
#include <Ethernet.h> //Inclure la bibliothèque Ethernet

#define TIME_INTERVAL 60000

byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0xAA, 0xF8 }; // Adresse MAC du shield (à modifier)


EthernetServer server(80); //Initialise le serveur Ethernet, port 80 par défaut pour HTTP

int capteurPin = A1; //Défini la variable sur l'entrée analogique 1
long chrono = 0;
int pulse = 0;
float debitActuel = 0;

void setup()
{
    Serial.begin(9600); //ouvre le port série, fixe le taux de données à 9600 bps
    Ethernet.begin(mac); //Démarer la connexion Ethernet
    server.begin(); //Démarer le serveur
    Serial.print("L'adresse du serveur HTTP est: "); //Affichage sur le moniteur série
    Serial.println(Ethernet.localIP()); //Afficher l'adresse IP du serveur
    pinMode(capteurPin, INPUT); //Défini le port de l'arduino en entrée

    //TODO : Faut que tu incrémente pule à chaque fois que capteurPin pass à haut

    chrono = millis();
}

void loop()
{
    if(millis() > chrono + TIME_INTERVAL) {
        chrono = millis();
        debitActuel = (float(pulse) / 44.25);
        pulse = 0;
    }

    // listen for incoming clients
    EthernetClient client = server.available();

    if (client) { //Quand on fait un copier coller faut le faire en entier sinon ça n'a plus aucun sens
        Serial.println("new client");
        // an http request ends with a blank line
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {
                char c = client.read();
                Serial.write(c);
                // if you've gotten to the end of the line (received a newline
                // character) and the line is blank, the http request has ended,
                // so you can send a reply
                if (c == '\n' && currentLineIsBlank) { //Je ne comprends pas l'interet de lire tout ça si c'est pour ensuite faire une seule chose peu importe les données recues
                    // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");  // the connection will be closed after completion of the response

                    client.println (); //envoie de la page web
                    client.println("<!DOCTYPE HTML>");
                    client.println("<html>");
                    client.print("<head>");
                    client.println("<meta http-equiv=\"refresh\" content=\"0.2\">");  // balise meta pour réactualisation automatique de la page Web toutes les 0.2 secondes
                    client.print("<span style=color:#FF0000>");
                    client.print ("<font size=7>");
                    client.print ("<font face=Comic sans MS>");
                    client.print("VALEUR DU DEBIT : ");
                    client.print ("</font size>");
                    client.print ("</font face>");
                    client.print("
");
                    client.print("
");
                    client.print("</head>");

                    client.println("<span style=color:#000000>");
                    client.print("la valeur du debit est : ");
                    client.print(debitActuel);
                    client.println("
");

                    client.println("<body style=background:#00FFFF>");
                    client.println("</html>");

                    break;
                }
                if (c == '\n') {
                    // you're starting a new line
                    currentLineIsBlank = true;
                }
                else if (c != '\r') {
                    // you've gotten a character on the current line
                    currentLineIsBlank = false;
                }
            }
        }
        // give the web browser time to receive the data
        delay(1);
        // close the connection:
        client.stop();
        Serial.println("client disconnected");
    }
}

Tu parlais aussi de calculs dans ton post précédent, je n'ai pas vraiment vu d'opération mais sache que le bout de code posté plus haut ne permet de mettre à jours le débit d'eau qu'une fois toutes les minutes, tu devrais peut etre t'arranger pour qu'il soit actualisés plus de fois, je e laisse modifier les calculs que j'ai fais !
Tu devrais aussi ajouter une unité à ce débit, donner un nombre sans unité n'a pas de sens :wink:

super ! merci beaucoup pour ta réponse, je vais essayer de rectifier tout ça grâce à tes indications !