#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#include <Servo.h>
#define OLED_RESET 4
#define POT_PIN1 A0 // Pin potensiometer untuk menggantikan sensor kelembaban udara
#define POT_PIN2 A1 // Pin potensiometer untuk menggantikan sensor suhu
#define POT_PIN3 A2 // Pin potensiometer untuk menggantikan sensor kelembaban tanah
#define POT_PIN4 A3 // Pin potensiometer untuk menggantikan sensor intensitas cahaya
#define SERVO_PIN 9 // Pin untuk mengontrol servo
Adafruit_SSD1306 display(OLED_RESET);
DHT dht(POT_PIN1, DHT11);
Servo servo;
void setup() {
servo.attach(SERVO_PIN); // Menghubungkan servo ke pin 9
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
dht.begin();
}
void loop() {
// Tampilkan sesi 1: Kelembaban tanah dan udara
displaySoilHumidityAndAirHumidity();
delay(5000); // Tunggu 5 detik sebelum berganti sesi
// Tampilkan sesi 2: Intensitas cahaya dan suhu
displayLightIntensityAndTemperature();
delay(5000); // Tunggu 5 detik sebelum berganti sesi
}
void displaySoilHumidityAndAirHumidity() {
// Baca kelembaban tanah dari potensiometer ketiga
int soilHumidity = analogRead(POT_PIN3);
int soilHumidityPercent = map(soilHumidity, 0, 1023, 0, 100);
// Baca kelembaban udara dari potensiometer pertama
int airHumidity = analogRead(POT_PIN1);
float airHumidityPercent = map(airHumidity, 0, 1023, 0, 100);
// Tampilkan data pada layar OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 1); // Menyesuaikan posisi cursor untuk teks "Soil Humidity"
display.print("Soil Humidity: ");
display.print(soilHumidityPercent);
display.println("%");
display.print("Air Humidity: ");
display.print(airHumidityPercent);
display.println("%");
display.display();
// Kontrol servo berdasarkan kelembaban tanah
int servoAngle = map(soilHumidityPercent, 0, 100, 0, 180); // Konversi ke sudut servo
servo.write(servoAngle); // Putar servo sesuai sudut
}
void displayLightIntensityAndTemperature() {
// Baca intensitas cahaya dari potensiometer keempat
int lightIntensity = analogRead(POT_PIN4);
// Konversi nilai analog ke rentang yang diinginkan
int lux = map(lightIntensity, 0, 1023, 0, 10000);
// Baca suhu udara dari potensiometer kedua
int airTemperature = analogRead(POT_PIN2);
float airTemperatureC = map(airTemperature, 0, 1023, 0, 50); // Anggap maksimal 50°C untuk simulasi
// Tampilkan data pada layar OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 1);
display.print("Light Intensity: ");
display.print(lux);
display.println(" lx");
display.print("Air Temperature: ");
display.print(airTemperatureC);
display.println("°C");
display.display();
// Kontrol servo berdasarkan suhu dan intensitas cahaya
if (airTemperatureC > 30 || lux > 8000) {
servo.write(90); // Putar servo ke sudut 90 derajat
}
}