aboutsummaryrefslogtreecommitdiff
path: root/cores/arduino/wiring_pulse.c
diff options
context:
space:
mode:
Diffstat (limited to 'cores/arduino/wiring_pulse.c')
-rw-r--r--cores/arduino/wiring_pulse.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/cores/arduino/wiring_pulse.c b/cores/arduino/wiring_pulse.c
index 49fa38d..4da446c 100644
--- a/cores/arduino/wiring_pulse.c
+++ b/cores/arduino/wiring_pulse.c
@@ -48,7 +48,12 @@ unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout)
unsigned long maxloops = microsecondsToClockCycles(timeout)/16;
width = countPulseASM(portInputRegister(port), bit, stateMask, maxloops);
- return clockCyclesToMicroseconds(width * 16 + 16);
+
+ //prevent clockCyclesToMicroseconds to return bogus values if countPulseASM timed out
+ if (width)
+ return clockCyclesToMicroseconds(width * 16 + 16);
+ else
+ return 0;
}
/* Measures the length (in microseconds) of a pulse on the pin; state is HIGH