Esto sin duda agregará retrasos cuando encuestes el pin en un bucle de bloqueo
while (digitalRead(RCpin) == LOW) { // count how long it takes to rise up to HIGH
reading++; // increment to keep track of time
if (reading == 30000) {
// if we got this far, the resistance is so high
// its likely that nothing is connected!
break; // leave the loop
}
Suponiendo que su compilador puede optimizar el código de manera extremadamente eficiente, este bucle tomaría aproximadamente 4 líneas de código para ejecutarse, ya que tiene que leer el pin, luego compararlo con un valor y luego ramificarse según el resultado (estaría muy impresionado si pudiera obtener estas pocas instrucciones). Además, asuma que cada una de esas instrucciones toma solo 1 ciclo de tiempo para ejecutarse (esto también probablemente tomará más, pero ayuda a resolver el problema). Esta rutina podría tomar como máximo :
\ $ MaxRoutineTime = LoopIterations \ times \ frac {Instrucciones} {LoopIteration} \ times \ frac {Segundos} {Instrucciones} \ $
\ $ MaxRoutineTime = 30,000 \ iteraciones de espacio \ veces \ frac {4 \ instrucciones de espacio}
{LoopIteration} \ times \ frac {Segundos} {8,000,000 \ space Instructions} \ $
\ $ MaxRoutineTime = 15 \ space mS \ $
pero asumo que tomará un poco más que eso debido a las prestaciones mencionadas anteriormente.
La razón por la que no agrega demoras cuando se usa un ADC es porque el periférico puede configurarse para generar interrupciones y solo se le notificará cuando se complete la lectura del ADC. El tiempo que tarda el ADC en completar una medición es un número finito de ciclos de reloj, por lo que la nota de la aplicación a la que hace referencia indica que si disminuye la velocidad de su reloj, el ADC seguirá teniendo el mismo número de ciclos de reloj para complete una medición, su medición tomará más tiempo porque el reloj es más lento.
Editar
A primera vista de su imagen, combinado con el hecho de que mencionó el audio, pensé que estaba midiendo una entrada de micrófono. Sin embargo, parece que solo estás usando una Resistencia Sensible a la Fuerza (FSR) que es solo un sensor de presión. Si no necesita saber la cantidad de presión, solo que se presionó, no tiene que pasar por todos los problemas para encontrar la lectura exacta. Simplemente puede usar cualquier entrada digital que genere interrupciones si selecciona el valor de resistencia correcto (en lugar del condensador). Simplemente configurará un pin digital para generar interrupciones en los bordes ascendentes y seleccionará una resistencia que le dará un cambio de estado (bajo / alto) con la cantidad de fuerza deseada para su toque. Entonces sabrá cada vez que se empujó el FSR y podrá manejarlo de manera no bloqueada, introduciendo la menor latencia posible.