// Program: Mittelwert
// Autor: David Pranjkovic
// Datum: 27.09.2024
// Bibliotheken
// Konstanten
#define ADC_IN_POTI 32 // ADC-Pin für den Potentiometer-Eingang
#define FILTERSIZE 20 // Größe des Arrays für den gleitenden Durchschnitt
#define DELAYINPUT 10 // Eingabezeitintervall in Millisekunden
#define DELAYOUTPUT 500 // Ausgabezeitintervall in Millisekunden
// Variablen
unsigned long prevMillis = 0; // Letzter Zeitstempel für Eingabeverarbeitung
unsigned long prevMillis2 = 0; // Letzter Zeitstempel für Ausgabeverarbeitung
int filterArray[FILTERSIZE]; // Array zur Speicherung von ADC-Werten
unsigned int filterIndex = 0; // Index für das Filterarray
float meanValue = 0; // Globale Variable für den Mittelwert
void setup() {
Serial.begin(115200); // Startet die serielle Kommunikation
Serial.println("Hello, ESP32!"); // Begrüßungsnachricht
}
void loop() {
unsigned long dt = millis() - prevMillis; // Zeitdifferenz seit letzter Eingabe
// Timing: Verarbeite Eingabe im Intervall von DELAYINPUT
if (dt >= DELAYINPUT) {
prevMillis = millis(); // Aktualisiere Zeitstempel
int adcValue = analogRead(ADC_IN_POTI); // Lies ADC-Wert vom Potentiometer
filterArray[filterIndex] = adcValue; // Speichere Wert im Filterarray
filterIndex++; // Erhöhe den Index
if (filterIndex == FILTERSIZE) { // Rücksetzen des Index, wenn Array voll
filterIndex = 0;
}
meanValue = 0; // Setze Mittelwert zurück
for (int i = 0; i < FILTERSIZE; i++) { // Addiere alle Werte im Array
meanValue += filterArray[i];
}
meanValue = meanValue / FILTERSIZE; // Berechne den Durchschnitt
}
unsigned long dt2 = millis() - prevMillis2; // Zeitdifferenz seit letzter Ausgabe
// Ausgabe im Intervall von DELAYOUTPUT
if (dt2 >= DELAYOUTPUT) {
prevMillis2 = millis(); // Aktualisiere Zeitstempel
Serial.print(millis()); // Gebe Zeitstempel aus
Serial.print(","); // Trennzeichen
Serial.println(meanValue, 2); // Gebe Mittelwert mit 2 Dezimalstellen aus
}
}