#include <Encoder.h>
const int trigPin = 9;
const int echoPin = 10;
const int soundPin = A0;
const int fanPin = 6;
const int clkPin = 2; // Pin untuk CLK (Rotary Encoder)
const int dtPin = 3; // Pin untuk DT (Rotary Encoder)
long duration;
int distance;
int soundLevel;
int fanSpeed = 0; // Kecepatan kipas (0 = off, 1 = medium, 2 = high)
// Inisialisasi Encoder
Encoder enc(clkPin, dtPin);
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(fanPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Baca jarak menggunakan HC-SR04
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
// Baca level suara dari KY-400
soundLevel = analogRead(soundPin);
// Baca putaran rotary encoder untuk mengatur kecepatan kipas
long pos = enc.read(); // Baca nilai putaran encoder
if (pos > 0) {
fanSpeed = 2; // Kecepatan tinggi
} else if (pos < 0) {
fanSpeed = 1; // Kecepatan sedang
} else {
fanSpeed = 0; // Kecepatan mati
}
// Menampilkan status di Serial Monitor
Serial.print("Jarak: ");
Serial.print(distance);
Serial.print(" cm | Suara: ");
Serial.print(soundLevel);
Serial.print(" | Fan Speed: ");
Serial.println(fanSpeed);
// Kontrol kipas berdasarkan jarak, suara, dan putaran encoder
if (distance < 20 || soundLevel > 500 || fanSpeed > 0) {
if (fanSpeed == 1) {
digitalWrite(fanPin, HIGH); // Kecepatan sedang
} else if (fanSpeed == 2) {
digitalWrite(fanPin, HIGH); // Kecepatan tinggi
} else {
digitalWrite(fanPin, LOW); // Kipas mati
}
} else {
digitalWrite(fanPin, LOW); // Kipas mati
}
delay(200); // Penundaan untuk stabilitas sensor
}