From 7a22827359ab82ba352bdd93486527e59d7b6618 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 2 Mar 2015 13:47:16 +0100 Subject: [PATCH] pulseIn: be consistent with standard API return 0 if timeout has been reached --- hardware/arduino/avr/cores/arduino/wiring_pulse.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hardware/arduino/avr/cores/arduino/wiring_pulse.c b/hardware/arduino/avr/cores/arduino/wiring_pulse.c index 49fa38dc9..4da446c81 100644 --- a/hardware/arduino/avr/cores/arduino/wiring_pulse.c +++ b/hardware/arduino/avr/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