LAMPIRAN PROGRAM
#include <LiquidCrystal.h>
LiquidCrystallcd(8, 6, 5, A4, A5, 4); #define pompa A0
#define up A1 #define down 11 #define righ 10 #define left 9 #define ok 12 int state=0; floatvolum=0; charrecev;
bytestatusLed = 13; bytesensorInterrupt = 0; bytesensorPin = 2; floatcalibrationFactor = 4.5; volatile byte pulseCount; floatflowRate;
unsignedintflowMilliLitres; floattotalMilliLitres;
unsigned long oldTime; void setup()
{
lcd.begin(16, 2);
pinMode(pompa,OUTPUT); Serial.begin(9600);
pinMode(up, INPUT); pinMode(down, INPUT); pinMode(left, INPUT); pinMode(righ, INPUT); pinMode(ok, INPUT); digitalWrite(up, HIGH); digitalWrite(down, HIGH); digitalWrite(left, HIGH); digitalWrite(righ, HIGH); digitalWrite(ok, HIGH); pulseCount = 0; flowRate = 0.0; flowMilliLitres = 0; totalMilliLitres = 0; oldTime = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING); }
void loop() {
while (state==0) {
digitalWrite(pompa,LOW); lcd.clear();
lcd.setCursor(0,0);
lcd.print("Android >>>"); lcd.setCursor(0,1);
lcd.print("Manual");
if (digitalRead(down)==0){state=1;}
if (digitalRead(ok)==0){state=2;delay(200);} delay(200);
}
{
digitalWrite(pompa,LOW); pulseCount = 0;
flowRate = 0.0; flowMilliLitres = 0; totalMilliLitres = 0; oldTime = 0; lcd.clear();
lcd.setCursor(0,0); lcd.print("Android"); lcd.setCursor(0,1);
lcd.print("Manual >>>");
if (digitalRead(up)==0){state=0;}
if (digitalRead(ok)==0){state=3;delay(200);} delay(300);
}
while (state==3) //set nilai volume {
digitalWrite(pompa,LOW);
if (digitalRead(righ)==0){volum+=0.1;} if (digitalRead(left)==0){volum-=0.1;} lcd.setCursor(0,0);
lcd.print("Set Volume"); lcd.setCursor(0,1); lcd.print(volum,1);
if (digitalRead(ok)==0){state=4;delay(200);} delay(100);
lcd.clear(); }
while (state==4) {
{
digitalWrite(pompa,LOW); lcd.setCursor(0,0);
lcd.print("Debit: ");
lcd.print(flowRate,3); // Print the integer part of the variable lcd.print(" L/S");
lcd.setCursor(0,1); lcd.print("Vol : "); lcd.print(totalMilliLitres); lcd.print(" L");
if (digitalRead(ok)==0){state=3;delay(300);} }
else{
digitalWrite(pompa,HIGH);
if (digitalRead(ok)==0){state=3;delay(300);} if((millis() - oldTime) > 200){
detachInterrupt(sensorInterrupt); oldTime = millis();
flowRate = pulseCount;
flowRate=flowRate*0.0263/480/2.5*100; totalMilliLitres+=flowRate;
unsignedintfrac; lcd.setCursor(0,0); lcd.print("Debit: ");
lcd.print(flowRate,3); // Print the integer part of the variable lcd.print(" L/S");
lcd.setCursor(0,1); lcd.print("Vol : "); lcd.print(totalMilliLitres); lcd.print(" L");
pulseCount = 0;
} } }
while (state==2){
digitalWrite(pompa,LOW); pulseCount = 0;
flowRate = 0.0; flowMilliLitres = 0; totalMilliLitres = 0; oldTime = 0; lcd.clear();
lcd.setCursor(0,0); lcd.print("Set Volume"); lcd.setCursor(0,1); lcd.print(volum,1);
if (Serial.available()){recev= Serial.read(); if (recev=='A'){volum+=0.1;}
else if (recev=='B'){volum-=0.1;} else if (recev=='Z'){state=5;} }
{
if (totalMilliLitres>=volum) {
digitalWrite(pompa,LOW); lcd.setCursor(0,0);
lcd.print("Debit: ");
lcd.print(flowRate,3); // Print the integer part of the variable lcd.print(" L/S");
lcd.setCursor(0,1); lcd.print("Vol : "); lcd.print(volum); lcd.print(" L");
if (Serial.available()){if (Serial.read()=='Z'){state=2;delay(200);}} }
else{
digitalWrite(pompa,HIGH);
if (Serial.available()){if (Serial.read()=='Z'){state=2;delay(200);}} if((millis() - oldTime) > 200){
detachInterrupt(sensorInterrupt);
flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor; oldTime = millis();
flowRate = pulseCount;
flowRate=flowRate*0.0263/480/2.5*100; totalMilliLitres+=flowRate;
/* flowMilliLitres = ((flowRate / 60) * 1000)/8256; totalMilliLitres += flowMilliLitres;*/
unsignedintfrac; lcd.setCursor(0,0); lcd.print("Debit: ");
lcd.print(flowRate,3); // Print the integer part of the variable lcd.print(" L/S");
lcd.print("Vol : "); lcd.print(totalMilliLitres); lcd.print(" L");
pulseCount = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING); }
}
Serial.print("*F"); Serial.print(volum); Serial.print("*"); Serial.print("*G");
Serial.print(totalMilliLitres); Serial.print("*");
Serial.print("*H"); Serial.print(flowRate,3); Serial.print("*");
} }