#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // กำหนดที่อยู่ I2C ของจอ LCD
int buzzer = 3;
int sensorPin = A0; // ขาอ่านค่า LDR
int sensorValue; // ค่าที่อ่านได้จาก LDR
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
pinMode(sensorPin, INPUT);
pinMode(buzzer, OUTPUT);
}
void alarm() {
for (int i = 0; i < 5; i++) { // ปรับให้เสียงดัง 5 ครั้ง
digitalWrite(buzzer, HIGH);
delay(300);
digitalWrite(buzzer, LOW);
delay(300);
}
}
void loop() {
sensorValue = analogRead(sensorPin);
// แปลงค่า ADC เป็นระดับน้ำ (เซนติเมตร) โดยกำหนดช่วง (ปรับตามการใช้งานจริง)
int level = map(sensorValue, 0, 1023, 50, 0); // สมมติว่าสูงสุด 50 cm, ต่ำสุด 0 cm
// แสดงค่าบน Serial Monitor
Serial.print("ระดับน้ำอยู่ที่: ");
Serial.print(level);
Serial.println(" เซนติเมตร");
// แสดงผลบน LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Water Level: ");
lcd.print(level);
lcd.print(" cm");
// ตรวจสอบระดับน้ำ และแสดงสถานะ
lcd.setCursor(0, 1);
if (level >= 40) {
lcd.print("HIGH!");
alarm(); // เปิดเสียงเตือนเฉพาะน้ำสูงเกินไป
}
else if (level >= 25) {
lcd.print("MEDIUM");
}
else if (level >= 10) {
lcd.print("LOW");
}
else {
lcd.print("VERY LOW"); // ไม่มี "!" และไม่มีเสียงเตือน
}
delay(1000); // หน่วงเวลา 1 วินาที
}