leds
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
#ifndef LEDS_H
|
||||
#define LEDS_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
const uint32_t LED_COUNT = 21;
|
||||
const uint32_t LED_SHAPE_COUNT = 4;
|
||||
const uint32_t LED_INDICATOR_COUNT = 17;
|
||||
|
||||
// We will store 7 LEDs worth of data in the RMT peripheral,
|
||||
// so we can update all the LEDs in 3 transactions.
|
||||
#define RMT_LED_SYMBOLS 7
|
||||
// Each LED requires 24 RMT symbols (1 for each bit)
|
||||
#define RMT_SYMBOLS_PER_LED 24
|
||||
|
||||
// 10MHz resolution, 1 tick = 0.1us (led strip needs a high resolution)
|
||||
#define LED_STRIP_RMT_RES_HZ (10 * 1000 * 1000)
|
||||
|
||||
class LEDColor {
|
||||
private:
|
||||
uint32_t color;
|
||||
constexpr LEDColor(uint32_t color) : color(color) {}
|
||||
public:
|
||||
constexpr LEDColor(uint8_t r, uint8_t g, uint8_t b)
|
||||
: color((static_cast<uint32_t>(r) << 16)
|
||||
| (static_cast<uint32_t>(g) << 8)
|
||||
| static_cast<uint32_t>(b)) {}
|
||||
|
||||
constexpr static LEDColor from_rgb(uint8_t r, uint8_t g, uint8_t b) {
|
||||
return LEDColor(r, g, b);
|
||||
}
|
||||
|
||||
static const LEDColor OFF;
|
||||
static const LEDColor RED;
|
||||
static const LEDColor RED_STRONG;
|
||||
static const LEDColor ORANGE;
|
||||
static const LEDColor ORANGE_STRONG;
|
||||
static const LEDColor YELLOW;
|
||||
static const LEDColor YELLOW_STRONG;
|
||||
static const LEDColor GREEN;
|
||||
static const LEDColor GREEN_STRONG;
|
||||
static const LEDColor BLUE;
|
||||
static const LEDColor BLUE_STRONG;
|
||||
static const LEDColor PINK;
|
||||
static const LEDColor PINK_STRONG;
|
||||
static const LEDColor WHITE;
|
||||
static const LEDColor WHITE_STRONG;
|
||||
|
||||
inline constexpr uint32_t value() const { return color; }
|
||||
};
|
||||
|
||||
/// One of the shapes on the shape display.
|
||||
enum class ShapeLed {
|
||||
Shape1Led = 0,
|
||||
Shape2Led = 1,
|
||||
Shape3Led = 2,
|
||||
Shape4Led = 3,
|
||||
};
|
||||
|
||||
/// One of the indicator LEDs.
|
||||
enum class IndicatorLED {
|
||||
MODULE_SSEG = 4,
|
||||
GAME_SSEG = 5,
|
||||
TFT = 6,
|
||||
MIC = 7,
|
||||
IR_LED = 8,
|
||||
SPEAKER = 9,
|
||||
RFID = 10,
|
||||
KEYPAD = 11,
|
||||
LCD = 12,
|
||||
S4 = 13,
|
||||
S3 = 14,
|
||||
S2 = 15,
|
||||
S1 = 16,
|
||||
B4 = 17,
|
||||
B3 = 18,
|
||||
B2 = 19,
|
||||
B1 = 20,
|
||||
};
|
||||
|
||||
/// @brief Initializes the indicator LEDs
|
||||
void init_leds();
|
||||
|
||||
class LEDController {
|
||||
private:
|
||||
uint32_t led_colors[LED_COUNT];
|
||||
|
||||
static void set_led(uint32_t led, uint32_t color);
|
||||
public:
|
||||
/// Sets the color of an indicator LED.
|
||||
///
|
||||
/// Call `flush()` to send the data to the LEDs.
|
||||
static void set_indicator(IndicatorLED led, LEDColor color) {
|
||||
set_led(static_cast<uint32_t>(led), color.value());
|
||||
}
|
||||
|
||||
/// Sets the color of an indicator LED.
|
||||
///
|
||||
/// Call `flush()` to send the data to the LEDs.
|
||||
static void set_shape(ShapeLed led, LEDColor color) {
|
||||
set_led(static_cast<uint32_t>(led), color.value());
|
||||
}
|
||||
|
||||
/// Outputs the data to the leds.
|
||||
static void flush();
|
||||
|
||||
/// Clears the LEDs
|
||||
static void clear();
|
||||
};
|
||||
|
||||
|
||||
#endif // LEDS_H
|
||||
Reference in New Issue
Block a user