ShakeWake: Fixed instant wake after sleep issue in certain positions (#1691)
* ShakeWake: Fixed instant wake after sleep issue in certain positions Add lastX var to track the previous x acceleration for correct calculation of speed. Reorder axes for clarity. --------- Co-authored-by: Isaac <114504394+isaacc27@users.noreply.github.com> Co-authored-by: FintasticMan <52415484+FintasticMan@users.noreply.github.com>
This commit is contained in:
parent
f057894d26
commit
9e128c838e
|
@ -16,6 +16,7 @@ void MotionController::Update(int16_t x, int16_t y, int16_t z, uint32_t nbSteps)
|
||||||
lastTime = time;
|
lastTime = time;
|
||||||
time = xTaskGetTickCount();
|
time = xTaskGetTickCount();
|
||||||
|
|
||||||
|
lastX = this->x;
|
||||||
this->x = x;
|
this->x = x;
|
||||||
lastY = this->y;
|
lastY = this->y;
|
||||||
this->y = y;
|
this->y = y;
|
||||||
|
@ -53,7 +54,7 @@ bool MotionController::ShouldRaiseWake(bool isSleeping) {
|
||||||
|
|
||||||
bool MotionController::ShouldShakeWake(uint16_t thresh) {
|
bool MotionController::ShouldShakeWake(uint16_t thresh) {
|
||||||
/* Currently Polling at 10hz, If this ever goes faster scalar and EMA might need adjusting */
|
/* Currently Polling at 10hz, If this ever goes faster scalar and EMA might need adjusting */
|
||||||
int32_t speed = std::abs(z + (y / 2) + (x / 4) - lastY / 2 - lastZ) / (time - lastTime) * 100;
|
int32_t speed = std::abs(z - lastZ + (y / 2) - (lastY / 2) + (x / 4) - (lastX / 4)) / (time - lastTime) * 100;
|
||||||
//(.2 * speed) + ((1 - .2) * accumulatedSpeed);
|
//(.2 * speed) + ((1 - .2) * accumulatedSpeed);
|
||||||
// implemented without floats as .25Alpha
|
// implemented without floats as .25Alpha
|
||||||
accumulatedSpeed = (speed / 5) + ((accumulatedSpeed / 5) * 4);
|
accumulatedSpeed = (speed / 5) + ((accumulatedSpeed / 5) * 4);
|
||||||
|
|
|
@ -67,6 +67,7 @@ namespace Pinetime {
|
||||||
TickType_t lastTime = 0;
|
TickType_t lastTime = 0;
|
||||||
TickType_t time = 0;
|
TickType_t time = 0;
|
||||||
|
|
||||||
|
int16_t lastX = 0;
|
||||||
int16_t x = 0;
|
int16_t x = 0;
|
||||||
int16_t lastYForRaiseWake = 0;
|
int16_t lastYForRaiseWake = 0;
|
||||||
int16_t lastY = 0;
|
int16_t lastY = 0;
|
||||||
|
|
Loading…
Reference in a new issue