#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);
}
NOCOMNCVCCGNDINLED1PWRRelay Module