From d34be079602e88494f1b323233d4e20d78f8bdcf Mon Sep 17 00:00:00 2001 From: scaletta-silabs <61888796+scaletta-silabs@users.noreply.github.com> Date: Fri, 23 Feb 2024 22:20:00 -0600 Subject: [PATCH] pulseIn function should start measurement from requested state not opposite Arduino reference can be viewed here: https://www.arduino.cc/reference/en/language/functions/advanced-io/pulsein/ --- cores/silabs/wiring_pulse.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cores/silabs/wiring_pulse.cpp b/cores/silabs/wiring_pulse.cpp index 2230c0e..987e79e 100644 --- a/cores/silabs/wiring_pulse.cpp +++ b/cores/silabs/wiring_pulse.cpp @@ -45,16 +45,16 @@ unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout) unsigned long timing_start; unsigned long timing_result; unsigned long timeout_end = micros() + timeout; - // Wait for the pin to change to the opposite of the requested state - bool res = wait_for_pin_state(pin, !state, timeout_end); + // Wait for the pin to change to the requested state + bool res = wait_for_pin_state(pin, state, timeout_end); // Start measurment timing_start = micros(); // Return 0 if we timed out if (!res) { return 0; } - // Wait for the pin to change to the requested state - res = wait_for_pin_state(pin, state, timeout_end); + // Wait for the pin to change to the opposite of the requested state + res = wait_for_pin_state(pin, !state, timeout_end); // Calculate the measurement result timing_result = micros() - timing_start; // Return 0 if we timed out