refactor led class

This commit is contained in:
2026-04-11 11:37:40 +02:00
parent d41a99ee88
commit 9c012efef1
2 changed files with 33 additions and 15 deletions

View File

@@ -1,29 +1,32 @@
#include <led.h> #include <led.h>
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); pinMode(m_led, OUTPUT);
m_led.begin(); writeStatus(RGBled::ERROR);
m_led.setPixelColor(0, RED);
m_led.show();
} }
RGBled::~RGBled() RGBled::~RGBled()
{ {
m_led.clear(); pinMode(m_led, INPUT);
} }
void RGBled::setStatus(const LedStatus s) void RGBled::setStatus(const LedStatus s)
{ {
if (m_status == s) return; if (m_status == s)
return;
std::lock_guard<std::mutex> lock(m_mutex);
m_status = s; m_status = s;
RGB_BUILTIN_LED_COLOR_ORDER writeStatus(m_status);
m_led.setPixelColor(0, s);
m_led.setBrightness(16);
m_led.show();
} }
const RGBled::LedStatus RGBled::getSatus(void) const RGBled::LedStatus RGBled::getSatus(void)
{ {
return m_status; 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);
}

View File

@@ -2,7 +2,7 @@
// System Inlcudes // System Inlcudes
#include <Arduino.h> #include <Arduino.h>
#include <Adafruit_NeoPixel.h> #include <mutex>
#define RED 0x00FF00 #define RED 0x00FF00
#define GREEN 0xFF0000 #define GREEN 0xFF0000
@@ -35,14 +35,29 @@ public:
IDLE = GRAY IDLE = GRAY
}; };
struct color_t
{
uint8_t a, g, r, b;
};
union color_u
{
uint32_t status;
color_t color;
};
public: public:
RGBled(const uint8_t pin = 48, const uint8_t num = 1); RGBled(const uint8_t pin = 48);
~RGBled(); ~RGBled();
void setStatus(const LedStatus s); void setStatus(const LedStatus s);
const LedStatus getSatus(void); const LedStatus getSatus(void);
private: private:
Adafruit_NeoPixel m_led; void writeStatus(const LedStatus s);
private:
LedStatus m_status = LedStatus::IDLE; LedStatus m_status = LedStatus::IDLE;
std::mutex m_mutex;
const uint8_t m_led;
}; };