#include <DHT.h>
#define DHTPIN 16 // Pin yang digunakan untuk sensor DHT
#define DHTTYPE DHT22 // Tipe sensor DHT (DHT22 atau DHT11)
DHT dht(DHTPIN, DHTTYPE);
unsigned long previousMillis1 = 0;
const unsigned long interval = 2000; // Interval pembacaan sensor (dalam milidetik)
//unsigned long previousMillis1 = 0; // Waktu terakhir pembacaan sensor
const int buz = 32;
bool buzstate = false;
unsigned long previousMillis = 0;
const long buzOnTime = 1000;
const long buzOffTime = 500;
unsigned long buzInterval = buzOnTime; // Waktu awal interval sesuai dengan buzOnTime
unsigned long startTime = 0;
const unsigned long totalTime = 10000; // Waktu total 30 detik
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(buz, OUTPUT);
digitalWrite(buz, 0);
startTime = millis(); // Catat waktu mulai
}
void loop() {
unsigned long currentMillis = millis(); // Waktu sekarang
unsigned long currentMillis1 = millis(); // Waktu sekarang
// Periksa apakah sudah waktunya untuk membaca sensor lagi
if (currentMillis1 - previousMillis1 >= interval) {
// Simpan waktu terakhir pembacaan sensor
previousMillis1 = currentMillis1;
// Baca suhu dan kelembaban dari sensor DHT
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Periksa jika pembacaan sukses
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca sensor DHT!");
return;
}
if (temperature >= 30) {
buzstate = true;
} else {
}
// Tampilkan hasil pembacaan suhu dan kelembaban
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.print("°C | Kelembaban: ");
Serial.print(humidity);
Serial.println("%");
}
if (buzstate) {
if (currentMillis - previousMillis >= buzInterval) {
previousMillis = currentMillis;
digitalWrite(buz, !digitalRead(buz)); // Mengubah kebalikan dari status buzzer
Serial.println("zzzzzzz");
// Setel interval sesuai dengan keadaan saat ini
if (digitalRead(buz)) {
buzInterval = buzOnTime;
} else {
buzInterval = buzOffTime;
}
}
}
unsigned long elapsedTime = currentMillis - startTime;
if (elapsedTime >= totalTime) {
// Hentikan proses setelah 30 detik
digitalWrite(buz, LOW); // Matikan buzzer
buzstate = false; // Setel buzstate kembali ke false
startTime = millis(); // Reset startTime
elapsedTime = 0; // Reset elapsedTime
//while (true) {} // Tetap di dalam loop untuk menghentikan program
}
}