constexpr static byte pin = 2;
volatile float waterflowAbsolute = 0.0;
auto pulse() -> void;
auto calcWaterflow() -> float;
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(2), pulse, RISING);
}
void loop() {
Serial.print("Waterflow l/h: ");
Serial.println(String(calcWaterflow()));
delay(1000);
}
// 450 pulses for 1 liter (see product parameters)
auto pulse () -> void
{
waterflowAbsolute += 1.0 / 450.0;
}
// Calculate Waterflow in relation to one hour
auto calcWaterflow() -> float
{
static auto timestamp = millis();
static auto waterflowOld = waterflowAbsolute;
if (millis() - timestamp >= 1000)
{
timestamp = millis();
if (waterflowAbsolute >= 0.0)
{
auto result = waterflowAbsolute * 3600;
Serial.println("WaterflowAbs: " + String(waterflowAbsolute));
waterflowAbsolute = 0;
return result;
}
}
return 0.0;
}