Problemi con temporizzazioni e millis()

Salve,

ho uno spezzone di codice che conta degli impulsi e calcola la potenza (utilizzando un contatore di energia con uscita S0) il codice è il seguente:

// == CALCOLO POTENZA ==
void onPulse(){
   
  lastTime = pulseTime;                     
  pulseCount++;                            // contatore impulsi per energia
  newLett = (pulseTime - lastTime);       // tempo tra gli impulsi
  pulseTime = micros();
  power = (3600000000 / (newLett))/ppwh;   // calcolo potenza 3600000000uS = 1ora
}

Quando da una potenza elevata (= intervalli brevi di lampeggio) passo ad una bassa (= intervalli più lunghi) la lettura calcolata non rispecchia la realtà del consumo. Questo comportamento è normale ma volevo migliorarlo cercando di far calare in maniera artificiosa i valori con step non legati al consumo reale. Il problema si rende ancora più evidente con l'azzeramento del carico che mi fa rimanere la lettura su l'ultimo valore calcolato in maniera indefinita. Probabilmente questo ultimo problema è risolvibile con una certa facilità mentre il primo illustrato è veramente complicato... per me.
Ho provato ad usare i millis in parecchi modi ma non ne vengo proprio fuori.

Qualcuno mi può dare uno spunto su cui lavorare ?
Grazie

  1. fai una media dinamica:
    float media =media*0.9 + valore *0.1)
    Varia i 2 valori per avere un andamento dsiderato.

  2. quando per x secondi non c'é un impulso metti a zero il valore.

Ciao Uwe

Grazie mille ma non riesco a capire la teoria di quanto segnalato. Se spendi due parole in più mi aiuti molto...