Frequenzimetro

Se volete un esempio "porchereccio" di questo tipo di approccio, io sto provando a fare qualcosa di simie...
Ecco il codice iniziale per le prove:

volatile unsigned long stateh = 0; //tick alti
volatile unsigned long statel = 0;  //tick bassi
long previousMillis = 0;  //variabile per controllo tempo di scan
unsigned long htime=0;  //tempo High
unsigned long ltime=0;  //tempo Low
unsigned long phtime=0; // tempo precedente High
unsigned long pltime=0; // tempo precedente Low
unsigned long freq=0;  // frequenza
long interval = 1000;  //intervallo invio letture
float offset=3.00;  //offset empirico
void setup()
{
  Serial.begin(9600);  //inizializzo la seriale
  attachInterrupt(0, hitime, HIGH);  //iniziamo da un livello alto
  
}

void loop()
{
  
  unsigned long currentMillis = millis(); //prendo il tempo
  if(currentMillis - previousMillis > interval) {  //se è trascorso l'intervallo impostato
   
    previousMillis = currentMillis;  //reetto il tempo
    //stampo i valori calcolati
  Serial.print("Hi= ");
   Serial.println(stateh);
    Serial.print("lo= ");
   Serial.println(statel);
     Serial.print("frequenza(Hz)= ");
     freq=((stateh + statel)/2)-offset;  //presunto dutycycle a 50%
       Serial.println(freq,9);
   Serial.print("periodo(ms)= ");
   Serial.println(((1.00/freq)*1000000.00),4);
   Serial.print("Htime(uS)= ");  
   Serial.println(htime);
   Serial.print("Ltime(uS)= "); 
   Serial.println(ltime);
  // azzeriamo tutto... si riparte
stateh=0;
statel=0;
freq=0;
phtime=0;
htime=0;
pltime=0;
ltime=0;
}

}

void hitime()  //interrupt per livello alto
{
  ltime=pltime-micros();
  stateh  = stateh + 1;  //incremento numero tick alti
  detachInterrupt(0); 
  attachInterrupt(0, lotime, LOW);  //aspettiamo l'evento low
  phtime=micros(); 
}

void lotime()  //interrupt per livello basso
{
  htime=phtime-micros();
  statel  =statel + 1; //incremento numero tick bassi
  detachInterrupt(0); 
  attachInterrupt(0, hitime, HIGH);  //aspettiamo l'evento high
  pltime=micros();
}

non badate allo stile ma segnalatemi eventuali errorazzi :grin:
lo sto provando con un generatore di onda quadra (autocostruito) che mi spara fuori 57Hz collegato sul pin 2 e che il programmillo legge correttamente, ripeto è un inizio... anche se i DSO mi dice che funziona.