Replaced FastLED by Adafruit Neopixel
This commit is contained in:
@@ -100,6 +100,9 @@ typedef struct
|
||||
#ifdef FEATURE_ENABLE_CAN
|
||||
CANSource_t CANSource = KTM_890_ADV_R_2021;
|
||||
#endif
|
||||
bool LED_Mode_Flash = false;
|
||||
uint8_t LED_Max_Brightness = 255;
|
||||
uint8_t LED_Min_Brightness = 5;
|
||||
uint32_t checksum = 0;
|
||||
} LubeConfig_t;
|
||||
|
||||
@@ -111,6 +114,9 @@ const LubeConfig_t LubeConfig_defaults = {
|
||||
#ifdef FEATURE_ENABLE_CAN
|
||||
KTM_890_ADV_R_2021,
|
||||
#endif
|
||||
false,
|
||||
255,
|
||||
5,
|
||||
0};
|
||||
|
||||
void InitEEPROM();
|
||||
|
34
Software/src/led_colors.h
Normal file
34
Software/src/led_colors.h
Normal file
@@ -0,0 +1,34 @@
|
||||
#ifndef _LED_COLORS_H_
|
||||
#define _LED_COLORS_H_
|
||||
|
||||
#define COLOR_RED 0xFF0000
|
||||
#define COLOR_GREEN 0x00FF00
|
||||
#define COLOR_BLUE 0x0000FF
|
||||
#define COLOR_YELLOW 0xFF9600
|
||||
#define COLOR_ORANGE 0xFF2800
|
||||
#define COLOR_TEAL 0x00FF78
|
||||
#define COLOR_CYAN 0x00FFFF
|
||||
#define COLOR_PURPLE 0xB400FF
|
||||
#define COLOR_MAGENTA 0xFF0014
|
||||
#define COLOR_WHITE 0xFFFFFF
|
||||
#define COLOR_BLACK 0x000000
|
||||
#define COLOR_GOLD 0xFFDE1E
|
||||
#define COLOR_PINK 0xF25AFF
|
||||
#define COLOR_AQUA 0x32FFFF
|
||||
#define COLOR_JADE 0x00FF28
|
||||
#define COLOR_AMBER 0xFF6400
|
||||
#define COLOR_WARM_WHITE 0xFDF5E6
|
||||
|
||||
|
||||
#define LED_DEFAULT_COLOR COLOR_WARM_WHITE
|
||||
#define LED_STARTUP_NORMAL COLOR_WARM_WHITE
|
||||
#define LED_STARTUP_TANKWARN COLOR_AMBER
|
||||
#define LED_NORMAL_COLOR COLOR_GREEN
|
||||
#define LED_RAIN_COLOR COLOR_BLUE
|
||||
#define LED_WIFI_BLINK COLOR_YELLOW
|
||||
#define LED_PURGE_COLOR COLOR_MAGENTA
|
||||
#define LED_ERROR_BLINK COLOR_RED
|
||||
|
||||
|
||||
|
||||
#endif /* _LED_COLORS_H_ */
|
@@ -6,7 +6,7 @@
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ArduinoOTA.h>
|
||||
|
||||
#include <FastLED.h>
|
||||
#include <Adafruit_NeoPixel.h>
|
||||
#include <Ticker.h>
|
||||
|
||||
#include "common.h"
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "gps.h"
|
||||
#endif
|
||||
#include "dtc.h"
|
||||
#include "led_colors.h"
|
||||
|
||||
#ifdef FEATURE_ENABLE_WIFI_CLIENT
|
||||
#include <ESP8266WiFiMulti.h>
|
||||
@@ -39,11 +40,11 @@ ESP8266WiFiMulti wifiMulti;
|
||||
bool startSetupMode = false;
|
||||
volatile uint32_t wheel_pulse = 0;
|
||||
|
||||
CRGB leds[1];
|
||||
Adafruit_NeoPixel leds(1, GPIO_LED, NEO_RGB + NEO_KHZ800);
|
||||
|
||||
// Function-Prototypes
|
||||
void IRAM_ATTR trigger_ISR();
|
||||
void LED_Process(uint8_t override = false, CRGB setColor = CRGB::White);
|
||||
void LED_Process(uint8_t override = false, uint32_t setColor = LED_DEFAULT_COLOR);
|
||||
#ifdef FEATURE_ENABLE_OLED
|
||||
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(-1);
|
||||
void Display_Process();
|
||||
@@ -88,7 +89,7 @@ void setup()
|
||||
u8x8.begin();
|
||||
u8x8.setFont(u8x8_font_chroma48medium8_r);
|
||||
#endif
|
||||
FastLED.addLeds<WS2811, GPIO_LED, RGB>(leds, 1); // GRB ordering is assumed
|
||||
leds.begin();
|
||||
|
||||
switch (LubeConfig.SpeedSource)
|
||||
{
|
||||
@@ -251,7 +252,7 @@ void trigger_ISR()
|
||||
wheel_pulse++;
|
||||
}
|
||||
|
||||
void LED_Process(uint8_t override, CRGB SetColor)
|
||||
void LED_Process(uint8_t override, uint32_t SetColor)
|
||||
{
|
||||
typedef enum
|
||||
{
|
||||
@@ -267,11 +268,12 @@ void LED_Process(uint8_t override, CRGB SetColor)
|
||||
|
||||
static tSystem_Status oldSysStatus = sysStat_Startup;
|
||||
static tLED_Status LED_Status = LED_Startup;
|
||||
static CRGB LED_override_color = 0;
|
||||
static uint32_t LED_override_color = 0;
|
||||
static tLED_Status LED_ResumeOverrideStatus = LED_Startup;
|
||||
|
||||
uint8_t color = 0;
|
||||
uint32_t timer = 0;
|
||||
uint32_t animtimer = 0;
|
||||
static uint32_t timestamp = 0;
|
||||
timer = millis();
|
||||
|
||||
@@ -331,84 +333,91 @@ void LED_Process(uint8_t override, CRGB SetColor)
|
||||
switch (LED_Status)
|
||||
{
|
||||
case LED_Startup:
|
||||
FastLED.setBrightness(255);
|
||||
leds.setBrightness(LubeConfig.LED_Max_Brightness);
|
||||
|
||||
if (globals.TankPercentage < LubeConfig.TankRemindAtPercentage)
|
||||
leds[0] = CRGB::OrangeRed;
|
||||
leds.setPixelColor(0, LED_STARTUP_TANKWARN);
|
||||
else
|
||||
leds[0] = CRGB::White;
|
||||
leds.setPixelColor(0, LED_STARTUP_NORMAL);
|
||||
break;
|
||||
|
||||
case LED_Confirm_Normal:
|
||||
FastLED.setBrightness(255);
|
||||
leds[0] = timer % 250 > 125 ? CRGB(0, 255, 0) : CRGB(0, 4, 0);
|
||||
animtimer = timer % 500;
|
||||
color = map(animtimer / 2, 0, 250, 0, LubeConfig.LED_Max_Brightness);
|
||||
leds.setPixelColor(0, LED_NORMAL_COLOR);
|
||||
if (animtimer < 250)
|
||||
leds.setBrightness(color);
|
||||
else
|
||||
leds.setBrightness(LubeConfig.LED_Max_Brightness - color);
|
||||
|
||||
if (timestamp < timer)
|
||||
{
|
||||
LED_Status = LED_Normal;
|
||||
FastLED.setBrightness(64);
|
||||
Debug_pushMessage("LED_Status: Confirm -> Normal");
|
||||
}
|
||||
break;
|
||||
|
||||
case LED_Normal:
|
||||
#ifndef NO_MODE_FLASH
|
||||
if (timer % 2000 > 1950)
|
||||
leds[0] = CRGB(0, 255, 0);
|
||||
else if (WiFi.getMode() != WIFI_OFF && timer % 2000 > 1800 && timer % 2000 < 1850)
|
||||
#else
|
||||
if (WiFi.getMode() != WIFI_OFF && timer % 2000 > 1950)
|
||||
#endif
|
||||
leds[0] = CRGB(255, 128, 0);
|
||||
else
|
||||
leds[0] = CRGB(0, 4, 0);
|
||||
leds.setBrightness(LubeConfig.LED_Min_Brightness);
|
||||
leds.setPixelColor(0, LED_NORMAL_COLOR);
|
||||
|
||||
if (timer % 2000 > 1950 && LubeConfig.LED_Mode_Flash == true)
|
||||
leds.setBrightness(LubeConfig.LED_Max_Brightness);
|
||||
else if (timer % 2000 > 1500 && WiFi.getMode() != WIFI_OFF)
|
||||
leds.setPixelColor(0, LED_WIFI_BLINK);
|
||||
|
||||
break;
|
||||
|
||||
case LED_Confirm_Rain:
|
||||
FastLED.setBrightness(255);
|
||||
leds[0] = timer % 250 > 125 ? CRGB(0, 0, 255) : CRGB(0, 0, 4);
|
||||
animtimer = timer % 500;
|
||||
color = map(animtimer / 2, 0, 250, 0, LubeConfig.LED_Max_Brightness);
|
||||
leds.setPixelColor(0, LED_RAIN_COLOR);
|
||||
if (animtimer < 250)
|
||||
leds.setBrightness(color);
|
||||
else
|
||||
leds.setBrightness(LubeConfig.LED_Max_Brightness - color);
|
||||
if (timestamp < timer)
|
||||
{
|
||||
LED_Status = LED_Rain;
|
||||
FastLED.setBrightness(64);
|
||||
Debug_pushMessage("LED_Status: Confirm -> Rain");
|
||||
}
|
||||
break;
|
||||
|
||||
case LED_Rain:
|
||||
#ifndef NO_MODE_FLASH
|
||||
if (timer % 2000 > 1950)
|
||||
leds[0] = CRGB(0, 0, 255);
|
||||
else if (WiFi.getMode() != WIFI_OFF && timer % 2000 > 1800 && timer % 2000 < 1850)
|
||||
#else
|
||||
if (WiFi.getMode() != WIFI_OFF && timer % 2000 > 1950)
|
||||
#endif
|
||||
leds[0] = CRGB(255, 128, 0);
|
||||
else
|
||||
leds[0] = CRGB(0, 0, 4);
|
||||
leds.setBrightness(LubeConfig.LED_Min_Brightness);
|
||||
leds.setPixelColor(0, LED_RAIN_COLOR);
|
||||
|
||||
if (timer % 2000 > 1950 && LubeConfig.LED_Mode_Flash == true)
|
||||
leds.setBrightness(LubeConfig.LED_Max_Brightness);
|
||||
else if (timer % 2000 > 1500 && WiFi.getMode() != WIFI_OFF)
|
||||
leds.setPixelColor(0, LED_WIFI_BLINK);
|
||||
|
||||
break;
|
||||
|
||||
case LED_Purge:
|
||||
timer = timer % 500;
|
||||
color = timer / 2;
|
||||
leds[0] = CRGB::DeepPink;
|
||||
color = map(timer / 2, 0, 250, LubeConfig.LED_Min_Brightness, LubeConfig.LED_Max_Brightness);
|
||||
leds.setPixelColor(0, LED_PURGE_COLOR);
|
||||
if (timer < 250)
|
||||
FastLED.setBrightness(color);
|
||||
leds.setBrightness(color);
|
||||
else
|
||||
FastLED.setBrightness(250 - color);
|
||||
leds.setBrightness(LubeConfig.LED_Max_Brightness - color);
|
||||
break;
|
||||
|
||||
case LED_Error:
|
||||
leds[0] = timer % 500 > 250 ? CRGB::Red : CRGB::Black;
|
||||
leds.setBrightness(LubeConfig.LED_Max_Brightness);
|
||||
leds.setPixelColor(0, timer % 500 > 250 ? LED_ERROR_BLINK : 0);
|
||||
break;
|
||||
|
||||
case LED_Override:
|
||||
leds[0] = LED_override_color;
|
||||
leds.setBrightness(LubeConfig.LED_Max_Brightness);
|
||||
leds.setPixelColor(0, LED_override_color);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
FastLED.show();
|
||||
leds.show();
|
||||
}
|
||||
#ifdef FEATURE_ENABLE_OLED
|
||||
void Display_Process()
|
||||
@@ -472,22 +481,22 @@ void Button_Process()
|
||||
|
||||
if (buttonTimestamp + BUTTON_ACTION_DELAY_NOTHING < millis())
|
||||
{
|
||||
LED_Process(1, CRGB::White);
|
||||
LED_Process(1, COLOR_WARM_WHITE);
|
||||
buttonAction = BTN_NOTHING;
|
||||
}
|
||||
else if (buttonTimestamp + BUTTON_ACTION_DELAY_WIFI < millis())
|
||||
{
|
||||
LED_Process(1, CRGB::Yellow);
|
||||
LED_Process(1, LED_WIFI_BLINK);
|
||||
buttonAction = BTN_TOGGLEWIFI;
|
||||
}
|
||||
else if (buttonTimestamp + BUTTON_ACTION_DELAY_PURGE < millis())
|
||||
{
|
||||
LED_Process(1, CRGB::DeepPink);
|
||||
LED_Process(1, LED_PURGE_COLOR);
|
||||
buttonAction = BTN_STARTPURGE;
|
||||
}
|
||||
else if (buttonTimestamp + BUTTON_ACTION_DELAY_TOGGLEMODE < millis())
|
||||
{
|
||||
CRGB color = globals.systemStatus == sysStat_Normal ? CRGB::Blue : CRGB::Green;
|
||||
uint32_t color = globals.systemStatus == sysStat_Normal ? LED_RAIN_COLOR : LED_NORMAL_COLOR;
|
||||
LED_Process(1, color);
|
||||
buttonAction = BTN_TOGGLEMODE;
|
||||
}
|
||||
|
@@ -108,6 +108,16 @@ String processor(const String &var)
|
||||
#else
|
||||
return "Feature N/A";
|
||||
#endif
|
||||
if (var == "LED_MODE_FLASH")
|
||||
return String(LubeConfig.LED_Mode_Flash);
|
||||
if (var == "LEDFLASHCHECKED")
|
||||
return String(LubeConfig.LED_Mode_Flash == true ? "checked" : "");
|
||||
if (var == "LED_MAX_BRIGHTNESS")
|
||||
return String(LubeConfig.LED_Max_Brightness);
|
||||
if (var == "LED_MIN_BRIGHTNESS")
|
||||
return String(LubeConfig.LED_Min_Brightness);
|
||||
if (var == "EEPROM_VERSION")
|
||||
return String(LubeConfig.EEPROM_Version);
|
||||
if (var == "CONFIG_CHECKSUM")
|
||||
{
|
||||
char buffer[7];
|
||||
@@ -357,6 +367,26 @@ void WebserverPOST_Callback(AsyncWebServerRequest *request)
|
||||
globals.systemStatus = sysStat_Shutdown;
|
||||
}
|
||||
// end: POST Form Maintenance
|
||||
// begin: POST Form LED Settings
|
||||
if (p->name() == "ledmaxbrightness")
|
||||
LubeConfig.LED_Max_Brightness = p->value().toInt();
|
||||
if (p->name() == "ledminbrightness")
|
||||
LubeConfig.LED_Min_Brightness = p->value().toInt();
|
||||
if (p->name() == "ledsave")
|
||||
{
|
||||
if (request->hasParam("ledmodeflash", true))
|
||||
{
|
||||
AsyncWebParameter *param = request->getParam("ledmodeflash", true);
|
||||
if (param->value() == "on")
|
||||
LubeConfig.LED_Mode_Flash = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LubeConfig.LED_Mode_Flash = false;
|
||||
}
|
||||
globals.requestEEAction = EE_CFG_SAVE;
|
||||
}
|
||||
// end: POST Form LED SEttings
|
||||
}
|
||||
}
|
||||
|
||||
@@ -440,6 +470,7 @@ void WebserverEERestore_Callback(AsyncWebServerRequest *request, const String &f
|
||||
if (validext)
|
||||
{
|
||||
Debug_pushMessage("Restoring EEPROM-Stuff\n");
|
||||
#warning "please implement EEPROM-Restore"
|
||||
}
|
||||
|
||||
if (final)
|
||||
@@ -495,6 +526,9 @@ void WebServerEEJSON_Callback(AsyncWebServerRequest *request)
|
||||
config["CANSource"] = LubeConfig.CANSource;
|
||||
config["CANSource_Str"] = CANSourceString[LubeConfig.CANSource];
|
||||
#endif
|
||||
config["LED_Mode_Flash"] = LubeConfig.LED_Mode_Flash;
|
||||
config["LED_Max_Brightness"] = LubeConfig.LED_Max_Brightness;
|
||||
config["LED_Min_Brightness"] = LubeConfig.LED_Min_Brightness;
|
||||
sprintf(buffer, "0x%08X", LubeConfig.checksum);
|
||||
config["checksum"] = buffer;
|
||||
|
||||
|
Reference in New Issue
Block a user