Mittelwert von bestimmtem Messzeitraum ausgeben

Hallo liebes Forum.

Vor einer Weile hatte ich einen Höhenmesser angefangen und diesen weitgehend fertig gestellt was das Gehäuse und der Hardware betrifft.

Um voran zu kommen habe ich das Gerät zum laufen gebracht indem jede Sekunde der zuvor gemessene Wert auf dem Display angezeigt wird. Jedoch schwankt der Wert ziemlich und ich möchte das jetzt etwas dämpfen.
Die Idee war alle 100 ms eine Messung zu addieren, diese dann nach 10 Messungen am Ende durch 10 zu dividieren und dann erst anzuzeigen. Von mir aus auch 10 ms delay und 100 Messungen.

Leider tue ich mich als Anfänger etwas schwer. Hier ist anscheinend eine Lösung aber irgendwie bekomme ich es nicht hin:

Da im originalen Programm ein Drehencoder zum einstellen des Atmosphärendruck und das OLED Display usw. eingebunden sind habe ich hier mal nur den Teil der Druckmessung herauskopiert.
Kann mir da jemand etwas weiter helfen? Ist das überhaupt so möglich?

Grüße

#include "BMP280.h"
#define P0 1013.25 //mittlere Luftdruck in Meereshöhe (im Programm veränderbar)
BMP280 bmp;

void setup() {}

void loop(void) {
  double T, P;
  char result = bmp.startMeasurment();

  if (result != 0) {
    delay(result);
    result = bmp.getTemperatureAndPressure(T, P);

    if (result != 0) {
      double A = (bmp.altitude(P, P0) * 3.28084); //Umrechnung von Meter in Fuß

      delay(1000);

    }
  }
}

Hi

Vll. hilft Dir ein Running_Median.
meine ZIP ist nur einen Klick entfernt - hier im Forum
Du gibst an, wie viele Messwerte Du zusammen fassen willst.
Diese Messwerte werden sortiert.
Bei jedem Messwert, Den Du 'rein schiebst', bekommst Du als Rückgabe den jetzt mittig stehenden Messwert dieser Liste zurück - oder fragst Diesen separat an, ohne einen neuen Wert eingeben zu müssen.

Meine Änderung bestand nur darin, daß ich den Median auf beliebige Datentypen umgestrickt habe, das Original (in der SHARP-Bibliothek) läuft mit int (16 Bit, signed).

MfG

GleitenderMittelwert oder Tiefpassfilter.

Beispiel (aus meiner Wühlkiste):

 template<typename DatenType> 
    class GleitenderMittelwert   // eher Tiefpassfilter
    {
      private:
        const double factor;
        double mittelwert;
        
      public:
         GleitenderMittelwert(const double factor):factor(factor),mittelwert(0){}
         
         void setInitial(double value)
         {
            mittelwert = value;
         }
         
         DatenType doValue(DatenType value) // neuen Wert verarbeiten
         {
            mittelwert *= 1.0 - factor;
            mittelwert += factor * value;
            return  mittelwert;
         }
         
         DatenType operator= (DatenType value)
         {
            return doValue(value);       
         }
         
         DatenType operator() (DatenType value)
         {
            return doValue(value);       
         }
         
         DatenType operator() () const
         {
            return mittelwert;       
         }
    
         operator DatenType() const
         {
           return mittelwert;
         }  
    };

// 1.0/11.0 entspricht in etwa einem Array mit 11 Zellen für die Berechnung des Mittelwertes
GleitenderMittelwert<uint16_t> gmw(1.0/11.0); 


void setup()
{
  Serial.begin(9600);
  gmw.setInitial(analogRead(A0));
}

void loop()
{
  uint16_t value = analogRead(A0);
  Serial.print(value);
  Serial.print("  ");
  Serial.println(gmw(value));
  delay(200);
}

Hallo und vielen Dank für eure Lösungsansätze.
Wenn ich dazu komme werde ich das testen und berichten.