#include <DHT.h>
#include <Preferences.h> // Library untuk menyimpan data ke memori non-volatile
#define DHTPIN 4 // Pin untuk sensor DHT22
#define DHTTYPE DHT22 // Jenis sensor DHT22
DHT dht(DHTPIN, DHTTYPE);
Preferences preferences; // Membuat objek Preferences untuk penyimpanan non-volatile
unsigned long p =0;
const long i = 2000;
float currentTemperature = 0.0;
float currentHumidity = 0.0;
bool currentStatus = false;
const int pb = 5;
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(pb, INPUT_PULLUP);
// Memulai Preferences
preferences.begin("my-app", false); // "my-app" adalah namespace, false untuk read/write
// Membaca data sebelumnya dari memori non-volatile
float previousTemperature = preferences.getFloat("temperature", 0.0); // Default 0.0 jika belum pernah disimpan
bool previousStatus = preferences.getBool("status", false); // Default false jika belum pernah disimpan
Serial.println("Data sebelumnya setelah restart:");
Serial.print("Suhu: ");
Serial.println(previousTemperature);
Serial.print("Status: ");
Serial.println(previousStatus ? "Aktif" : "Tidak Aktif");
}
void loop() {
// Membaca suhu dan kelembapan dari sensor DHT22
unsigned long cr = millis();
if(cr - p >= i){
p = cr;
currentTemperature = dht.readTemperature();
currentHumidity = dht.readHumidity();
if (isnan(currentTemperature) || isnan(currentHumidity)) {
Serial.println("Gagal membaca dari sensor DHT22!");
} else {
// Tampilkan data suhu dan kelembapan di Serial Monitor
Serial.print("Suhu: ");
Serial.print(currentTemperature);
Serial.print(" °C, Kelembapan: ");
Serial.print(currentHumidity);
Serial.println(" %");
// Simpan data suhu ke memori non-volatile
preferences.putFloat("temperature", currentTemperature);
}
}
int spb = digitalRead(pb);
// Cek jika pembacaan gagal
// Contoh manipulasi status boolean
if (currentTemperature > 25.0) { // Contoh kondisi: jika suhu lebih dari 25°C
currentStatus = true;
} else {
currentStatus = false;
}
// Simpan status boolean ke memori non-volatile
preferences.putBool("status", currentStatus);
// Tampilkan status boolean di Serial Monitor
Serial.print("Status saat ini: ");
Serial.println(currentStatus ? "Aktif" : "Tidak Aktif");
if(spb == 0){
delay(5000);
ESP.restart();
}
// Delay 2 detik sebelum loop berikutnya
delay(200);
}