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 !
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.
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 " ??
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 ) ?
#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