#include <LiquidCrystal_I2C.h>
#define PIN_TRIG 26
#define PIN_ECHO 25
#define LOWLED 18
#define MIDLED 19
#define HIGHLED 21
#define MOTOR 27
unsigned int level = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(LOWLED, OUTPUT);
pinMode(MIDLED, OUTPUT);
pinMode(HIGHLED, OUTPUT);
pinMode(MOTOR, OUTPUT);
lcd.init();
lcd.clear();
lcd.backlight();
}
void loop() {
// เริ่มการวัดระยะทางใหม่
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
// อ่านค่าระยะทาง
int duration = pulseIn(PIN_ECHO, HIGH);
level = duration / 58; // คำนวณระยะทางเป็นเซนติเมตร
// แสดงระยะทางใน Serial Monitor
Serial.print("ระดับน้ำอยู่ที่: ");
Serial.print(level);
Serial.println(" เซนติเมตร");
// ล้างหน้าจอ LCD และแสดงระดับน้ำใหม่
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WATER TANK LEVEL");
// ตรวจสอบระดับน้ำและแสดงผล
if (level < 100) {
lcd.setCursor(0, 1);
lcd.print("VERY LOW");
digitalWrite(LOWLED, LOW);
digitalWrite(MIDLED, HIGH);
digitalWrite(HIGHLED, HIGH);
digitalWrite(MOTOR, LOW); // เปิดมอเตอร์เมื่อระดับน้ำต่ำ
}
else if ((level > 200) && (level < 400)) {
lcd.setCursor(0, 1);
lcd.print("MEDIUM");
digitalWrite(LOWLED, HIGH);
digitalWrite(MIDLED, LOW);
digitalWrite(HIGHLED, HIGH);
digitalWrite(MOTOR, HIGH); // ปิดมอเตอร์เมื่อระดับน้ำปานกลาง
}
else if (level >= 400) {
lcd.setCursor(0, 1);
lcd.print("HIGH");
digitalWrite(LOWLED, HIGH);
digitalWrite(MIDLED, HIGH);
digitalWrite(HIGHLED, LOW);
digitalWrite(MOTOR, HIGH); // ปิดมอเตอร์เมื่อระดับน้ำสูง
}
delay(1000); // หน่วงเวลา 1 วินาทีเพื่อให้การอ่านค่ามีความเสถียร
}