#include <Arduino.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Tone.h>
#define DHTPIN 5
#define DHTTYPE DHT22
#define ECHO_PIN 12
#define TRIGGER_PIN 14
#define BUZZER_PIN 16
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 21, 22);
Tone buzzer;
// RGB LED pins
#define RED_PIN 15
#define GREEN_PIN 2
#define BLUE_PIN 4
#define LED_R 18
#define LED_G 19
#define LED_B 23
void setup() {
Serial.begin(115200); // Start serial communication at 115200bps
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Led 1 Warna 3
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
// Initialize RGB LED pins as outputs
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
dht.begin();
lcd.init();
lcd.backlight();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
float duration, distance;
Serial.print("H: "); //Humidity
Serial.print(h);
Serial.print(" %\t");
Serial.print("T: "); //Temperature
Serial.print(t);
Serial.println(" *C ");
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
lcd.setCursor(0, 0);
lcd.print("D: "); // Distance / Jarak
lcd.print(distance);
lcd.print(" cm ");
if (distance > 15 ) {
lcd.setCursor(0, 0);
lcd.print("D: "); // Distance / Jarak
lcd.print(distance);
lcd.print(" cm ");
digitalWrite(LED_R, HIGH);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, LOW);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
lcd.backlight();
digitalWrite(LED_R, HIGH);
delay(500);
digitalWrite(LED_R, LOW);
delay(500);
digitalWrite(RED_PIN, HIGH);
delay(500);
digitalWrite(RED_PIN, LOW);
delay(500);
} else if (distance > 5 && distance <= 15) {
lcd.setCursor(0, 0);
lcd.print("D: "); // Distance / Jarak
lcd.print(distance);
lcd.print(" cm ");
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, HIGH);
digitalWrite(LED_B, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(RED_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
lcd.backlight();
digitalWrite(LED_G, HIGH);
delay(500);
digitalWrite(LED_G, LOW);
delay(500);
digitalWrite(GREEN_PIN, HIGH);
delay(500);
digitalWrite(GREEN_PIN, LOW);
delay(500);
} else if (distance <= 5) {
lcd.setCursor(0, 0);
lcd.print("D: "); // Distance / Jarak
lcd.print(distance);
lcd.print(" cm ");
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, HIGH);
digitalWrite(BLUE_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(RED_PIN, LOW);
lcd.backlight();
digitalWrite(LED_B, HIGH);
delay(500);
digitalWrite(LED_B, LOW);
delay(500);
digitalWrite(BLUE_PIN, HIGH);
delay(500);
digitalWrite(BLUE_PIN, LOW);
delay(500);
buzzer.Tone(BUZZER_PIN, 1000);
delay(500);
buzzer.Tone(BUZZER_PIN);
}
}