Hi guys,
I would like to use a flow sensor but the only sketchs I found in internet are with an interrupt.
Unfortunately the interrupt create me a problem on my Arduino Yun (I know the interrupt is different between Uno and Yun and I managed it), but still my sketch freezes when I use the interrupt.
So I wonder if there is a way to monitor the flow with a flow sensor without an interrupt?
Here the sketch I use for the flow sensor witch works, but when I put this code into my full sketch after a few moment t just freeze.
I am sure it is an interrupt problem as when I comment it the sketch work... but not the sensor...
Is it possibile to use the flow sensor without an interrupt?
// 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 <LiquidCrystal.h>
volatile int NbTopsFan; //measuring the rising edges of the signal
int Calc;
int hallsensor; //The pin location of the sensor is pin 2
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
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
lcd.begin(16,2);
//initialised,
attachInterrupt(0, rpm, RISING); //and the interrupt is attached on pin 2 (INT0=2)
}
// 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
Calc = (NbTopsFan * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate
//in L/hour
Serial.print (Calc, DEC); //Prints the number calculated above
Serial.println (" L/hour\r\n"); //Prints "L/hour" and returns a new line
lcd.setCursor(0, 0);
lcd.print("Flusso: ");
//lcd.setCursor(0, 1);
lcd.print(Calc, DEC);
lcd.println(" L/h ");
}