faire une interrupton avec débitmètre

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++;

}

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

vous ne savez pas quand il tourne réellement, vous savez juste quand l'aimant passe devant le capteur et vous envoie une interruption.

donc si vous voyez pulseCount qui monte, c'est que ça a tourné suffisamment depuis la dernière fois, c'est tout ce que ça vous dit... mais bon généralement il ne fait pas qu'un tour et s'arrête...

plus d'infos ici par exemple