Maximo tiempo de Muestreo para entradas digitales

Hay alguna forma de mejorar la rapidez de muestreo por una de las entradass digitales del arduino ? , en mi sketch espero un cruce por 1 y luego por 0 para saber el ancho del pulso (o señal cuadrada ).

int signalpin = 8;
float t1=0;
float t2=0;
int i=0;
int val=0;
void setup() {
Serial.begin(115200);
pinMode(signalpin,INPUT);
}

void loop() {
val = digitalRead(signalpin);
if (val==1){
t1=micros();
val=digitalRead(signalpin);
if (val == 0){//ESPERANDO QUE baje el pulso
t2=micros()-t1;
}
i+=1;
Serial.print("Medicion ");
Serial.print(i);
Serial.print(":");
Serial.print(t2);
Serial.println(" s ");
t2=0;

}

}

¿Has probado pulseIn?

Te hace justo lo que necesitas, solo que el resultado se da en microsegundos:

#define SIGNAL_PIN 8

void setup() {
  Serial.begin(115200);
  pinMode(SIGNAL_PIN, INPUT);
}

void loop() {
  unsigned long anchoPulso = pulseIn(SIGNAL_PIN, HIGH); // Mide, en microsegundos, lo que tarda en estado HIGH.
  // Si dicho pin ya estaba en HIGH en el momento que fue llamado, entonces espera a que pase a LOW, y luego a HIGH de nuevo; para así iniciar el conteo.

  if (anchoPulso) { // Equivalente a decir: if (anchoPulso != 0)
  Serial.print(F("Medicion: "));
  Serial.print(i);
  Serial.println(F(" us"));
  } else {
    Serial.println(F("Pulso no detectado o demasiado corto."));
    // Se dice "demsiado corto" porque si pulseIn se basa en micros para contar, entonces pulsos menores a 4 us todavía pueden retornar cero.
  }
}

Te doy código completo, para que veas que se puede hacer todo eso sin muchas variables.

Lo más rápido ( y por mucho) es trabajar a bajo nivel con la instrucción port.
Saludos

Otra opción sería usar INPUT Capture del pin apropiado para esa tarea.
Medirás con la precisión del cristal sin fallos y tiempos muertos.

Con la resolución del prescaler pero hasta con 62.5nseg por cuenta.

Probare sus sugerencias y les cuento con cual me fue mejor , Saludos.

con respecto a lo comentado al lenguajo de bajo de nivel, solo lo he trabajado para generar pulsos bastante rapidos desde otro arduino (el que hace la función de generador de onda ), dejare esto como ultima opción ya que es mas engorroso ver la programación asi ( me recuerda al assembler cuando trabajaba con los pics ).