From 4a957231011ad474b38f9122b299c2ad2c5b5b4a Mon Sep 17 00:00:00 2001 From: Kirk Benell Date: Thu, 13 Mar 2025 16:19:37 -0600 Subject: [PATCH 1/9] cleanup the getDisatnceValue method logic - to match vendors example. Reduce the *has distance* check to one i2c bus xaction, not two --- src/sfTk/sfDevXM125Presence.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/sfTk/sfDevXM125Presence.cpp b/src/sfTk/sfDevXM125Presence.cpp index 56db165..17a1411 100644 --- a/src/sfTk/sfDevXM125Presence.cpp +++ b/src/sfTk/sfDevXM125Presence.cpp @@ -90,8 +90,7 @@ sfTkError_t sfDevXM125Presence::getPresenceDistanceValuemm(uint32_t &presenceVal { // Check error bits uint32_t errorStatus = 0; - uint32_t presenceDetected = 0; - uint32_t presenceDetectedSticky = 0; + uint32_t presenceStatus = 0; sfTkError_t retVal = getPresenceDetectorErrorStatus(errorStatus); if (retVal != ksfTkErrOk || errorStatus != 0) @@ -112,14 +111,16 @@ sfTkError_t sfDevXM125Presence::getPresenceDistanceValuemm(uint32_t &presenceVal if (retVal != ksfTkErrOk || errorStatus != 0) return 4; - // Read detector result register and determine detection status - if (getPresenceDetectorPresenceDetected(presenceDetected) != ksfTkErrOk) + // Read from 16-Bit Register to get the presence detection status + if (_theBus->readRegister(SFE_XM125_PRESENCE_RESULT, presenceStatus) != ksfTkErrOk) return 5; - if (getPresenceDetectorPresenceStickyDetected(presenceDetectedSticky) != ksfTkErrOk) - return 6; + // Presence detected NOW or since last check (sticky) + bool bPresenceDetected = ((presenceStatus & SFE_XM125_PRESENCE_DETECTED_MASK) != 0) || + ((presenceStatus & SFE_XM125_PRESENCE_DETECTED_STICKY_MASK) != 0); - if (presenceDetected == 1 || presenceDetectedSticky == 1) + // If presence or a sticky presence is detected, get the distance and return + if (bPresenceDetected) return getPresenceDistance(presenceVal); return ksfTkErrOk; From cbdc7c26c8f3daffafa5d7ad9c3a19f41fb04a64 Mon Sep 17 00:00:00 2001 From: Kirk Benell Date: Thu, 13 Mar 2025 16:25:31 -0600 Subject: [PATCH 2/9] added a start and end value to the detectorStart() method, with default values; This range shouldnt be hard coded --- src/sfTk/sfDevXM125Presence.cpp | 6 +++--- src/sfTk/sfDevXM125Presence.h | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/sfTk/sfDevXM125Presence.cpp b/src/sfTk/sfDevXM125Presence.cpp index 17a1411..2e89a7f 100644 --- a/src/sfTk/sfDevXM125Presence.cpp +++ b/src/sfTk/sfDevXM125Presence.cpp @@ -32,7 +32,7 @@ sfTkError_t sfDevXM125Presence::begin(sfTkII2C *theBus) return ksfTkErrOk; } //------------------------------------------------------------------------- -sfTkError_t sfDevXM125Presence::presenceDetectorStart() +sfTkError_t sfDevXM125Presence::presenceDetectorStart(uint32_t startValue, uint32_t endValue) { // *** Presence Sensor Setup *** uint32_t errorStatus = 0; @@ -51,13 +51,13 @@ sfTkError_t sfDevXM125Presence::presenceDetectorStart() return 3; // Set Presence Start register - if (setPresenceStart(300) != ksfTkErrOk) + if (setPresenceStart(startValue) != ksfTkErrOk) return 4; sftk_delay_ms(100); // give time for command to set // Set End register - if (setPresenceEnd(2500) != ksfTkErrOk) + if (setPresenceEnd(endValue) != ksfTkErrOk) return 5; sftk_delay_ms(100); // give time for command to set diff --git a/src/sfTk/sfDevXM125Presence.h b/src/sfTk/sfDevXM125Presence.h index 48c814d..41fa9a0 100644 --- a/src/sfTk/sfDevXM125Presence.h +++ b/src/sfTk/sfDevXM125Presence.h @@ -246,8 +246,10 @@ class sfDevXM125Presence : public sfDevXM125Core sfTkError_t begin(sfTkII2C *theBus = nullptr) override; /// @brief This function sets all the beginning values for a basic I2C /// example to be run on the device for presence sensing. + /// @param start Start value for presence sensing in mm - default value is 1000 + /// @param end End value for presence sensing in mm - default value is 5000 /// @return ksfTkErrOk on success, or error code (value < -1) - sfTkError_t presenceDetectorStart(); + sfTkError_t presenceDetectorStart(uint32_t start = 1000, uint32_t end = 5000); /// @brief This function returns the presence value of the register /// with all the checks in place as per the I2C Datasheet. From cbbab48051635a5de605d991a88b84282925ad97 Mon Sep 17 00:00:00 2001 From: Kirk Benell Date: Fri, 14 Mar 2025 07:19:42 -0600 Subject: [PATCH 3/9] cleanup on distance method logic --- src/sfTk/sfDevXM125Presence.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/sfTk/sfDevXM125Presence.cpp b/src/sfTk/sfDevXM125Presence.cpp index 2e89a7f..38f9892 100644 --- a/src/sfTk/sfDevXM125Presence.cpp +++ b/src/sfTk/sfDevXM125Presence.cpp @@ -94,26 +94,26 @@ sfTkError_t sfDevXM125Presence::getPresenceDistanceValuemm(uint32_t &presenceVal sfTkError_t retVal = getPresenceDetectorErrorStatus(errorStatus); if (retVal != ksfTkErrOk || errorStatus != 0) - return 1; + return sfTkErrFail; // Start detector if (setPresenceCommand(SFE_XM125_PRESENCE_START_DETECTOR) != ksfTkErrOk) - return 2; + return sfTkErrFail; sftk_delay_ms(100); - // Poll detector status until busy bit is cleared - CHECK ON THIS! + // Poll detector status until busy bit is cleared if (presenceBusyWait() != ksfTkErrOk) - return 3; + return sfTkErrFail; // Verify that no error bits are set in the detector status register retVal = getPresenceDetectorErrorStatus(errorStatus); if (retVal != ksfTkErrOk || errorStatus != 0) - return 4; + return sfTkErrFail; // Read from 16-Bit Register to get the presence detection status if (_theBus->readRegister(SFE_XM125_PRESENCE_RESULT, presenceStatus) != ksfTkErrOk) - return 5; + return sfTkErrFail; // Presence detected NOW or since last check (sticky) bool bPresenceDetected = ((presenceStatus & SFE_XM125_PRESENCE_DETECTED_MASK) != 0) || @@ -123,6 +123,8 @@ sfTkError_t sfDevXM125Presence::getPresenceDistanceValuemm(uint32_t &presenceVal if (bPresenceDetected) return getPresenceDistance(presenceVal); + // If no presence detected, return 0 + presenceVal = 0; return ksfTkErrOk; } From 1f56fec3757125830d70ce0f51108c0fd66333bc Mon Sep 17 00:00:00 2001 From: Kirk Benell Date: Fri, 14 Mar 2025 09:06:49 -0600 Subject: [PATCH 4/9] fix consant name typo, remove ununsed var --- src/sfTk/sfDevXM125Presence.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/sfTk/sfDevXM125Presence.cpp b/src/sfTk/sfDevXM125Presence.cpp index 38f9892..7092457 100644 --- a/src/sfTk/sfDevXM125Presence.cpp +++ b/src/sfTk/sfDevXM125Presence.cpp @@ -94,26 +94,26 @@ sfTkError_t sfDevXM125Presence::getPresenceDistanceValuemm(uint32_t &presenceVal sfTkError_t retVal = getPresenceDetectorErrorStatus(errorStatus); if (retVal != ksfTkErrOk || errorStatus != 0) - return sfTkErrFail; + return ksfTkErrFail; // Start detector if (setPresenceCommand(SFE_XM125_PRESENCE_START_DETECTOR) != ksfTkErrOk) - return sfTkErrFail; + return ksfTkErrFail; sftk_delay_ms(100); // Poll detector status until busy bit is cleared if (presenceBusyWait() != ksfTkErrOk) - return sfTkErrFail; + return ksfTkErrFail; // Verify that no error bits are set in the detector status register retVal = getPresenceDetectorErrorStatus(errorStatus); if (retVal != ksfTkErrOk || errorStatus != 0) - return sfTkErrFail; + return ksfTkErrFail; // Read from 16-Bit Register to get the presence detection status if (_theBus->readRegister(SFE_XM125_PRESENCE_RESULT, presenceStatus) != ksfTkErrOk) - return sfTkErrFail; + return ksfTkErrFail; // Presence detected NOW or since last check (sticky) bool bPresenceDetected = ((presenceStatus & SFE_XM125_PRESENCE_DETECTED_MASK) != 0) || @@ -319,7 +319,6 @@ sfTkError_t sfDevXM125Presence::setPresenceInterPhaseBoostEnabled(bool en) //-------------------------------------------------------------------------------- sfTkError_t sfDevXM125Presence::getPresenceIntraDetectionEnabled(bool &en) { - size_t readBytes = 0; uint8_t value; sfTkError_t retVal = _theBus->readRegisterUInt8(SFE_XM125_PRESENCE_INTRA_DETECTION_ENABLED, value); From e7de189cbd36b7a413d5b850e7dfcf8b12b0d7fe Mon Sep 17 00:00:00 2001 From: Kirk Benell Date: Fri, 14 Mar 2025 09:08:02 -0600 Subject: [PATCH 5/9] cleanup demo - formatting and logic --- .../Example01_PresenceBasicReadings.ino | 58 +++++++++++-------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/examples/Example01_PresenceBasicReadings/Example01_PresenceBasicReadings.ino b/examples/Example01_PresenceBasicReadings/Example01_PresenceBasicReadings.ino index 3dcef24..8e63e4f 100644 --- a/examples/Example01_PresenceBasicReadings/Example01_PresenceBasicReadings.ino +++ b/examples/Example01_PresenceBasicReadings/Example01_PresenceBasicReadings.ino @@ -39,40 +39,45 @@ int32_t setupError = 0; int32_t presValError = 0; int32_t detectorError = 0; +// Presence range in mm used +#define MY_XM125_RANGE_START 200 +#define MY_XM125_RANGE_END 1000 void setup() { // Start serial Serial.begin(115200); + + Serial.println(""); + Serial.println("-------------------------------------------------------"); Serial.println("XM125 Example 1: Basic Presence Readings"); + Serial.println("-------------------------------------------------------"); Serial.println(""); Wire.begin(); // If begin is successful (1), then start example - int startErr = radarSensor.begin(i2cAddress, Wire); - if (startErr == 1) + bool success = radarSensor.begin(i2cAddress, Wire); + if (success == false) { - Serial.println("Begin"); - } - else // Otherwise, infinite loop - { - Serial.print("Start Error Code: "); - Serial.println(startErr); Serial.println("Device failed to setup - Freezing code."); while (1) ; // Runs forever } // Start the sensor with default register values - int32_t setupError = radarSensor.presenceDetectorStart(); + int32_t setupError = radarSensor.presenceDetectorStart(MY_XM125_RANGE_START, MY_XM125_RANGE_END); if (setupError != 0) { Serial.print("Presence Detection Start Setup Error: "); Serial.println(setupError); } - - // New line and delay for easier reading + Serial.print("Presense Detection Started - range: "); + Serial.print(MY_XM125_RANGE_START); + Serial.print("mm to "); + Serial.print(MY_XM125_RANGE_END); + Serial.println("mm"); Serial.println(); + delay(500); } @@ -87,22 +92,25 @@ void loop() if (presValError == 0) { Serial.print("Presence Detected: "); - Serial.print(distance); - Serial.println("mm"); - // Serial.print(distance * .1); - // Serial.println("cm"); - // Serial.print(distance * .001); - // Serial.println("m"); - // Serial.print(distance * .001); - // Serial.println("m"); - // Serial.print(distance * .03937008); - // Serial.println("In"); + // if distance is > 0, presence is detected, else it is not + if (distance > 0) + { + Serial.print("YES - Distance: "); + Serial.print(distance); + Serial.print("mm, "); + Serial.print(distance * .1); + Serial.print("cm, "); + Serial.print(distance * .001); + Serial.print("m, "); + Serial.print(distance * .03937008); + Serial.println("In"); + } + else + Serial.println("NO"); } else - { Serial.println("Error returning presence distance value"); - } - // Delay 0.5 seconds between readings - delay(500); + // Delay 2.5 seconds between readings + delay(2500); } From d54fde28ba5c2701fe79ff90a7179f27200263f9 Mon Sep 17 00:00:00 2001 From: Kirk Benell Date: Fri, 14 Mar 2025 09:09:17 -0600 Subject: [PATCH 6/9] better comment --- .../Example01_PresenceBasicReadings.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/Example01_PresenceBasicReadings/Example01_PresenceBasicReadings.ino b/examples/Example01_PresenceBasicReadings/Example01_PresenceBasicReadings.ino index 8e63e4f..705e75f 100644 --- a/examples/Example01_PresenceBasicReadings/Example01_PresenceBasicReadings.ino +++ b/examples/Example01_PresenceBasicReadings/Example01_PresenceBasicReadings.ino @@ -86,7 +86,8 @@ void loop() // Busy wait loop until data is ready radarSensor.presenceBusyWait(); - // Get the presence distance value and print out if no errors + // Get the presence distance value and print out if no errors. + // Note - this returns if Presense is detected now, or since last check (sticky) presValError = radarSensor.getPresenceDistanceValuemm(distance); if (presValError == 0) From dde1786bfc84e70365cf63f2d9035dda26f00988 Mon Sep 17 00:00:00 2001 From: Kirk Benell Date: Fri, 14 Mar 2025 15:02:26 -0600 Subject: [PATCH 7/9] added start and end range to begin method; added generic distance and strenght methods --- src/sfTk/sfDevXM125Distance.cpp | 93 +++++++++++++++++++++++++++++++-- src/sfTk/sfDevXM125Distance.h | 25 +++++++-- 2 files changed, 111 insertions(+), 7 deletions(-) diff --git a/src/sfTk/sfDevXM125Distance.cpp b/src/sfTk/sfDevXM125Distance.cpp index b804f1b..17be1d6 100644 --- a/src/sfTk/sfDevXM125Distance.cpp +++ b/src/sfTk/sfDevXM125Distance.cpp @@ -41,7 +41,7 @@ sfTkError_t sfDevXM125Distance::begin(sfTkII2C *theBus) return ksfTkErrOk; } //------------------------------------------------------------------ -int32_t sfDevXM125Distance::distanceBegin() +int32_t sfDevXM125Distance::distanceBegin(uint32_t startRange, uint32_t endRange) { uint32_t errorStatus = 0; @@ -64,20 +64,20 @@ int32_t sfDevXM125Distance::distanceBegin() } // Set Start register - if (setDistanceStart(sfe_xm125_distance_start_default) != 0) + if (setDistanceStart(startRange) != 0) { return 3; } sftk_delay_ms(100); // give time for command to set // Set End register - if (setDistanceEnd(sfe_xm125_distance_end_default) != 0) + if (setDistanceEnd(endRange) != 0) { return 4; } sftk_delay_ms(100); // give time for command to set - // Apply configuration + // Apply configuration and calibrate. if (setDistanceCommand(SFE_XM125_DISTANCE_APPLY_CONFIGURATION) != 0) { // Check for errors @@ -363,6 +363,49 @@ sfTkError_t sfDevXM125Distance::getDistanceTemperature(int16_t &temperature) return retVal; } +//-------------------------------------------------------------------------------- +// Generic distance peak distance method +sfTkError_t sfDevXM125Distance::getDistancePeakDistance(uint8_t num, uint32_t &peak) +{ + + switch (num) + { + case 0: + return getDistancePeak0Distance(peak); + break; + + case 1: + return getDistancePeak1Distance(peak); + break; + case 2: + return getDistancePeak2Distance(peak); + break; + case 3: + return getDistancePeak3Distance(peak); + break; + case 4: + return getDistancePeak4Distance(peak); + break; + case 5: + return getDistancePeak5Distance(peak); + break; + case 6: + return getDistancePeak6Distance(peak); + break; + case 7: + return getDistancePeak7Distance(peak); + break; + case 8: + return getDistancePeak8Distance(peak); + break; + case 9: + return getDistancePeak9Distance(peak); + break; + default: + return ksfTkErrFail; + break; + } +} //-------------------------------------------------------------------------------- sfTkError_t sfDevXM125Distance::getDistancePeak0Distance(uint32_t &peak) { @@ -462,7 +505,49 @@ sfTkError_t sfDevXM125Distance::getDistancePeak9Distance(uint32_t &peak) peak = sftk_byte_swap(peak); return retVal; } +//-------------------------------------------------------------------------------- +// Generic distance peak strength method +sfTkError_t sfDevXM125Distance::getDistancePeakStrength(uint8_t num, int32_t &peak) +{ + switch (num) + { + case 0: + return getDistancePeak0Strength(peak); + break; + + case 1: + return getDistancePeak1Strength(peak); + break; + case 2: + return getDistancePeak2Strength(peak); + break; + case 3: + return getDistancePeak3Strength(peak); + break; + case 4: + return getDistancePeak4Strength(peak); + break; + case 5: + return getDistancePeak5Strength(peak); + break; + case 6: + return getDistancePeak6Strength(peak); + break; + case 7: + return getDistancePeak7Strength(peak); + break; + case 8: + return getDistancePeak8Strength(peak); + break; + case 9: + return getDistancePeak9Strength(peak); + break; + default: + return ksfTkErrFail; + break; + } +} //-------------------------------------------------------------------------------- sfTkError_t sfDevXM125Distance::getDistancePeak0Strength(int32_t &peak) { diff --git a/src/sfTk/sfDevXM125Distance.h b/src/sfTk/sfDevXM125Distance.h index a7e9c7f..487888f 100644 --- a/src/sfTk/sfDevXM125Distance.h +++ b/src/sfTk/sfDevXM125Distance.h @@ -163,11 +163,11 @@ const uint16_t SFE_XM125_DISTANCE_PEAK7_STRENGTH = 0x22; const uint16_t SFE_XM125_DISTANCE_PEAK8_STRENGTH = 0x23; const uint16_t SFE_XM125_DISTANCE_PEAK9_STRENGTH = 0x24; -// Default Value: 250 +// Default Value: 250mm const uint16_t SFE_XM125_DISTANCE_START = 0x40; const uint16_t sfe_xm125_distance_start_default = 250; -// Default Value: 3000 +// Default Value: 3000mm const uint16_t SFE_XM125_DISTANCE_END = 0x41; const uint16_t sfe_xm125_distance_end_default = 3000; @@ -283,7 +283,8 @@ class sfDevXM125Distance : public sfDevXM125Core /// @brief This function sets all the beginning values for a basic I2C /// example to be run on the device for presence sensing. /// @return ksfTkErrOk on success, or error code (value < -1) - sfTkError_t distanceBegin(); + sfTkError_t distanceBegin(uint32_t start = sfe_xm125_distance_start_default, + uint32_t end = sfe_xm125_distance_end_default); /// @brief This function does all the required checks and busy waits to /// make sure the device is ready for distance readings. @@ -344,6 +345,15 @@ class sfDevXM125Distance : public sfDevXM125Core /// @return ksfTkErrOk on success, or error code (value < -1) sfTkError_t getDistanceTemperature(int16_t &temperature); + //-------------------------------------------------------------------------------- + // Generic distance peak distance method + /// @brief This function returns the distance to peak num + /// Note: This value is a factor 1000 larger than the RSS value + /// @param num Peak number to get distance (0-9) + /// @param peak Distance to peak num + /// @return ksfTkErrOk on success, or error code (value < -1) + sfTkError_t getDistancePeakDistance(uint8_t num, uint32_t &peak); + /// @brief This function returns the distance to peak 0 /// Note: This value is a factor 1000 larger than the RSS value /// @return ksfTkErrOk on success, or error code (value < -1) @@ -394,6 +404,15 @@ class sfDevXM125Distance : public sfDevXM125Core /// @return ksfTkErrOk on success, or error code (value < -1) sfTkError_t getDistancePeak9Distance(uint32_t &peak); + //-------------------------------------------------------------------------------- + // Generic distance peak strength method + /// @brief This function returns the strength to peak num + /// Note: This value is a factor 1000 larger than the RSS value + /// @param num Peak number to get strength (0-9) + /// @param peak strength to peak num + /// @return ksfTkErrOk on success, or error code (value < -1) + sfTkError_t getDistancePeakStrength(uint8_t num, int32_t &peak); + /// @brief This function returns the strength of peak 0 /// Note: This value is a factor 1000 larger than the RSS value /// @return ksfTkErrOk on success, or error code (value < -1) From 7909e5a3971fa0acfaa51f9f40cdd1a22ce33e12 Mon Sep 17 00:00:00 2001 From: Kirk Benell Date: Fri, 14 Mar 2025 15:03:16 -0600 Subject: [PATCH 8/9] cleanup; make use of new methods ; simplify and improve output --- .../Example06_DistanceBasicReadings.ino | 212 ++++++------------ 1 file changed, 71 insertions(+), 141 deletions(-) diff --git a/examples/Example06_DistanceBasicReadings/Example06_DistanceBasicReadings.ino b/examples/Example06_DistanceBasicReadings/Example06_DistanceBasicReadings.ino index c938f4f..c1c50b5 100644 --- a/examples/Example06_DistanceBasicReadings/Example06_DistanceBasicReadings.ino +++ b/examples/Example06_DistanceBasicReadings/Example06_DistanceBasicReadings.ino @@ -29,67 +29,46 @@ SparkFunXM125Distance radarSensor; // I2C default address uint8_t i2cAddress = SFE_XM125_I2C_ADDRESS; -// Setup Variables -uint32_t startVal = 0; -uint32_t endVal = 0; -uint32_t numDistances = 9; -uint32_t calibrateNeeded = 0; -uint32_t measDistErr = 0; - -// Error statuses -uint32_t errorStatus = 0; -uint32_t distanceSetupError = 0; - -// Distance Variables -int32_t distancePeakStrength0 = 0; -uint32_t distancePeak0 = 0; -int32_t distancePeakStrength1 = 0; -uint32_t distancePeak1 = 0; -int32_t distancePeakStrength2 = 0; -uint32_t distancePeak2 = 0; -int32_t distancePeakStrength3 = 0; -uint32_t distancePeak3 = 0; -int32_t distancePeakStrength4 = 0; -uint32_t distancePeak4 = 0; -int32_t distancePeakStrength5 = 0; -uint32_t distancePeak5 = 0; -int32_t distancePeakStrength6 = 0; -uint32_t distancePeak6 = 0; -int32_t distancePeakStrength7 = 0; -uint32_t distancePeak7 = 0; -int32_t distancePeakStrength8 = 0; -uint32_t distancePeak8 = 0; -int32_t distancePeakStrength9 = 0; -uint32_t distancePeak9 = 0; +// Presence range in mm used +#define MY_XM125_RANGE_START 200 +#define MY_XM125_RANGE_END 2000 void setup() { // Start serial Serial.begin(115200); + + Serial.println(""); + Serial.println("-------------------------------------------------------"); Serial.println("XM125 Example 6: Basic Distance Readings"); + Serial.println("-------------------------------------------------------"); Serial.println(""); Wire.begin(); // If begin is successful (0), then start example - if (radarSensor.begin(i2cAddress, Wire) == 1) - { - Serial.println("Begin"); - } - else // Otherwise, infinite loop + if (radarSensor.begin(i2cAddress, Wire) == false) { Serial.println("Device failed to setup - Freezing code."); while (1) ; // Runs forever } - - int32_t setupError = radarSensor.distanceBegin(); + Serial.println("Starting Sensor..."); + Serial.println(); + // Start the sensor with the specified range values + int32_t setupError = radarSensor.distanceBegin(MY_XM125_RANGE_START, MY_XM125_RANGE_END); if (setupError != 0) { Serial.print("Distance Detection Start Setup Error: "); Serial.println(setupError); } - + Serial.println(); + Serial.print("Distance Detection Started - range: "); + Serial.print(MY_XM125_RANGE_START); + Serial.print("mm to "); + Serial.print(MY_XM125_RANGE_END); + Serial.println("mm"); + Serial.println(); // New-line and 0.5 second delay for easier reading Serial.println(); delay(500); @@ -97,114 +76,65 @@ void setup() void loop() { - distanceSetupError = radarSensor.distanceDetectorReadingSetup(); - if (distanceSetupError != 0) + uint32_t retCode = radarSensor.distanceDetectorReadingSetup(); + if (retCode != 0) { Serial.print("Distance Reading Setup Error: "); - Serial.println(distanceSetupError); + Serial.println(retCode); } - // Read PeakX Distance and PeakX Strength registers for the number of distances detected - radarSensor.getDistancePeak0Distance(distancePeak0); - radarSensor.getDistancePeak0Strength(distancePeakStrength0); - radarSensor.getDistancePeak1Distance(distancePeak1); - radarSensor.getDistancePeak1Strength(distancePeakStrength1); - radarSensor.getDistancePeak2Distance(distancePeak2); - radarSensor.getDistancePeak2Strength(distancePeakStrength2); - radarSensor.getDistancePeak3Distance(distancePeak3); - radarSensor.getDistancePeak3Strength(distancePeakStrength3); - radarSensor.getDistancePeak4Distance(distancePeak4); - radarSensor.getDistancePeak4Strength(distancePeakStrength4); - radarSensor.getDistancePeak5Distance(distancePeak5); - radarSensor.getDistancePeak5Strength(distancePeakStrength5); - radarSensor.getDistancePeak6Distance(distancePeak6); - radarSensor.getDistancePeak6Strength(distancePeakStrength6); - radarSensor.getDistancePeak7Distance(distancePeak7); - radarSensor.getDistancePeak7Strength(distancePeakStrength7); - radarSensor.getDistancePeak8Distance(distancePeak8); - radarSensor.getDistancePeak8Strength(distancePeakStrength8); - radarSensor.getDistancePeak9Distance(distancePeak9); - radarSensor.getDistancePeak9Strength(distancePeakStrength9); - - // If a peak distance was detected, then read out the distance and strength - if (distancePeak0 != 0) - { - Serial.print("Peak0 Distance, Strength: "); - Serial.print(distancePeak0); - Serial.print("mm, "); - Serial.println(distancePeakStrength0); - Serial.println(); - } - if (distancePeak1 != 0) - { - Serial.print("Peak1 Distance, Strength: "); - Serial.print(distancePeak1); - Serial.print("mm, "); - Serial.println(distancePeakStrength1); - Serial.println(); - } - if (distancePeak2 != 0) - { - Serial.print("Peak2 Distance, Strength: "); - Serial.print(distancePeak2); - Serial.print("mm, "); - Serial.println(distancePeakStrength2); - Serial.println(); - } - if (distancePeak3 != 0) - { - Serial.print("Peak3 Distance, Strength: "); - Serial.print(distancePeak3); - Serial.print("mm, "); - Serial.println(distancePeakStrength3); - Serial.println(); - } - if (distancePeak4 != 0) - { - Serial.print("Peak4 Distance, Strength: "); - Serial.print(distancePeak4); - Serial.print("mm, "); - Serial.println(distancePeakStrength4); - Serial.println(); - } - if (distancePeak5 != 0) - { - Serial.print("Peak5 Distance, Strength: "); - Serial.print(distancePeak5); - Serial.print("mm, "); - Serial.println(distancePeakStrength5); - Serial.println(); - } - if (distancePeak6 != 0) - { - Serial.print("Peak6 Distance, Strength: "); - Serial.print(distancePeak6); - Serial.print("mm, "); - Serial.println(distancePeakStrength6); - Serial.println(); - } - if (distancePeak7 != 0) - { - Serial.print("Peak7 Distance, Strength: "); - Serial.print(distancePeak7); - Serial.print("mm, "); - Serial.println(distancePeakStrength7); - Serial.println(); - } - if (distancePeak8 != 0) + // How many distance values were detected? (0-9) + uint32_t numDistances = 0; + radarSensor.getDistanceNumberDistances(numDistances); + + if (numDistances == 0) + Serial.println("No distance values detected."); + else { - Serial.print("Peak8 Distance, Strength: "); - Serial.print(distancePeak8); - Serial.print("mm, "); - Serial.println(distancePeakStrength8); - Serial.println(); + Serial.print("Number of Distances Values Detected: "); + Serial.println(numDistances); } - if (distancePeak9 != 0) + Serial.println(); + + uint32_t distance = 0; + int32_t distanceStrength = 0; + for (uint32_t i = 0; i < numDistances; i++) { - Serial.print("Peak9 Distance, Strength: "); - Serial.print(distancePeak9); - Serial.print("mm, "); - Serial.println(distancePeakStrength9); + if (radarSensor.getDistancePeakDistance(i, distance) != ksfTkErrOk) + { + Serial.print("Error retrieving Distance Peak "); + Serial.print(i); + Serial.println(); + continue; + } + Serial.print("Distance Peak "); + Serial.print(i); + Serial.print(": "); + if (distance < 100) + { + Serial.print(distance); + Serial.println("mm"); + } + else if (distance < 1000) + { + Serial.print(distance * 0.1); + Serial.println("cm"); + } + else + Serial.print(distance * 0.001); + Serial.println("m"); + + if (radarSensor.getDistancePeakStrength(i, distanceStrength) != ksfTkErrOk) + { + Serial.print("Error retrieving Distance Peak Strength"); + Serial.print(i); + Serial.println(); + continue; + } + Serial.print("Distance Peak Strength"); + Serial.print(i); + Serial.print(": "); + Serial.println(distanceStrength); Serial.println(); } From c53f413bbe1b7ae7a515657307fd9de28941d4be Mon Sep 17 00:00:00 2001 From: Kirk Benell Date: Fri, 14 Mar 2025 15:48:25 -0600 Subject: [PATCH 9/9] cleanup; make use of new methods ; simplify and improve output --- .../Example06_DistanceBasicReadings.ino | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/examples/Example06_DistanceBasicReadings/Example06_DistanceBasicReadings.ino b/examples/Example06_DistanceBasicReadings/Example06_DistanceBasicReadings.ino index c1c50b5..5e217ce 100644 --- a/examples/Example06_DistanceBasicReadings/Example06_DistanceBasicReadings.ino +++ b/examples/Example06_DistanceBasicReadings/Example06_DistanceBasicReadings.ino @@ -88,13 +88,13 @@ void loop() radarSensor.getDistanceNumberDistances(numDistances); if (numDistances == 0) - Serial.println("No distance values detected."); + Serial.print("."); else { - Serial.print("Number of Distances Values Detected: "); + Serial.println(); + Serial.print("Number of Values Detected: "); Serial.println(numDistances); } - Serial.println(); uint32_t distance = 0; int32_t distanceStrength = 0; @@ -107,22 +107,24 @@ void loop() Serial.println(); continue; } - Serial.print("Distance Peak "); + Serial.print(" Distance Peak "); Serial.print(i); Serial.print(": "); if (distance < 100) { Serial.print(distance); - Serial.println("mm"); + Serial.print("mm"); } else if (distance < 1000) { Serial.print(distance * 0.1); - Serial.println("cm"); + Serial.print("cm"); } else + { Serial.print(distance * 0.001); - Serial.println("m"); + Serial.print("m"); + } if (radarSensor.getDistancePeakStrength(i, distanceStrength) != ksfTkErrOk) { @@ -131,13 +133,12 @@ void loop() Serial.println(); continue; } - Serial.print("Distance Peak Strength"); + Serial.print(" Distance Peak Strength "); Serial.print(i); Serial.print(": "); Serial.println(distanceStrength); - Serial.println(); } - // Half a second delay for easier readings - delay(500); + // delay before next reading + delay(2500); }