Mit Alternative meinte ich, ob es eine Funktion ähnlich pulseIn gibt ohne ein timeout oder mit einem großen timeout.
Was hindert Dich daran, so eine ähnliche Funktion ohne Timeout selbst zu schreiben?
Was macht denn die Funktion?
- Sie mißt die Pulselänge eines Low- oder High-Impulses auf Mikrosekunden genau
- dazu wartet sie einen ganzen, vollständigen Impuls ab, je nachdem HIGH oder LOW
- während die Funktion läuft, blockiert sie den weiteren Programmablauf
- damit ein Programm nicht unendlich lange blockiert wird, gibt es einen Timeout
Lasse ich den Timeout weg und reicht es mir, das Timing des auszumessenden Impulses auf Millisekunden genau zu bekommen, schreibe ich die eigene Funktion:
unsigned long slowPulseIn(byte pin, boolean State)
{
long timing;
while (digitalRead(pin)==State) ; // pulse in progress, wait for another one
while (digitalRead(pin)==!State) ; // false pulse flank, just wait
timing=millis(); // now the pulse starts
while (digitalRead(pin)==State) ; // pulse in progress, wait until finished
return(millis()-timing); // return pulse duration
}
Und dann rufst Du statt pulseIn() eben die selbstgeschriebene Funktion slowPulseIn() auf, die kein Timeout hat. Falls Du Dein Programm wirklich "unendlich lange" blockieren möchtest, während es auf den Impuls wartet und zwischendurch gar nichts anderes machen kann.