#include <DHT.h>
#include <TimerOne.h> // Library untuk mengaktifkan interrupt timer
#define DHTPIN 2 // Pin untuk sensor DHT
#define DHTTYPE DHT22 // Tipe sensor DHT22
#define LEDPIN 13 // Pin untuk LED
DHT dht(DHTPIN, DHTTYPE);
volatile float temperatureData[10]; // Array untuk menyimpan data suhu
volatile int dataIndex = 0; // Indeks saat ini untuk data suhu
volatile bool dmaTransferComplete = false; // Penanda bahwa transfer DMA selesai
void setup() {
Serial.begin(9600);
Serial.println("Program Jalan");
dht.begin();
pinMode(LEDPIN, OUTPUT); // Konfigurasi pin LED sebagai output
// Mengatur Timer1 untuk interrupt periodik (misalnya, setiap 1 detik)
Timer1.initialize(1000000); // 1 detik dalam mikrodetik
Timer1.attachInterrupt(dmaSimulation);
}
void loop() {
if (dmaTransferComplete) {
digitalWrite(LEDPIN, HIGH); // Nyalakan LED ketika transfer selesai
Serial.println("Data Suhu:");
for (int i = 0; i < dataIndex; i++) {
Serial.println(temperatureData[i]); // Cetak data suhu
}
dmaTransferComplete = false;
dataIndex = 0; // Reset indeks data
delay(1000); // Tambahkan jeda untuk memperlambat perubahan LED
digitalWrite(LEDPIN, LOW); // Matikan LED
}
}
// Simulasi DMA menggunakan interrupt timer
void dmaSimulation() {
if (dataIndex < 10) {
float temp = dht.readTemperature(); // Baca suhu
if (!isnan(temp)) {
temperatureData[dataIndex++] = temp; // Simpan data suhu
}
} else {
dmaTransferComplete = true; // Tandai transfer DMA telah selesai
}
}