Well this seems to work. I need to hook it up to a pump and see if the values are anywhere near accurate.
This keeps a running total and displays it on a sparkfun LCD
// reading liquid flow rate using Seeeduino and Water Flow Sensor from Seeedstudio.com
// Code adapted by Charles Gantt from PC Fan RPM code written by Crenn @thebestcasescenario.com
// http:/themakersworkbench.com http://thebestcasescenario.com http://seeedstudio.com
#include "SparkSoftLCD.h"
#define LCD_TX 3
SparkSoftLCD lcd = SparkSoftLCD(LCD_TX);
int incomingByte = -1;
int val = 0;
char code[10];
int bytesread = 0;
volatile int NbTopsFan; //measuring the rising edges of the signal
int Calc;
int hallsensor = 2; //The pin location of the sensor
float totaldispensed;
void rpm () //This is the function that the interupt calls
{
NbTopsFan++; //This function measures the rising and falling edge of the hall effect sensors signal
}
// The setup() method runs once, when the sketch starts
void setup() //
{
pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input
Serial.begin(9600); //This is the setup function where the serial port is initialised,
attachInterrupt(0, rpm, RISING); //and the interrupt is attached
// setup lcd
pinMode(LCD_TX, OUTPUT);
lcd.begin(9600);
lcd.clear();
Serial.begin(9600);
// hidden cursor
lcd.cursor(0);
}
// the loop() method runs over and over again,
// as long as the Arduino has power
void loop ()
{
NbTopsFan = 0; //Set NbTops to 0 ready for calculations
sei(); //Enables interrupts
delay (1000); //Wait 1 second
cli(); //Disable interrupts
lcd.clear();
// block-style blinking cursor
lcd.cursor(0);
Calc = (NbTopsFan * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate in L/hour
lcd.print (Calc, DEC); //Prints the number calculated above
lcd.print (" L/hour"); //Prints "L/hour" and returns a new line
lcd.cursorTo(2,1);
totaldispensed +=((float)Calc / 3600);
lcd.print ("total: ");
int intValue = (int)totaldispensed; // convert float PHValue to tricky int combination
float diffValue = totaldispensed - (float)intValue;
int anotherIntValue = (int)(diffValue * 1000.0);
lcd.print (intValue);
lcd.print (".");
lcd.print (anotherIntValue);
lcd.print ("L");
}