#include <LiquidCrystal_I2C.h>
int button0 = 2;
int button1 = 3;
int button2 = 4;
int button3 = 5;
int button4 = 6;
int hcsr04_trigger_pin = 9;
int hcsr04_echo_pin = 10;
long hcsr04Duration;
int hcsr04Distance;
int relay = 11;
int buzzer = 7;
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2);
float amount;
const unsigned long keySampleIntervalMs = 25;
byte longKeyPressCount = 0;
float releasedAmount;
String _releasedAmount;
void setup()
{
pinMode(button0, INPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
pinMode(button4, INPUT);
pinMode(hcsr04_trigger_pin, OUTPUT);
pinMode(hcsr04_echo_pin, INPUT);
pinMode(relay, OUTPUT);
pinMode(buzzer, OUTPUT);
lcd.init();
lcd.backlight();
}
void loop()
{
lcd.setCursor(0,0);
lcd.print("ZekiDamacanaoglu");
lcd.setCursor(0,1);
lcd.print("Su bizim isimiz!");
delay(100);
checkPush(button0);
checkPush(button1);
checkPush(button2);
checkPush(button3);
checkPush(button4);
}
void checkPush(int buttonPushed)
{
int result;
int buttonActive = digitalRead(buttonPushed);
if(buttonActive == HIGH)
{
lcd.clear();
int _buttonPushed = buttonPushed - 1;
switch (_buttonPushed)
{
case 1:
amount = 5200;
result = checkJug(false);
buzzerResult(result);
lcd.clear();
break;
case 2:
amount = 1500;
result = checkJug(false);
buzzerResult(result);
lcd.clear();
break;
case 3:
amount = 2000;
result = checkJug(false);
buzzerResult(result);
lcd.clear();
break;
case 4:
amount = 3000;
result = checkJug(false);
buzzerResult(result);
lcd.clear();
break;
case 5:
result = checkJug(true);
while (digitalRead(6) == HIGH)
{
switch(result)
{
case 0:
lcd.setCursor(0,0);
lcd.print("Dur hele dur");
lcd.setCursor(0,1);
lcd.print("Bak ne diyecegim");
break;
case 1:
releasedAmount = (6.67 * longKeyPressCount);
_releasedAmount = String(releasedAmount);
lcd.setCursor(0,0);
lcd.print(_releasedAmount + "ml su");
lcd.setCursor(0,1);
lcd.print("bosaltiliyor...");
digitalWrite(relay, HIGH);
longKeyPressCount++;
break;
default:
break;
}
}
digitalWrite(relay, LOW);
buzzerResult(result);
delay(500);
lcd.clear();
break;
}
}
else
{
}
}
int checkJug(bool contRelease)
{
int hcsr04Result;
digitalWrite(hcsr04_trigger_pin, LOW);
delayMicroseconds(2);
digitalWrite(hcsr04_trigger_pin, HIGH);
delayMicroseconds(10);
digitalWrite(hcsr04_trigger_pin, LOW);
hcsr04Duration = pulseIn(hcsr04_echo_pin, HIGH);
hcsr04Distance = hcsr04Duration * 0.034 / 2;
if(hcsr04Distance <= 20)
{
hcsr04Result = 1;
if(contRelease == false)
{
waterRelease(amount);
}
}
else if(hcsr04Distance > 20)
{
hcsr04Result = 0;
}
else
{
lcd.setCursor(0,0);
lcd.print("Hata");
lcd.setCursor(0,1);
lcd.print("UltrasonikSensor");
delay(1000000000);
}
return hcsr04Result;
}
void waterRelease(int amount)
{
//float releasedAmount = round(0.0667 * amount);
releasedAmount = (0.0667 * amount);
_releasedAmount = String(releasedAmount);
lcd.setCursor(0,0);
lcd.print(_releasedAmount + "ml su");
lcd.setCursor(0,1);
lcd.print("bosaltiliyor");
digitalWrite(relay, HIGH);
delay(amount);
digitalWrite(relay, LOW);
delay(500);
}
void buzzerResult(int result)
{
switch (result)
{
case 0:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Nereye dokeyim?");
lcd.setCursor(0,1);
lcd.print("");
delay(500);
lcd.setCursor(0,0);
lcd.print("Nereye dokeyim?");
lcd.setCursor(0,1);
lcd.print("Masaya mi???");
for (int i = 1; i <= 5; i++)
{
tone(buzzer, 200, 25);
delay(80);
noTone(buzzer);
delay(80);
}
delay(1000);
break;
case 1:
lcd.clear();
lcd.setCursor(0,0);
lcd.print(_releasedAmount +"ml su ");
lcd.setCursor(0,1);
lcd.print("Afiyet olsun!");
tone(buzzer, 200, 500);
delay(3000);
noTone(buzzer);
longKeyPressCount = 0;
break;
default:
lcd.setCursor(0,0);
lcd.print("Hata!!!");
lcd.setCursor(0,1);
lcd.print("Buzzer|Result");
break;
}
}