#include <mechButton.h>
#include <timeObj.h>


#define FLOW_PER_CLK    2.5    // Flow units, say.. Ml
#define FLOW_TIME_MS    1000  // Every second? Can be changed.
#define FLOW_METER_PIN  2
#define PUMP_BTN_PIN    4
#define PUMP_PIN        3

mechButton  flowMeter(FLOW_METER_PIN);
mechButton  pumpSwitch(PUMP_BTN_PIN);
timeObj     flowTimer(FLOW_TIME_MS);
float       flowAmount;
float       flowRate;
bool        pumpOn;


void setup() {

  Serial.begin(9600);
  pinMode(PUMP_PIN,OUTPUT);
  flowAmount = 0;
  flowRate = 0;
  pumpOn = false;
  flowMeter.setCallback(flowClk);
  pumpSwitch.setCallback(pumpClk);
}


void flowClk(void) {

  if (!flowMeter.getState()) {
    flowAmount = flowAmount + FLOW_PER_CLK;
  }
}


void pumpClk(void) {

  if (!pumpSwitch.getState()) {
    pumpOn = !pumpOn;
    digitalWrite(PUMP_PIN,pumpOn);
  }
}


void loop() {

  idle();
  if (flowTimer.ding()) {
    flowRate = flowAmount/(FLOW_TIME_MS/1000);  // Flow/sec.
    flowAmount = 0;
    flowTimer.stepTime();
    Serial.print("Current flowrate \t: ");
    Serial.println(flowRate);
  }
}
NOCOMNCVCCGNDINLED1PWRRelay Module