From b83e7b42b713ed1e3f3e86414d111821b2fb7159 Mon Sep 17 00:00:00 2001 From: Goebish Date: Fri, 19 Sep 2014 01:09:59 +0200 Subject: [PATCH] Add throttle level indicator led mode --- src/main/common/maths.c | 6 ++++++ src/main/common/maths.h | 1 + src/main/io/ledstrip.c | 21 +++++++++++++++++++-- src/main/io/ledstrip.h | 3 ++- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/main/common/maths.c b/src/main/common/maths.c index c6ad8dbd8..75ced4a5f 100644 --- a/src/main/common/maths.c +++ b/src/main/common/maths.c @@ -74,3 +74,9 @@ float degreesToRadians(int16_t degrees) return degrees * RAD; } +int scaleRange(int x, int srcMin, int srcMax, int destMin, int destMax) { + long int a = ((long int) destMax - (long int) destMin) * ((long int) x - (long int) srcMin); + long int b = (long int) srcMax - (long int) srcMin; + return ((a / b) - (destMax - destMin)) + destMax; +} + diff --git a/src/main/common/maths.h b/src/main/common/maths.h index 62afb638f..0aa043e38 100644 --- a/src/main/common/maths.h +++ b/src/main/common/maths.h @@ -48,3 +48,4 @@ void devPush(stdev_t *dev, float x); float devVariance(stdev_t *dev); float devStandardDeviation(stdev_t *dev); float degreesToRadians(int16_t degrees); +int scaleRange(int x, int srcMin, int srcMax, int destMin, int destMax); diff --git a/src/main/io/ledstrip.c b/src/main/io/ledstrip.c index 9cd848978..6f44cd239 100644 --- a/src/main/io/ledstrip.c +++ b/src/main/io/ledstrip.c @@ -136,13 +136,14 @@ static const uint8_t directionMappings[DIRECTION_COUNT] = { LED_DIRECTION_DOWN }; -static const char functionCodes[] = { 'I', 'W', 'F', 'A' }; +static const char functionCodes[] = { 'I', 'W', 'F', 'A', 'T' }; #define FUNCTION_COUNT (sizeof(functionCodes) / sizeof(functionCodes[0])) static const uint16_t functionMappings[FUNCTION_COUNT] = { LED_FUNCTION_INDICATOR, LED_FUNCTION_WARNING, LED_FUNCTION_FLIGHT_MODE, - LED_FUNCTION_ARM_STATE + LED_FUNCTION_ARM_STATE, + LED_FUNCTION_THROTTLE }; // grid offsets @@ -599,6 +600,21 @@ void applyLedIndicatorLayer(uint8_t indicatorFlashState) } } +void applyLedThrottleLayer() +{ + const ledConfig_t *ledConfig; + + uint8_t ledIndex; + for (ledIndex = 0; ledIndex < ledCount; ledIndex++) { + ledConfig = &ledConfigs[ledIndex]; + if(ledConfig->flags & LED_FUNCTION_THROTTLE) { + int hue = scaleRange(rcCommand[THROTTLE], PWM_RANGE_MIN, PWM_RANGE_MAX, hsv_lightBlue.h, hsv_red.h); + hsvColor_t color = {hue , 0 , 255}; + setLedHsv(ledIndex, &color); + } + } +} + static uint8_t frameCounter = 0; static uint8_t previousRow; @@ -666,6 +682,7 @@ void updateLedStrip(void) // LAYER 1 applyLedModeLayer(); + applyLedThrottleLayer(); // LAYER 2 diff --git a/src/main/io/ledstrip.h b/src/main/io/ledstrip.h index 4425801b1..a0cb3e702 100644 --- a/src/main/io/ledstrip.h +++ b/src/main/io/ledstrip.h @@ -43,7 +43,8 @@ typedef enum { LED_FUNCTION_INDICATOR = (1 << 6), LED_FUNCTION_WARNING = (1 << 7), LED_FUNCTION_FLIGHT_MODE = (1 << 8), - LED_FUNCTION_ARM_STATE = (1 << 9) + LED_FUNCTION_ARM_STATE = (1 << 9), + LED_FUNCTION_THROTTLE = (1 << 10) } ledFlag_e; typedef struct ledConfig_s {