From 17b39de9038346c7e945af6135928b8c72197d9b Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" <5425387+Ralim@users.noreply.github.com> Date: Fri, 4 Aug 2023 21:38:41 +1000 Subject: [PATCH] Use 3 count filter for MHP30 acceleromter (#1762) * Use 3 count filter for MHP30 acceleromter Requires it to trip 3 times in a row to fire. So really only knocking the unit over trips it off. * Reset shutdown timer forwards on shutdown timeout Default shutdown mode off --------- Co-authored-by: discip <53649486+discip@users.noreply.github.com> --- source/Core/BSP/MHP30/configuration.h | 4 ++-- source/Core/Threads/MOVThread.cpp | 18 +++++++++++++++++- .../OperatingModes/utils/SolderingCommon.cpp | 6 +++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/source/Core/BSP/MHP30/configuration.h b/source/Core/BSP/MHP30/configuration.h index c99afc64..17b803f5 100644 --- a/source/Core/BSP/MHP30/configuration.h +++ b/source/Core/BSP/MHP30/configuration.h @@ -29,8 +29,8 @@ * How many seconds/minutes we wait until going to sleep/shutdown. * Values -> SLEEP_TIME * 10; i.e. 5*10 = 50 Seconds! */ -#define SLEEP_TIME 5 // x10 Seconds -#define SHUTDOWN_TIME 10 // Minutes +#define SLEEP_TIME 5 // x10 Seconds +#define SHUTDOWN_TIME 0 // Minutes -- Default shutdown to being off /** * Auto start off for safety. diff --git a/source/Core/Threads/MOVThread.cpp b/source/Core/Threads/MOVThread.cpp index 456266bd..2b018837 100644 --- a/source/Core/Threads/MOVThread.cpp +++ b/source/Core/Threads/MOVThread.cpp @@ -159,6 +159,9 @@ void startMOVTask(void const *argument __unused) { int16_t tx = 0, ty = 0, tz = 0; int32_t avgx, avgy, avgz; Orientation rotation = ORIENTATION_FLAT; +#ifdef ACCEL_EXITS_ON_MOVEMENT + uint16_t tripCounter = 0; +#endif for (;;) { int32_t threshold = 1500 + (9 * 200); threshold -= getSettingValue(SettingsOptions::Sensitivity) * 200; // 200 is the step size @@ -197,10 +200,23 @@ void startMOVTask(void const *argument __unused) { // than the threshold // If movement has occurred then we update the tick timer - if (error > threshold) { + bool overThreshold = error > threshold; +#ifdef ACCEL_EXITS_ON_MOVEMENT + if (overThreshold) { + tripCounter++; + if (tripCounter > 2) { + lastMovementTime = xTaskGetTickCount(); + } + } else if (tripCounter > 0) { + tripCounter = 0; + } +#else + if (overThreshold) { lastMovementTime = xTaskGetTickCount(); } +#endif + vTaskDelay(TICKS_100MS); // Slow down update rate } } diff --git a/source/Core/Threads/OperatingModes/utils/SolderingCommon.cpp b/source/Core/Threads/OperatingModes/utils/SolderingCommon.cpp index 3db87dac..e8e457fa 100644 --- a/source/Core/Threads/OperatingModes/utils/SolderingCommon.cpp +++ b/source/Core/Threads/OperatingModes/utils/SolderingCommon.cpp @@ -94,8 +94,10 @@ bool checkExitSoldering(void) { // If we have moved recently; in the last second // Then exit soldering mode - if (((TickType_t)(xTaskGetTickCount() - lastMovementTime)) < (TickType_t)(TICKS_SECOND)) { + // Movement occurred in last update + if (((TickType_t)(xTaskGetTickCount() - lastMovementTime)) < (TickType_t)(TICKS_SECOND / 5)) { currentTempTargetDegC = 0; + lastMovementTime = 0; return true; } } @@ -108,6 +110,8 @@ bool checkExitSoldering(void) { if (shouldShutdown()) { // shutdown currentTempTargetDegC = 0; + lastMovementTime = xTaskGetTickCount(); // We manually move the movement time to now such that shutdown timer is reset + return true; // we want to exit soldering mode } #endif