2 Commits

Author SHA1 Message Date
Obbart 9c012efef1 refactor led class 2026-04-11 11:37:40 +02:00
Obbart d41a99ee88 rgb led 2026-04-11 00:40:33 +02:00
4 changed files with 113 additions and 6 deletions
+32
View File
@@ -0,0 +1,32 @@
#include <led.h>
RGBled::RGBled(const uint8_t pin) : m_led(pin)
{
pinMode(m_led, OUTPUT);
writeStatus(RGBled::ERROR);
}
RGBled::~RGBled()
{
pinMode(m_led, INPUT);
}
void RGBled::setStatus(const LedStatus s)
{
if (m_status == s)
return;
std::lock_guard<std::mutex> lock(m_mutex);
m_status = s;
writeStatus(m_status);
}
const RGBled::LedStatus RGBled::getSatus(void)
{
return m_status;
}
void RGBled::writeStatus(const RGBled::LedStatus s)
{
RGBled::color_u u{.status = s};
rgbLedWrite(m_led, u.color.r, u.color.g, u.color.b);
}
+63
View File
@@ -0,0 +1,63 @@
#pragma once
// System Inlcudes
#include <Arduino.h>
#include <mutex>
#define RED 0x00FF00
#define GREEN 0xFF0000
#define BLUE 0x0000FF
#define WHITE 0xFFFFFF
#define YELLOW 0xFFFF00
#define CYAN 0xFF00FF
#define MAGENTA 0x00FFFF
#define ORANGE 0xA5FF00
#define PURPLE 0x008080
#define PINK 0x69FFB4
#define LIME 0xCD3232
#define SKY_BLUE 0xCE87EB
#define GOLD 0xD7FF00
#define TURQUOISE 0xE040D0
#define INDIGO 0x004B82
#define GRAY 0x808080
class RGBled
{
public:
enum LedStatus
{
OK = GREEN,
ERROR = RED,
INIT = YELLOW,
DATA_A = CYAN,
DATA_B = MAGENTA,
DATA_ALL = ORANGE,
IDLE = GRAY
};
struct color_t
{
uint8_t a, g, r, b;
};
union color_u
{
uint32_t status;
color_t color;
};
public:
RGBled(const uint8_t pin = 48);
~RGBled();
void setStatus(const LedStatus s);
const LedStatus getSatus(void);
private:
void writeStatus(const LedStatus s);
private:
LedStatus m_status = LedStatus::IDLE;
std::mutex m_mutex;
const uint8_t m_led;
};
+2
View File
@@ -20,6 +20,7 @@ lib_deps =
hideakitai/PCA95x5@^0.1.3
me-no-dev/AsyncTCP@^3.3.2
me-no-dev/ESPAsyncWebServer@^3.6.0
adafruit/Adafruit NeoPixel@^1.15.4
upload_protocol = esptool
upload_port = /dev/ttyACM1
upload_speed = 921600
@@ -45,6 +46,7 @@ platform = ${env:esp32-s3-devkitc1-n16r8.platform}
framework = ${env:esp32-s3-devkitc1-n16r8.framework}
lib_deps =
${env:esp32-s3-devkitc1-n16r8.lib_deps}
adafruit/Adafruit NeoPixel@^1.15.4
upload_protocol = esptool
upload_port = /dev/ttyACM1
upload_speed = 921600
+16 -6
View File
@@ -14,6 +14,7 @@
#include <datasave.h>
#include <webserver.h>
#include <ui.h>
#include <led.h>
// Defines to enable channel B
#define CH_B_ENABLE
@@ -76,6 +77,8 @@ void setup()
void loop()
{
// global variables
RGBled led;
led.setStatus(RGBled::LedStatus::INIT);
bool running = true;
const uint32_t max_queue = 128;
const uint32_t filter_k = 10;
@@ -219,6 +222,7 @@ void loop()
}
LOG_DEBUG("Real Time Tasks A & B initialized");
led.setStatus(RGBled::LedStatus::OK);
bool partial_save = false; // flag to indicate if a partial save has been done after a timeout
auto last_data = millis();
@@ -238,7 +242,7 @@ void loop()
WebPage webPage(80, LittleFS); // Initialize webserver and Websocket
//////////////// INNER LOOP /////////////////////
while (running)
while (running)
{
auto dataA = pdFALSE;
auto dataB = pdFALSE;
@@ -264,9 +268,15 @@ void loop()
#endif
// Update last data
if (dataA == pdTRUE || dataB == pdTRUE)
{
last_data = millis();
}
// Update Led color
if (dataA == pdTRUE && dataB == pdFALSE)
led.setStatus(RGBled::DATA_A);
else if (dataB == pdTRUE && dataA == pdFALSE)
led.setStatus(RGBled::DATA_B);
else
led.setStatus(RGBled::DATA_ALL);
if (dataA == pdTRUE)
{
@@ -314,17 +324,17 @@ void loop()
partial_save = true;
first_save = true;
}
//Serial.printf("[%d] Waiting for data...\r", wait_count++);
// Serial.printf("[%d] Waiting for data...\r", wait_count++);
led.setStatus(RGBled::LedStatus::IDLE);
delay(100);
}
if ((millis() - last_info) > 1000)
{
clearScreen();
Serial.println();
printRunningTasksMod(Serial);
last_info = millis();
}
} //////////////// INNER LOOP /////////////////////