Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Interrupt service routine to count pulses
- void IRAM_ATTR pulseCounter()
- {
- pulseCount++;
- }
- void pulseCounterCalculation()
- {
- if ((millis() - oldTime) > 1000) // Only process counters once per second
- {
- // Disable the interrupt while calculating flow rate and sending the value to the host
- detachInterrupt(flowSensor);
- // Because this loop may not complete in exactly 1 second intervals we calculate the number of
- // milliseconds that have passed since the last execution and use that to scale the output.
- // We also apply the calibrationFactor to scale the output based on the number of
- // pulses per second per units of measure (litres/minute in this case) coming from the sensor.
- flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
- // Note the time this processing pass was executed. Note that because we've
- // disabled interrupts the millis() function won't actually be incrementing right
- // at this point, but it will still return the value it was set to just before
- // interrupts went away.
- oldTime = millis();
- // Divide the flow rate in litres/minute by 60 to determine how many litres have
- // passed through the sensor in this 1 second interval,
- flowLitres = (flowRate / 60.0);
- // Add the millilitres passed in this second to the cumulative total
- totalLitres += flowLitres;
- //Print the flow rate for this second in litres / minute
- Serial.print("Flow rate: ");
- Serial.print(flowLitres, DEC); // Print the integer part of the variable
- Serial.print("mL/Second");
- Serial.print("\t");
- // Print the cumulative total of litres flowed since starting
- Serial.print("Output Liquid Quantity: ");
- Serial.print(totalLitres, DEC);
- Serial.println("mL");
- Serial.print("\t");
- // Update Blynk
- // Blynk.virtualWrite(V1, pulseCount);
- // Blynk.virtualWrite(V2, totalLitres);
- // Reset the pulse counter so we can start incrementing again
- pulseCount = 0;
- // Enable the interrupt again now that we've finished sending output
- attachInterrupt(flowSensor, pulseCounter, FALLING);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement