#include <LiquidCrystal_I2C.h>
#define PIN_TRIG 3
#define PIN_ECHO 2
#define PIN_RELAY 8
#define PIN_SW 10
#define PIN_BUZZER 11
#define I2C_ADDR 0x27 //บางทีใช้ 0x3F จอ
#define LCD_COLUMNS 16 //คอลัม จอ
#define LCD_LINES 2 //แถว จอ
int var = 40 ; //ตั้งระยะตรวจจับขวด CM
int delay_var = 10000 ; //ตั้งเวลาปล่อยอาหาร 1000 = 1 วินาที
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
int cm ;
String st = "RELAY : OFF ";
String txt = " Touch Project ";
void setup() {
Serial.begin(9600);
lcd.init(); //บางทีใช้ lcd.begin();
lcd.backlight();
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(PIN_SW, INPUT_PULLUP);
pinMode(PIN_RELAY, OUTPUT);
pinMode(PIN_BUZZER, OUTPUT);
Buzzer();
lcd_show();
}
void loop() {
ulta();
check();
delay(100);
}
void check(){
if(cm <= var ){
Buzzer();
txt = " Press Switch ";
lcd_show();
while(1){
if(digitalRead(PIN_SW) == LOW){
Buzzer();
digitalWrite(PIN_RELAY, HIGH);
st = "RELAY : ON ";
txt = " Rady ";
lcd_show();
delay(delay_var);
digitalWrite(PIN_RELAY, LOW);
st = "RELAY : OFF ";
txt = " Touch Project ";
lcd_show();
break;
}
}
}
}
void lcd_show(){
lcd.setCursor(0, 0);
lcd.print(txt);
lcd.setCursor(3, 1);
lcd.print(st);
}
void ulta(){
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
// Read the result:
int duration = pulseIn(PIN_ECHO, HIGH);
cm = duration / 58;
Serial.print("Distance in CM: ");
Serial.println(cm);
}
void Buzzer(){
analogWrite(PIN_BUZZER,125);
delay(300);
analogWrite(PIN_BUZZER,0);
}