#include <DHT.h>
#include <ShiftRegister74HC595.h>
// Konfigurasi DHT22
#define DHTPIN A4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Konfigurasi Seven Segment
ShiftRegister74HC595<4> sr(8, 7, 4); // SR_Data, SR_Clock, SR_Latch
// Konfigurasi Output
#define FAN_PIN 13
#define SPRAY_PIN 12
#define HEATER_PIN 11
// Konfigurasi Tombol
#define BUTTON1_PIN A1
#define BUTTON2_PIN A2
#define BUTTON3_PIN A3
// Variabel pengaturan
float maxTemp = 30.0;
float minTemp = 25.0;
float minHumidity = 50.0;
void setup() {
dht.begin();
Serial.begin(115200);
pinMode(FAN_PIN, OUTPUT);
pinMode(SPRAY_PIN, OUTPUT);
pinMode(HEATER_PIN, OUTPUT);
pinMode(BUTTON1_PIN, INPUT);
pinMode(BUTTON2_PIN, INPUT);
pinMode(BUTTON3_PIN, INPUT);
sr.setAllHigh(); // Matikan semua display seven segment
}
void loop() {
float temp = dht.readTemperature();
float humidity = dht.readHumidity();
Serial.print("suhu :" + String(temp));
Serial.println(" Kelembapan :" + String(humidity));
// Kontrol Kipas
if (temp > maxTemp) {
digitalWrite(FAN_PIN, HIGH);
} else {
digitalWrite(FAN_PIN, LOW);
}
// Kontrol Spray Air
if (humidity < minHumidity) {
digitalWrite(SPRAY_PIN, HIGH);
} else {
digitalWrite(SPRAY_PIN, LOW);
}
// Kontrol Elemen Pemanas
if (temp < minTemp) {
digitalWrite(HEATER_PIN, HIGH);
} else {
digitalWrite(HEATER_PIN, LOW);
}
// Tampilkan suhu dan kelembapan secara bergantian
static unsigned long lastDisplaySwitch = 0;
if (millis() - lastDisplaySwitch > 5000) {
lastDisplaySwitch = millis();
displayData(temp, humidity);
}
// Pengaturan Tombol
if (digitalRead(BUTTON1_PIN) == HIGH) {
maxTemp = adjustValue(maxTemp);
}
if (digitalRead(BUTTON2_PIN) == HIGH) {
minTemp = adjustValue(minTemp);
}
if (digitalRead(BUTTON3_PIN) == HIGH) {
minHumidity = adjustValue(minHumidity);
}
}
void displayData(float temp, float humidity) {
// Implementasi untuk menampilkan data pada display seven segment menggunakan IC 74HC595
// Tampilkan suhu terlebih dahulu, lalu kelembapan
sr.set(1,9);
}
float adjustValue(float currentValue) {
// Implementasi untuk mengatur nilai baru menggunakan tombol
// Mengembalikan nilai baru yang disesuaikan
return currentValue; // Contoh implementasi sementara
}