Smooth para un float

Hola buenos días, tengo un programa para leer el desfase de corriente:

Tengo conectada una pantalla lcd liquid crystal:

#include <LiquidCrystal.h>
#include <math.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int pin = 13;
const int capacitor = 6;
float rads = 57.29577951; // 1 radian = approx 57 deg.
float degree = 360;
float frequency = 50;
float nano = 1 * pow (10,-6); // Multiplication factor to convert nano seconds into seconds

// Define floats to contain calculations

float pf;
float angle;
float pf_max = 0;
float angle_max = 0;
int ctr;

//float positivo;


void setup()
{
 pinMode(pin, INPUT);
 pinMode(capacitor, OUTPUT);
 lcd.begin(16, 2);
}

void loop()
{
  
for (ctr = 0; ctr <= 10; ctr++) // Perform 4 measurements then reset
  {
  // 1st line calculates the phase angle in degrees from differentiated time pulse
  // Function COS uses radians not Degree's hence conversion made by dividing angle / 57.2958
   angle = ((((pulseIn(pin, HIGH)) * nano)* degree)* frequency);
   pf = cos(angle / rads); 
   
   if (angle > angle_max) // Test if the angle is maximum angle
     {
      angle_max = angle; // If maximum record in variable "angle_max"
      pf_max = cos(angle_max / rads); // Calc PF from "angle_max"
     }
   }
   //if (angle_max > 360) // If the calculation is higher than 360 do following...
   if (angle_max > 360)
   {
    angle_max = 0; // assign the 0 to "angle_max"
    pf_max = 1; // Assign the Unity PF to "pf_max"
   }
   if (angle_max == 0) // If the calculation is higher than 360 do following...
   {
    angle_max = 0; // assign the 0 to "angle_max"
    pf_max = 1; // Assign the Unity PF to "pf_max"
   }
   /*if(pf_max<=0){
    pf_max=0;
   }*/
    /*if((pf_max>=0.82) && (pf_max <= 0.83)){
       digitalWrite(capacitor, HIGH);
       
      }
    else{
       digitalWrite(capacitor, LOW); 
       }
*/
    if((pf_max>=0.92) && (pf_max <= 0.99)){
       digitalWrite(capacitor, LOW);
       
      }
    else{
       digitalWrite(capacitor, HIGH); 
       }
    
   //positivo = pf_max;
   /*Serial.print(angle_max, 2); // Print the result
   Serial.print(",");
   Serial.println(pf_max, 2);
   Serial.println(fabs(caca));*/
   
  lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("PF=");
   lcd.setCursor(4,0);
   lcd.print(pf_max);
   lcd.print(" ");
   lcd.setCursor(0,1);
   lcd.print("Ph-Shift=");
   lcd.setCursor(10,1);
   lcd.print(angle_max);
   lcd.print(" ");
   
   delay(1000); //tiempo de escaneo
   angle = 0; // Reset variables for next test
   angle_max = 0;
}

Estoy intentando poner un smoothing o averange para "PF_max" que es el factor de potencia para que no cambie tan bruscamente, pero no puedo hacer que haga uno con float, ya que todos los ejemplos o librerías son con enteros o directamente lo leen desde los pines analógicos.

Hay alguno para floats?

Antes que nada, comprobaste la salida de la compuerta con un Osciloscopio?

Ambas señales hacen un cruce por cero y eso pasa por la XOR, verifica que tienes un pulso de un ancho proporcional al desfaseje Tension-Corriente.

surbyte:
Antes que nada, comprobaste la salida de la compuerta con un Osciloscopio?

Ambas señales hacen un cruce por cero y eso pasa por la XOR, verifica que tienes un pulso de un ancho proporcional al desfaseje Tensión-Corriente.

Si, funciona todo bien, lo tengo probando con una luz led, con una de bajo consumo y una resistiva.
Quiero ponerle un smoothing para que los valores no cambien tan rapidos y para que se muevan mas suave, la verdad es que no sabia si iba a funcionar este proyecto pero termino siendo bastante preciso.

Si claro que lo es.

Y el resultado de pulsein cual es.. puedes poner un listado de valores leidos. No el promedio.. solo lo que pulsein devuelve.