#include <Adafruit_Sensor.h>
#include <DHT.h>
#define DHTTYPE DHT22
#define DHT1_PIN 13 // Pin sensor lantai 1
DHT dht1(DHT1_PIN, DHTTYPE);
unsigned long previousMillis1 = 0;
const long interval1 = 2100; // Interval pembacaan DHT
#define BUTTON_PIN_ADD 17 // Tombol untuk menambah jumlah
#define BUTTON_PIN_SUBTRACT 16 // Tombol untuk mengurangi jumlah
#define BUTTON_PIN_MODE 4 // Tombol untuk mengubah mode count
float count1 = 0.0; // Variabel untuk menyimpan jumlah tombol ditekan dalam mode count 1
float count2 = 0.0; // Variabel untuk menyimpan jumlah tombol ditekan dalam mode count 2
float scale = 0.1; // Skala penjumlahan/pengurangan
// Variabel untuk menyimpan status tombol sebelumnya
bool previousButtonStateAdd = HIGH;
bool previousButtonStateSubtract = HIGH;
bool previousButtonStateMode = HIGH;
// Variabel untuk penanganan waktu
unsigned long previousMillis = 0;
const long interval = 200; // Interval debounce untuk tombol
// Variabel untuk melacak jumlah penekanan tombol mode
int modeButtonPressCount = 0;
const int BUZZER_PIN = 5; // Pin untuk buzzer
unsigned long previousMillis2 = 0; // Waktu sebelumnya saat perubahan status tombol
const long buzzDuration = 2000; // Durasi bunyi buzzer (2 detik)
const long buzzInterval = 800; // Interval antara bunyi dan diam (1 detik)
bool buzzerActive = false; // Status buzzer
void setup() {
Serial.begin(9600);
dht1.begin();
pinMode(BUTTON_PIN_ADD, INPUT_PULLUP);
pinMode(BUTTON_PIN_SUBTRACT, INPUT_PULLUP);
pinMode(BUTTON_PIN_MODE, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
// Baca status tombol
bool currentButtonStateAdd = digitalRead(BUTTON_PIN_ADD);
bool currentButtonStateSubtract = digitalRead(BUTTON_PIN_SUBTRACT);
bool currentButtonStateMode = digitalRead(BUTTON_PIN_MODE);
// Tambahkan jumlah jika tombol add ditekan
if (currentButtonStateAdd == LOW && previousButtonStateAdd == HIGH && currentMillis - previousMillis >= interval) {
if (modeButtonPressCount == 1) {
count1 += scale;
} else if (modeButtonPressCount == 2) {
count2 += scale;
}
previousMillis = currentMillis;
}
// Kurangi jumlah jika tombol subtract ditekan
if (currentButtonStateSubtract == LOW && previousButtonStateSubtract == HIGH && currentMillis - previousMillis >= interval) {
if (modeButtonPressCount == 1) {
count1 -= scale;
} else if (modeButtonPressCount == 2) {
count2 -= scale;
}
previousMillis = currentMillis;
}
// Ubah mode count jika tombol mode ditekan
if (currentButtonStateMode == LOW && previousButtonStateMode == HIGH && currentMillis - previousMillis >= interval) {
modeButtonPressCount++;
if (modeButtonPressCount == 3) {
modeButtonPressCount = 0; // Kembali ke mode 1 setelah mode 2
}
previousMillis = currentMillis;
}
// Simpan status tombol sebelumnya untuk debounce
previousButtonStateAdd = currentButtonStateAdd;
previousButtonStateSubtract = currentButtonStateSubtract;
previousButtonStateMode = currentButtonStateMode;
// Tampilkan jumlah tombol yang ditekan dan skala saat ini di Serial Monitor
/*Serial.print("Mode: ");
Serial.print(modeButtonPressCount);
Serial.print(", Count 1: ");
Serial.print(count1, 1); // Menampilkan jumlah count 1 dengan satu digit desimal
Serial.print(", Count 2: ");
Serial.println(count2, 1); // Menampilkan jumlah count 2 dengan satu digit desimal
*/
if (currentMillis - previousMillis1 >= interval1) {
previousMillis1 = currentMillis;
float suhu1 = dht1.readTemperature() + count1 ;
float kelembaban1 = dht1.readHumidity() + count2 ;
if (isnan(suhu1) || isnan(kelembaban1)) {
Serial.println("Gagal membaca sensor!");
return;
}
Serial.print(suhu1);
Serial.print(" °C, Kelembaban: ");
Serial.print(kelembaban1);
Serial.println("%");
if(suhu1 >23 ){
if (!buzzerActive) {
// Aktifkan buzzer dan catat waktu aktif
digitalWrite(BUZZER_PIN, HIGH);
buzzerActive = true;
previousMillis2 = currentMillis;
}
} else {
// Matikan buzzer setelah durasi bunyi tercapai
if (buzzerActive && currentMillis - previousMillis2 >= buzzDuration) {
digitalWrite(BUZZER_PIN, LOW);
buzzerActive = false;
previousMillis2 = currentMillis; // Catat waktu mati buzzer
}
}}
// Tunggu sebentar sebelum membaca tombol lagi
delay(100);
}