// 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);
  }
}