From 2d15b35f62c0e3e981ee1ad9fc1367478504d1e9 Mon Sep 17 00:00:00 2001 From: Eduardo Spremolla Date: Sat, 29 Nov 2025 17:24:36 -0300 Subject: [PATCH] Update softSerial.cpp Detect false start bit by glitch, and sample all bits more in the middle. --- libraries/Basics/src/softSerial.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libraries/Basics/src/softSerial.cpp b/libraries/Basics/src/softSerial.cpp index b4b7ee6..24b85c9 100644 --- a/libraries/Basics/src/softSerial.cpp +++ b/libraries/Basics/src/softSerial.cpp @@ -123,7 +123,10 @@ void softSerial::receiverBegin(void) else tcnt += GET_MCU_RELOAD - timetemp + intTime; - delayTiker((uint32_t)(timedelay * tikerInUs)-tcnt); + //delayTiker((uint32_t)(timedelay * tikerInUs)-tcnt); + delayTiker((uint32_t)((timedelay/3) * tikerInUs)-tcnt); // move to the center of start bit start bit + if(DIRECT_READ(_rxbaseReg, _rxbitmask)==1) return ; // center of startbit not 0 , bye bye glitch trigger + delayus(timedelay); // delay to center of first bit uint8_t data = 0; uint32_t start = millis(); @@ -156,6 +159,9 @@ void softSerial::receiverBegin(void) if (tcnt >= ticks) return; }; + delayus(timedelay/2); // delay to center of new start bit + if(DIRECT_READ(_rxbaseReg, _rxbitmask)==1) return ; // center of startbit not 0 , bye bye + delayus(timedelay); data=0; } while (millis() - start < SOFTSERIAL_RX_TIMEOUT); @@ -266,3 +272,4 @@ void softSerial::softwarePrintf(char *p_fmt, ...) delete[] temp; } } +