Merci je viens de mettre en forme tes indication sous cette forme
#include <EEPROMex.h>
unsigned long deb = 0; // temps de réference
unsigned long Nbrpmhall; // nombre de tour du capteur hall
unsigned long mem_Nbrpmhall; // réference Nb de tour capteur hall
float QtsE = 0.0; // quantité d'eau passé au cycle
float QtsEm = 0.0; // quantité d'eau total
uint8_t hallsensor = 2; // broche de connxion du capteur
int addr_QtsEm = 150; // adresse memoire en eprom
void setup() {
pinMode(hallsensor, INPUT); // definir broche a écouter
attachInterrupt(0, rpm, RISING); // comptage des interuption
}
void rpm() {
Nbrpmhall++; // fonction d'incrémentation des tours
}
void loop() {
if (Nbrpmhall > 1) { // si le nombre de tour est superieur a 1
if ((millis() - deb) < 10000) // si le temps écoulé moins le temps de réference est inferieur a 10 sec
{
if (Nbrpmhall > mem_Nbrpmhall) // et si le nombre de tour est superieur de nombre de tour de réfernece
{
deb = millis(); mem_Nbrpmhall = Nbrpmhall; // alors on met à jour ses valeur de réference
}
}
else // sinon on met à jour les valeur lu comme tels ->
{
QtsE = ((Nbrpmhall*2.222222)/1000); // on comptabilise par la formule de comptage pour un litre d'eau
Nbrpmhall = 0; // on réinitialise le nombre de tour du capteur hall
if (QtsE > 1.0) // et si le nombre de litre est superieur a 1.0 litre on l'ecrit en memoire
{
QtsEm = EEPROM.readFloat(addr_QtsEm); //QtsEm = valeur lu en eeprom
QtsEm += QtsE; // et on on ajoute a la valeur mémoire QtsEm la valeur QtsE qui à été ajouté
EEPROM.writeDouble(addr_QtsEm, QtsEm); // On écrit la valeur Qtsem en Eeprom
}
}
}
}
Bon voila un premier point, je vais faire des essais tout a l'heure.
#include <EEPROMex.h>
unsigned long deb = 0; // temps de réference
unsigned long Nbrpmhall; // nombre de tour du capteur hall
unsigned long mem_Nbrpmhall; // réference Nb de tour capteur hall
float QtsE = 0.0; // quantité d'eau passé au cycle
float QtsEm = 0.0; // quantité d'eau total
uint8_t hallsensor = 2; // broche de connxion du capteur
int addr_QtsEm = 150; // adresse memoire en eprom
void setup() {
Serial.begin(1000000);
pinMode(hallsensor, INPUT); // definir broche a écouter
attachInterrupt(0, rpm, RISING); // comptage des interuption
Serial.println(" Pret ");
}
void rpm() {
Nbrpmhall++; // fonction d'incrémentation des tours
Serial.print(" Nbrpmhall = ");
Serial.println( Nbrpmhall);
}
void loop() {
if (Nbrpmhall ==0) {deb=millis();}
if (Nbrpmhall >= 1) { // si le nombre de tour est superieur a 1
if ((millis() - deb) < 10000) // si le temps écoulé moins le temps de réference est inferieur a 10 sec
{
if (Nbrpmhall > mem_Nbrpmhall) // et si le nombre de tour est superieur de nombre de tour de réfernece
{
deb = millis(); // alors on met à jour ses valeur de réference
Serial.print(" Nbrpmhall à augmente de ");
Serial.print( mem_Nbrpmhall);
Serial.print(" a ");
Serial.println( Nbrpmhall);
mem_Nbrpmhall = Nbrpmhall;
}
}
else // sinon on met à jour les valeur lu comme tels ->
{
Serial.println(" 10 secondes sans incrementation ");
//QtsE = ((Nbrpmhall*2.222222)/1000); // on comptabilise par la formule de comptage pour un litre d'eau
//ligne ci dessous pour debug
QtsE = ((Nbrpmhall*2.222222)); // 20 = 0.05 litre
Serial.print("nombre de litres pompes ");
Serial.println( QtsE);
Nbrpmhall = 0; // on réinitialise le nombre de tour du capteur hall
if (QtsE > 1.0) // et si le nombre de litre est superieur a 1.0 litre on l'ecrit en memoire
{
//EEPROM.writeFloat(addr_QtsEm, QtsEm);
QtsEm = EEPROM.readFloat(addr_QtsEm); //QtsEm = valeur lu en eeprom
Serial.print("en eprom, il y a ");
Serial.println( QtsEm);
QtsEm += QtsE; // et on on ajoute a la valeur mémoire QtsEm la valeur QtsE qui à été ajouté
EEPROM.writeFloat(addr_QtsEm, QtsEm); // On écrit la valeur Qtsem en Eeprom
Serial.print("en eprom, il y a maintenant ");
Serial.println(EEPROM.readFloat(addr_QtsEm));
}
}
}
}
Bon je rencontre des incohérences sur les tests, des remise à zéro incohérente
Ou des incrémentations non mis en eprom.
Lors du démarrage j'ai des "Nbrpmhall = (2033 // valeur au hasard à chaque démarrage" par exemple, alors que le HALL ne tourne pas malgré une résistance de 4.7K en tirage.
hello
vires ta résistance de tirage " pullup", elle est dans le setup()
mets un condensateur en // sur le capteur ( entre la masse et D2)
prg testé avec une nano et un BP
fais nous un retour
//# define debug 1
# define debug 0
#include <EEPROMex.h>
unsigned long deb = 0; // temps de réference
unsigned long Nbrpmhall; // nombre de tour du capteur hall
unsigned long mem_Nbrpmhall; // réference Nb de tour capteur hall
float QtsE = 0.0; // quantité d'eau passé au cycle
float memo_QtsE; // memo quantité eau non sauvegardee
float QtsEm = 0.0; // quantité d'eau total
uint8_t hallsensor = 2; // broche de connxion du capteur
int addr_QtsEm = 150; // adresse memoire en eprom
void setup() {
Serial.begin(1000000);
pinMode(hallsensor, INPUT_PULLUP); // definir broche a écouter
attachInterrupt(0, rpm, RISING); // comptage des interuption
QtsEm = EEPROM.readFloat(addr_QtsEm); //QtsEm = valeur lu en eeprom
Serial.print(F("en eprom, il y a "));
Serial.println( QtsEm);
Serial.println(F(" Pret "));
}
void rpm() {
Nbrpmhall++; // fonction d'incrémentation des tours
}
void loop() {
if (Nbrpmhall == 0) {
deb = millis();
}
if (Nbrpmhall >= 1) { // si le nombre de tour est superieur a 1
if ((millis() - deb) < 10000) // si le temps écoulé moins le temps de réference est inferieur a 10 sec
{
if (Nbrpmhall > mem_Nbrpmhall) // et si le nombre de tour est superieur de nombre de tour de réfernece
{
deb = millis(); // alors on met à jour ses valeur de réference
if (debug)
{
Serial.print(F(" Nbrpmhall à augmente de "));
Serial.print( mem_Nbrpmhall);
Serial.print(F(" a "));
}
Serial.print( Nbrpmhall);Serial.print( "\t");
Serial.println(((Nbrpmhall * 2.222222) / 1000)+ memo_QtsE,8);
mem_Nbrpmhall = Nbrpmhall;
}
}
else // sinon on met à jour les valeur lu comme tels ->
{
Serial.println(F(" 10 secondes sans incrementation "));
QtsE = (((Nbrpmhall * 2.222222) / 1000)+ memo_QtsE); // on comptabilise par la formule de comptage pour un litre d'eau
Serial.print(F("nombre de litres pompes "));
Serial.println( QtsE);//Serial.flush();
Nbrpmhall = 0; // on réinitialise le nombre de tour du capteur hall
mem_Nbrpmhall=Nbrpmhall;
if (QtsE > 1.0) // si le nombre de litre est superieur a 1.0 litre on l'ecrit en memoire
{
QtsEm = EEPROM.readFloat(addr_QtsEm); //QtsEm = valeur lu en eeprom
Serial.print(F("en eprom, il y a "));
Serial.println( QtsEm);
QtsEm += QtsE; // et on on ajoute a la valeur mémoire QtsEm la valeur QtsE qui à été ajouté
EEPROM.writeFloat(addr_QtsEm, QtsEm); // On écrit la valeur Qtsem en Eeprom
Serial.print(F("en eprom, il y a maintenant "));
Serial.println(EEPROM.readFloat(addr_QtsEm));
memo_QtsE = 0; // on réinitialise la memorisation d'une qutité non sauvegardee
}
else
{
memo_QtsE=QtsE;
Serial.println(F("c est insignifiant, pas de sauvegarde en eeprom "));
Serial.print(F("mais on garde memo_QtsE = QtsE = "));
Serial.println( memo_QtsE,8);
}
}
}
}