From 17706e3b65e939bbc0ed2154640746ec9b7ad82c Mon Sep 17 00:00:00 2001 From: Igor Shpakov Date: Fri, 18 Sep 2020 22:48:13 +0100 Subject: [PATCH] Show stopped motors in Motor Diagnostic OSD element When motor is stopped and not spinning properly, show letter S instead of expected esc output. This is useful after crash recovery or during turtle mode. --- src/main/osd/osd_elements.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/osd/osd_elements.c b/src/main/osd/osd_elements.c index 31bb0b69a..5eb953170 100644 --- a/src/main/osd/osd_elements.c +++ b/src/main/osd/osd_elements.c @@ -139,6 +139,8 @@ #define FULL_CIRCLE 360 #define EFFICIENCY_MINIMUM_SPEED_CM_S 100 +#define MOTOR_STOPPED_THRESHOLD_RPM 1000 + #ifdef USE_OSD_STICK_OVERLAY typedef struct radioControls_s { uint8_t left_vertical; @@ -1051,6 +1053,12 @@ static void osdElementMotorDiagnostics(osdElementParms_t *element) for (; i < getMotorCount(); i++) { if (motorsRunning) { element->buff[i] = 0x88 - scaleRange(motor[i], getMotorOutputLow(), getMotorOutputHigh(), 0, 8); +#if defined(USE_ESC_SENSOR) || defined(USE_DSHOT_TELEMETRY) + if (getEscRpm(i) < MOTOR_STOPPED_THRESHOLD_RPM) { + // Motor is not spinning properly. Mark as Stopped + element->buff[i] = 'S'; + } +#endif } else { element->buff[i] = 0x88; }