Bonjour,
J'ai besoin de votre aide !
J'utilise une carte mega Arduino et le débitmètre YFS20
Mon code me permet de lire le débitmètre toute les secondes
mais il faudrait que la lecture se déclenche uniquement quand le débitmètre tourne et qu'elle s’arrête quand le débitmètre ne tourne plus
Par la suite, il faut que je fasse une moyenne des valeurs obtenue sur 1 jours, 1 semaine et 1 mois.
Et les écrires sur une carte SD, j'utilise le module "SD Card Shield V4.3" de Seeed Studio
Merci beaucoup à vous,
#include <SPI.h> // Pour la communication SPI
#include <SD.h> // Pour la communication avec la carte SD
const byte SDCARD_CS_PIN = 10;
byte sensorInterrupt = 0; // 0 = digital pin 2
byte sensorPin = 2;
// Le capteur de débit à effet hall émet environ 4,5 impulsions par seconde.
// litre / minute de débit.
float calibrationFactor = 4.5;
volatile byte pulseCount;
float flowRate;
unsigned int flowMilliLitres;
unsigned long totalMilliLitres;
unsigned long oldTime;
void setup()
{
// Initialise une connexion série pour transmettre des valeurs à l' hôte
Serial.begin(9600);
pinMode(sensorPin, INPUT);
digitalWrite(sensorPin, HIGH);
pulseCount = 0;
flowRate = 0.0;
flowMilliLitres = 0;
totalMilliLitres = 0;
oldTime = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
void loop()
{
if((millis() - oldTime) > 1000)
{
detachInterrupt(sensorInterrupt);
flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
oldTime = millis();
flowMilliLitres = (flowRate / 60) * 1000;
totalMilliLitres += flowMilliLitres;
unsigned int frac;
Serial.print("Flow rate: ");
Serial.print(int(flowRate));
Serial.print("L/min");
Serial.print("\t");
Serial.print("Output Liquid Quantity: ");
Serial.print(totalMilliLitres);
Serial.println("mL");
Serial.print("\t");
Serial.print(totalMilliLitres/1000);
Serial.print("L");
pulseCount = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
}
/*
Insterrupt Service Routine
1000
*/
void pulseCounter()
{
// Increment the pulse counter
pulseCount++;
}