From 9c012efef1a8ef0974eb2bc803ca4813e5835033 Mon Sep 17 00:00:00 2001 From: Emanuele Trabattoni Date: Sat, 11 Apr 2026 11:37:40 +0200 Subject: [PATCH] refactor led class --- RotaxMonitor/lib/led/led.cpp | 27 +++++++++++++++------------ RotaxMonitor/lib/led/led.h | 21 ++++++++++++++++++--- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/RotaxMonitor/lib/led/led.cpp b/RotaxMonitor/lib/led/led.cpp index c75f987..9a93a85 100644 --- a/RotaxMonitor/lib/led/led.cpp +++ b/RotaxMonitor/lib/led/led.cpp @@ -1,29 +1,32 @@ #include -RGBled::RGBled(const uint8_t pin, const uint8_t num) +RGBled::RGBled(const uint8_t pin) : m_led(pin) { - m_led = Adafruit_NeoPixel(num, pin, NEO_GRB + NEO_KHZ800); - m_led.begin(); - m_led.setPixelColor(0, RED); - m_led.show(); + pinMode(m_led, OUTPUT); + writeStatus(RGBled::ERROR); } RGBled::~RGBled() { - m_led.clear(); + pinMode(m_led, INPUT); } void RGBled::setStatus(const LedStatus s) { - if (m_status == s) return; + if (m_status == s) + return; + std::lock_guard lock(m_mutex); m_status = s; - RGB_BUILTIN_LED_COLOR_ORDER - m_led.setPixelColor(0, s); - m_led.setBrightness(16); - m_led.show(); + writeStatus(m_status); } const RGBled::LedStatus RGBled::getSatus(void) { return m_status; -} \ No newline at end of file +} + +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); +} diff --git a/RotaxMonitor/lib/led/led.h b/RotaxMonitor/lib/led/led.h index 8d026be..a6da94e 100644 --- a/RotaxMonitor/lib/led/led.h +++ b/RotaxMonitor/lib/led/led.h @@ -2,7 +2,7 @@ // System Inlcudes #include -#include +#include #define RED 0x00FF00 #define GREEN 0xFF0000 @@ -35,14 +35,29 @@ public: 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, const uint8_t num = 1); + RGBled(const uint8_t pin = 48); ~RGBled(); void setStatus(const LedStatus s); const LedStatus getSatus(void); private: - Adafruit_NeoPixel m_led; + void writeStatus(const LedStatus s); + +private: LedStatus m_status = LedStatus::IDLE; + std::mutex m_mutex; + const uint8_t m_led; }; \ No newline at end of file