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>
This commit is contained in:
@@ -30,7 +30,7 @@
|
|||||||
* Values -> SLEEP_TIME * 10; i.e. 5*10 = 50 Seconds!
|
* Values -> SLEEP_TIME * 10; i.e. 5*10 = 50 Seconds!
|
||||||
*/
|
*/
|
||||||
#define SLEEP_TIME 5 // x10 Seconds
|
#define SLEEP_TIME 5 // x10 Seconds
|
||||||
#define SHUTDOWN_TIME 10 // Minutes
|
#define SHUTDOWN_TIME 0 // Minutes -- Default shutdown to being off
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Auto start off for safety.
|
* Auto start off for safety.
|
||||||
|
|||||||
@@ -159,6 +159,9 @@ void startMOVTask(void const *argument __unused) {
|
|||||||
int16_t tx = 0, ty = 0, tz = 0;
|
int16_t tx = 0, ty = 0, tz = 0;
|
||||||
int32_t avgx, avgy, avgz;
|
int32_t avgx, avgy, avgz;
|
||||||
Orientation rotation = ORIENTATION_FLAT;
|
Orientation rotation = ORIENTATION_FLAT;
|
||||||
|
#ifdef ACCEL_EXITS_ON_MOVEMENT
|
||||||
|
uint16_t tripCounter = 0;
|
||||||
|
#endif
|
||||||
for (;;) {
|
for (;;) {
|
||||||
int32_t threshold = 1500 + (9 * 200);
|
int32_t threshold = 1500 + (9 * 200);
|
||||||
threshold -= getSettingValue(SettingsOptions::Sensitivity) * 200; // 200 is the step size
|
threshold -= getSettingValue(SettingsOptions::Sensitivity) * 200; // 200 is the step size
|
||||||
@@ -197,9 +200,22 @@ void startMOVTask(void const *argument __unused) {
|
|||||||
// than the threshold
|
// than the threshold
|
||||||
|
|
||||||
// If movement has occurred then we update the tick timer
|
// 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();
|
lastMovementTime = xTaskGetTickCount();
|
||||||
}
|
}
|
||||||
|
} else if (tripCounter > 0) {
|
||||||
|
tripCounter = 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (overThreshold) {
|
||||||
|
lastMovementTime = xTaskGetTickCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
vTaskDelay(TICKS_100MS); // Slow down update rate
|
vTaskDelay(TICKS_100MS); // Slow down update rate
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,8 +94,10 @@ bool checkExitSoldering(void) {
|
|||||||
// If we have moved recently; in the last second
|
// If we have moved recently; in the last second
|
||||||
// Then exit soldering mode
|
// 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;
|
currentTempTargetDegC = 0;
|
||||||
|
lastMovementTime = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -108,6 +110,8 @@ bool checkExitSoldering(void) {
|
|||||||
if (shouldShutdown()) {
|
if (shouldShutdown()) {
|
||||||
// shutdown
|
// shutdown
|
||||||
currentTempTargetDegC = 0;
|
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
|
return true; // we want to exit soldering mode
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user