// Program Ultrasonik dengan kontrol switch untuk memulai program
// const int pinS1 = 12;
// int buttonstate = 0;
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

int trig = 7;
int echo = 8;
float jarak;
float durasi=0;
float ttoren = 1.420; //dalam meter
float dtoren = 1.050; //dalam meter
float atoren = 0.25*(dtoren*dtoren)*(22/7);
float vair;
unsigned long interval = 10000;
unsigned long previousMillis = 0;



void setup() {
  // put your setup code here, to run once:
  // pinMode(pinS1, INPUT);// set pin sebagai input untuk kontrol sistem

  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print ("  Volume Air Tank  ");
  pinMode(trig, OUTPUT);// set pin sebagai output untuk mengirim pulsa
  pinMode(echo, INPUT);// set pin sebagai input untuk menerima pulsa
  Serial.begin(9600);
}

void volumeair(){
  // set output menjadi LOW
    digitalWrite(trig, LOW);
    delayMicroseconds(2); // kirim 5uS pulsa untuk mengaktifkan Ping
    digitalWrite(trig, HIGH);
    delayMicroseconds(2); // kirim 5uS pulsa untuk mematikan Ping
    digitalWrite(trig, LOW);
    /* ukur panjang pulsa yang datang */
    durasi=pulseIn(echo, HIGH);
    // panjang pulsa dibagi dua
    durasi= durasi/2;
    // ubah kedalam satuan meter
    jarak=(durasi/2900);
    //kirim ke komputer untuk ditampilkan pada serial monitor
    
    vair = (ttoren-jarak)*atoren;
}

void tampilan(){
  if (jarak<=0.3){
    Serial.println("Peringatan Air Penuh");
    Serial.print("Tinggi Air: ");
    Serial.print(ttoren-jarak);
    Serial.println(" m");
    Serial.print("Volume Air: ");
    Serial.print(vair*1000);
    Serial.println(" liter");
  } else if (jarak>=1.420){
    Serial.println("Surut/Error");
  } else {
    Serial.print("Tinggi Air: ");
    Serial.print(ttoren-jarak);
    Serial.println(" m");
    Serial.print("Volume Air: ");
    Serial.print(vair*1000);
    Serial.println(" liter");
  }
}

void loop() {
  //buttonstate=digitalRead(pinS1);
  //Serial.println(buttonstate)
unsigned long currentMillis = millis();

if ((unsigned long)(currentMillis - previousMillis)>= interval){
  //Serial.println(currentMillis);
  //Serial.println(previousMillis);
  volumeair();
  //delay(10);
  tampilan();
  if (jarak<=0.3){
    lcd.setCursor(0, 1);
    lcd.print ("  Tanki Air Penuh  ");
    lcd.setCursor(0, 2);
    lcd.print ("Tinggi Air:");
    lcd.print (ttoren-jarak);
    lcd.print (" m");
    lcd.setCursor(0, 3);
    lcd.print ("Vol.Air:");
    lcd.print (vair*1000);
    lcd.print (" ltr");
} else if (jarak>=1.420){
    lcd.setCursor(0, 1);
    lcd.print ("    Surut/Error     ");
    lcd.setCursor(0, 2);
    lcd.print ("                    ");
    lcd.setCursor(0, 3);
    lcd.print ("                    ");
} else {
    lcd.setCursor(0, 1);
    lcd.print ("                   ");
    lcd.setCursor(0, 2);
    lcd.print ("Tinggi Air: ");
    lcd.print (ttoren-jarak);
    lcd.print (" m");
    lcd.setCursor(0, 3);
    lcd.print ("Vol.Air: ");
    lcd.print (vair*1000);
    lcd.print (" ltr");
  }

  previousMillis = millis();
} //else{
  //Serial.print(currentMillis);
  //Serial.print("  &  ");
  //Serial.println(previousMillis);
//}
 delay(1000);
}