// Program: PT1 Filter
// Autor: Alexander Leitold
// Datum: 2.10.2024
//Bibliotheken
// Konstanten
#define ADC_IN_POTI 32 //Eingelesener Pin
#define DELAY 50 // Abtastzeit in ms
#define KPT1 1.0 // Verstärkungsfaktor für den PT1-Filter
#define TAU 1000.0 // Zeitkonstante in ms
// Globalen Variablen
unsigned long prevMillis = 0; // Speichert die Zeit für das Abtasten
float filteredValue; // PT1-Filter Ausgangswert
void setup() {
// Serielle Kommunikation starten
Serial.begin(115200);
Serial.println("Start PT1 Filter");
}
void loop() {
// Zeitdifferenz seit letztem Aufruf berechnen
unsigned long currentMillis = millis();
unsigned long dt = currentMillis - prevMillis;
// Timing: Aufruf alle DELAY ms
if (dt >= DELAY) {
prevMillis = currentMillis;
// Analogen Wert einlesen
int adcValue = analogRead(ADC_IN_POTI);
// PT1-Filter Berechnung
filteredValue = filteredValue + (KPT1 * adcValue - filteredValue) * dt / (dt + TAU);
//filteredValue = filteredValue + (KPT1*newValue-filteredVaue)*dt/(dt+ T)
// Werte über die serielle Schnittstelle ausgeben
Serial.print(adcValue);
Serial.print(",");
Serial.println(filteredValue);
}
}