#include char token[] = " "; byte sensorInterrupt0 = 0; byte sensorPin0 = 2; byte sensorInterrupt1 = 1; byte sensorPin1 = 3; float calibrationFactor = 5.5; volatile byte pulseCount0; volatile byte pulseCount1; float flowRate0; float flowAccumLitresforminutes0; //Variable to accumulate water flow for minutes float flowtotalLitresforminutes0; unsigned long oldTime0; float flowRate1; float flowAccumLitresforminutes1; float flowtotalLitresforminutes1; unsigned long oldTime1; void setup() { Cayenne.begin(token); pinMode(sensorPin0, INPUT); digitalWrite(sensorPin0, HIGH); pinMode(sensorPin1, INPUT); digitalWrite(sensorPin1, HIGH); pulseCount0 = 0; flowRate0 = 0.0; flowtotalLitresforminutes0 = 0; flowtotalLitresforminutes0 = 0; oldTime0 = 0; pulseCount1 = 0; flowRate1 = 0.0; flowAccumLitresforminutes1 = 0; flowtotalLitresforminutes1 = 0; oldTime1 = 0; attachInterrupt(sensorInterrupt0, pulseCounter0, FALLING); attachInterrupt(sensorInterrupt1, pulseCounter1, FALLING); } void loop() { Cayenne.run(); if((millis() - oldTime0) > 1000) // Only process counters once per second { detachInterrupt(sensorInterrupt0); flowRate0 = ((1000.0 / (millis() - oldTime0)) * pulseCount0) / calibrationFactor; oldTime0 = millis(); flowAccumLitresforminutes0 = (flowRate0 / 60); flowtotalLitresforminutes0 += flowAccumLitresforminutes0; pulseCount0 = 0; attachInterrupt(sensorInterrupt0, pulseCounter0, FALLING); } if((millis() - oldTime1) > 1000) // Only process counters once per second { detachInterrupt(sensorInterrupt1); flowRate1 = ((1000.0 / (millis() - oldTime1)) * pulseCount1) / calibrationFactor; oldTime1 = millis(); flowAccumLitresforminutes1 = (flowRate1 / 60) ; flowtotalLitresforminutes1 += flowAccumLitresforminutes1; pulseCount1 = 0; attachInterrupt(sensorInterrupt1, pulseCounter1, FALLING); } } void pulseCounter0() { // Increment the pulse counter pulseCount0++; } void pulseCounter1() { // Increment the pulse counter pulseCount1++; } CAYENNE_OUT(V0) //Flow rate: { Cayenne.virtualWrite(V0, flowRate0); } //CAYENNE_OUT(V1) //Current Liquid Flowing: //{ // Cayenne.virtualWrite(V1, flowAccumLitresforminutes0); //} CAYENNE_OUT(V2) //Output Liquid Quantity: { Cayenne.virtualWrite(V2,flowtotalLitresforminutes0); } CAYENNE_OUT(V3) //Flow rate: { Cayenne.virtualWrite(V3, flowRate1); } //CAYENNE_OUT(V4) //Current Liquid Flowing: //{ // Cayenne.virtualWrite(V4, flowAccumLitresforminutes1); //} CAYENNE_OUT(V5) //Output Liquid Quantity: { Cayenne.virtualWrite(V5, flowtotalLitresforminutes1); }