// ===== MOVING AVERAGE FILTER =====
#include <Arduino.h>
#define WINDOW_SIZE 10 // Jumlah data yang dirata-ratakan
#define SAMPLE_INTERVAL 100 // Waktu jeda antar pembacaan (ms)
int rawData[WINDOW_SIZE]; // Buffer data
int bufferIndex = 0;
int sum = 0;
void setup() {
Serial.begin(115200);
randomSeed(analogRead(0)); // Untuk nilai acak yang bervariasi
for (int i = 0; i < WINDOW_SIZE; i++) rawData[i] = 0;
}
void loop() {
int newValue = random(0, 101); // Simulasi data sensor acak 0–100
// Update buffer
sum -= rawData[bufferIndex]; // Kurangi nilai lama
rawData[bufferIndex] = newValue; // Masukkan nilai baru
sum += newValue; // Tambah nilai baru
bufferIndex = (bufferIndex + 1) % WINDOW_SIZE; // Rotasi index buffer
// Hitung Moving Average
float movingAverage = (float)sum / WINDOW_SIZE;
// Tampilkan hasil
Serial.print("Raw: ");
Serial.print(newValue);
Serial.print(" | Moving Avg: ");
Serial.println(movingAverage);
delay(SAMPLE_INTERVAL);
}