#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
// ตั้งค่าพิน
#define ONE_WIRE_BUS 32
#define TRIG_PIN 25
#define ECHO_PIN 26
#define SERVO_PIN_1 16 // เซอร์โวตัวที่ 1
// สร้างออบเจ็กต์
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Servo myServo1;
LiquidCrystal_I2C lcd(0x27, 16, 2); // ใช้ I2C แทน (ตรวจสอบที่อยู่ I2C ของจอ)
void setup() {
Serial.begin(115200);
sensors.begin();
lcd.init(); // ใช้สำหรับจอ I2C
lcd.backlight();
myServo1.attach(SERVO_PIN_1);
// ตั้งค่าขา Ultrasonic
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
// อ่านอุณหภูมิ
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
// อ่านระยะทางจาก Ultrasonic
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2; // cm
// แสดงผลใน Serial Monitor
Serial.print("Oxygen : ");
Serial.print(temperature);
Serial.print(" mg/L, Distance: ");
Serial.print(distance);
Serial.print(" cm");
// แสดงผลบน LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Oxygen : ");
lcd.print(temperature);
lcd.print(" mg/L");
lcd.setCursor(0, 1); // ไปยังบรรทัดที่ 2
lcd.print("Distance: ");
lcd.print(distance);
lcd.print(" cm");
// ควบคุม Servo ตัวที่ 1
if (distance < 200) {
myServo1.write(180); // หมุน Servo ตัวที่ 1 ไปที่ 180 องศา
} else {
myServo1.write(0); // กลับไปที่ 0 องศา
}
delay(1000); // รอ 1 วินาที
}