#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#define ECHO_PIN 16
#define TRIG_PIN 17
#define LedH 15
#define LedK 4
#define LedM 19
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define DHT_PIN 18 // Pin to which the DHT22 sensor is connected
#define DHT_TYPE DHT22
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
DHT dht(DHT_PIN, DHT_TYPE);
// Map function to scale a value from one range to another
float mapValue(float x, float in_min, float in_max, float out_min, float out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
void setup() {
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("failed to start SSD1306 OLED"));
while (1);
}
delay(3000);
oled.clearDisplay();
oled.setTextSize(1);
oled.setTextColor(WHITE);
oled.setCursor(0, 2);
oled.println("Argentino Saviola Putra");
oled.display();
Serial.begin(9600);
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(LedH, OUTPUT);
pinMode(LedK, OUTPUT);
pinMode(LedM, OUTPUT);
dht.begin();
}
float ultrasonik() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void loop() {
oled.clearDisplay();
// Baca data ultrasonik
float jarak = ultrasonik();
// Tampilkan data ultrasonik
if (jarak > 250) {
digitalWrite(LedH, HIGH);
digitalWrite(LedK, LOW);
digitalWrite(LedM, LOW);
Serial.println("Air Rendah");
Serial.print("Nilai Jarak :");
Serial.print(jarak);
Serial.println("cm ");
oled.setTextSize(1);
oled.setTextColor(WHITE);
oled.setCursor(0, 2);
oled.print("Jarak Air: Rendah ");
oled.print(jarak);
oled.println(" cm ");
} else if (jarak <= 250 && jarak > 100) {
digitalWrite(LedK, HIGH);
digitalWrite(LedH, LOW);
digitalWrite(LedM, LOW);
Serial.println("Air Sedang");
Serial.print("Nilai Jarak :");
Serial.print(jarak);
Serial.println("cm ");
oled.setTextSize(1);
oled.setTextColor(WHITE);
oled.setCursor(0, 2);
oled.println("Jarak Air: Sedang");
oled.print(jarak);
oled.println(" cm ");
} else if (jarak <= 100) {
digitalWrite(LedM, HIGH);
digitalWrite(LedK, LOW);
digitalWrite(LedH, LOW);
Serial.println("Air Tinggi");
Serial.print("Nilai Jarak :");
Serial.print(jarak);
Serial.println(" cm ");
oled.setTextSize(1);
oled.setTextColor(WHITE);
oled.setCursor(0, 2);
oled.println("Jarak Air: Tinggi");
oled.print(jarak);
oled.println(" cm ");
}
// Baca data DHT22
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Map the temperature value to a new range (e.g., from -40 to 160)
float mappedTemperature = mapValue(temperature, -40, 80, -40, 160);
// Tampilkan data DHT22
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("% ");
Serial.print("Temp: ");
Serial.print(mappedTemperature);
Serial.println("C");
// Display DHT22 values on OLED
oled.setTextSize(1);
oled.setTextColor(WHITE);
oled.setCursor(0, 30);
oled.print("Humidity: ");
oled.print(humidity);
oled.print("% ");
oled.print(" Temp: ");
oled.print(mappedTemperature);
oled.println("C");
oled.display();
delay(3000); // Ubah delay menjadi 3000 agar data diperbarui setiap 3 detik
}