Como medir o tempo de um pulso

Boa tarde,

Estou precisando de uma ajuda para um projeto, eu preciso medir a saída de uma porta ex-or, medir o tempo que ela fica alta, essa é a imagem do sinal que estou tendo na saída da porta.

Tentei ler o sinal de duas formas:

1º inseri em uma porta analógica e exibi o resultado no serial monitor, usei esse código:

float fator = 0;

void setup( ){ Serial.begin(9600); }

void loop() { int leit_fp = analogRead(A0); Serial.println(leit_fp);

}

Na 2ª usei a função pulseln e inseri o sinal em uma porta digital usando esse código:

int porta = 8;

unsigned long tempo;

void setup(){

Serial.begin(9600);

pinMode(porta, INPUT); }

void loop(){

tempo = pulseIn(porta, HIGH);

Serial.println(tempo); }

Nos dois caso o resultado variava muito não consegui uma leitura estável:

Preciso de ajuda se alguém puder me dar uma ideia de como conseguir isso agradeceria muito.

Não mostra nas imagens nenhuma das escalas do osciloscópio e assim é complicado saber de que tipo de sinal estamos a falar.
Se é um sinal com uma frequência alta, eu tentaria lê-lo com uma entrada de interrupção e com a função micros(). Pode configurar a interrupção para ser activada quando houver uma alteração no estado do pino. Depois ler o estado do pino e guardar o valor do contador micros() numa variável se o pino estiver alto e noutra variável se o pino estiver baixo. Quando o pino estiver baixo, quer dizer que já pode calcular o tempo do impulso e pode activar uma variável que lhe indique isso (apenas uma variável que tem o valor 1 quando já puder fazer o cálculo ou 0 caso contrário). No ciclo principal, apenas é necessário ver o valor desta última variável e caso seja 1 realizar o cálculo (subtrair os 2 valores de tempo medidos) e mostrar o resultado.
Atenção que pode estar a ter problemas por demorar muito tempo a enviar o valor para o "Serial Monitor". Tente alterar a baud para um valor superior, por exemplo:

Serial.begin(115200);

A frequência é baixa 60 hz, eu entendi que a função pulseln fazia mais ou menos isso que você sugeriu, inicia a contagem de tempo quando o pulso fica alto e para quando fica baixo, só que não entendo porque varia tanto o valor mostrado na serial e o sinal não esta variando tanto assim.

Qual é a amplitude do sinal? Esse valor também não é mostrado no osciloscópio.