#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
// Definisikan pin
#define DHTPIN 4 // Pin yang terhubung ke DATA dari DHT22
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define LDR_PIN 34 // Pin yang terhubung ke LDR (Analog)
#define TRIG_PIN 5 // Pin Trig dari Ultrasonic Sensor
#define ECHO_PIN 18 // Pin Echo dari Ultrasonic Sensor
#define BUTTON_PIN 12 // Pin untuk tombol input
// Inisialisasi DHT sensor
DHT dht(DHTPIN, DHTTYPE);
// Inisialisasi OLED display
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
int displayMode = 0; // Variabel untuk melacak mode tampilan
bool lastButtonState = HIGH; // Status tombol terakhir
bool currentButtonState = HIGH; // Status tombol saat ini
void setup() {
// Start serial communication
Serial.begin(115200);
// Setup button pin
pinMode(BUTTON_PIN, INPUT_PULLUP);
// Setup Ultrasonic pins
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Start DHT sensor
dht.begin();
// Start OLED display
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
delay(2000); // wait for initializing
// Clear the buffer
display.clearDisplay();
}
void loop() {
// Baca suhu dan kelembaban dari DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Baca intensitas cahaya dari LDR
int ldrValue = analogRead(LDR_PIN);
// Hitung jarak dari sensor ultrasonic
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
// Baca status tombol
currentButtonState = digitalRead(BUTTON_PIN);
// Periksa apakah tombol ditekan
if (lastButtonState == HIGH && currentButtonState == LOW) {
displayMode++; // Ubah mode tampilan
if (displayMode > 3) displayMode = 0; // Reset mode tampilan jika sudah lebih dari 3
delay(300); // Debounce delay untuk menghindari pembacaan ganda
}
// Simpan status tombol saat ini untuk perbandingan di iterasi berikutnya
lastButtonState = currentButtonState;
// Tampilkan di OLED sesuai mode tampilan
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
switch(displayMode) {
case 0:
// Tampilan 1: Nama perangkat
display.setCursor(0, 0);
display.println(F("SMART GREENHOUSE"));
break;
case 1:
// Tampilan 2: Suhu dan Kelembaban Udara
display.setCursor(0, 0);
display.println(F("Suhu & Kelembaban"));
display.setCursor(0, 15);
display.print(F("Temp: "));
display.print(temperature);
display.println(F(" C"));
display.setCursor(0, 30);
display.print(F("Humi: "));
display.print(humidity);
display.println(F(" %"));
break;
case 2:
// Tampilan 3: Intensitas Cahaya
display.setCursor(0, 0);
display.println(F("Intensitas Cahaya"));
display.setCursor(0, 15);
display.print(F("Cahaya: "));
display.print(ldrValue);
display.println(F(" lx"));
break;
case 3:
// Tampilan 4: Jarak Ultrasonic
display.setCursor(0, 0);
display.println(F("Jarak Ultrasonic"));
display.setCursor(0, 15);
display.print(F("Jarak: "));
display.print(distance);
display.println(F(" cm"));
break;
}
// Update display
display.display();
// Delay untuk mencegah pembacaan terlalu cepat
delay(200);
}