// Program: PT1 Filter
// Autor: David Pranjkovic
// Datum: 02.10.2024

// Bibliotheken

// Konstanten
#define ADC_IN_POTI 32
#define FILTERSIZE 20
#define DELAYINPUT 50   //Abtastzeit geringer als T
#define KPT1 1  // Verstärkungfaktor
#define T 1000  //Zeitkonstante


// Variablen
unsigned long prevMillis = 0;
unsigned int filterIndex = 0;


float filteredValue = 0;    //gefilterter Wert

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Hello, ESP32!");
}

void loop() {
  // put your main code here, to run repeatedly:

  unsigned long dt = millis() - prevMillis;

  // Timing: Aufruf im DELAY Takt (z.B 100ms)
  if (dt >= DELAYINPUT) {
    prevMillis = millis();

    int adcValue = analogRead(ADC_IN_POTI);


    //gefilterter periodischer wert wird berechnet:
    filteredValue = filteredValue + (KPT1 * adcValue - filteredValue) * DELAYINPUT / (DELAYINPUT + T);

    Serial.print(adcValue);   // Werte vom Potentiometer
    Serial.print(",");
    Serial.println(filteredValue);
  }

}