Arduino code:
byte statusLed = 13;
byte sensorInterrupt = 0;
byte sensorPin = 2;
float calibrationFactor = 4.5;
volatile byte pulseCount;
float flowRate;
unsigned int flowMilliLitres;
unsigned long totalMilliLitres;
unsigned long oldTime;
void pulseCounter()
{
pulseCount++;
}
void setup()
{
Serial.begin(9600);
while(!Serial)
{
while(Serial.available()<=0)
{
Serial.println("0,0,0");
}
}
pinMode(statusLed, OUTPUT);
digitalWrite(statusLed, HIGH);
pinMode(sensorPin, INPUT);
digitalWrite(sensorPin, HIGH);
pulseCount = 0;
flowRate = 0.0;
flowMilliLitres = 0;
totalMilliLitres = 0;
oldTime = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
void loop()
{
if((millis() - oldTime) > 1000)
{
detachInterrupt(sensorInterrupt);
flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
oldTime = millis();
flowMilliLitres = (flowRate / 60) * 1000; // esto es a 0.75 lit
totalMilliLitres += flowMilliLitres;
unsigned int frac;
if(Serial.available()>0)
{
//Serial.print("Flow rate: ");
Serial.print(int(flowRate));
//Serial.print("L/min");
//Serial.print("\t");
Serial.print(",");
//Serial.print("Output Liquid Quantity: ");
Serial.println(totalMilliLitres);
//Serial.println("mL");
//Serial.print("\t");
//Serial.print(totalMilliLitres/1000);
//Serial.print("L");
}
pulseCount = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
}
Processing code:
byte statusLed = 13;
byte sensorInterrupt = 0;
byte sensorPin = 2;
float calibrationFactor = 4.5;
volatile byte pulseCount;
float flowRate;
unsigned int flowMilliLitres;
unsigned long totalMilliLitres;
unsigned long oldTime;
void pulseCounter()
{
pulseCount++;
}
void setup()
{
Serial.begin(9600);
while(!Serial)
{
while(Serial.available()<=0)
{
Serial.println("0,0,0");
}
}
pinMode(statusLed, OUTPUT);
digitalWrite(statusLed, HIGH);
pinMode(sensorPin, INPUT);
digitalWrite(sensorPin, HIGH);
pulseCount = 0;
flowRate = 0.0;
flowMilliLitres = 0;
totalMilliLitres = 0;
oldTime = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
void loop()
{
if((millis() - oldTime) > 1000)
{
detachInterrupt(sensorInterrupt);
flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
oldTime = millis();
flowMilliLitres = (flowRate / 60) * 1000; // esto es a 0.75 lit
totalMilliLitres += flowMilliLitres;
unsigned int frac;
if(Serial.available()>0)
{
//Serial.print("Flow rate: ");
Serial.print(int(flowRate));
//Serial.print("L/min");
//Serial.print("\t");
Serial.print(",");
//Serial.print("Output Liquid Quantity: ");
Serial.println(totalMilliLitres);
//Serial.println("mL");
//Serial.print("\t");
//Serial.print(totalMilliLitres/1000);
//Serial.print("L");
}
pulseCount = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
}