8#include <halx/core.hpp>
25 float c = hsv.
v * hsv.
s;
26 float x = c * (1.0f - std::fabs(std::fmod(hsv.
h / 60.0f, 2.0f) - 1.0f));
29 if (hsv.
h >= 0 && hsv.
h < 60) {
30 return {(c + m), (x + m), (0 + m)};
31 }
else if (hsv.
h >= 60 && hsv.
h < 120) {
32 return {(x + m), (c + m), (0 + m)};
33 }
else if (hsv.
h >= 120 && hsv.
h < 180) {
34 return {(0 + m), (c + m), (x + m)};
35 }
else if (hsv.
h >= 180 && hsv.
h < 240) {
36 return {(0 + m), (x + m), (c + m)};
37 }
else if (hsv.
h >= 240 && hsv.
h < 300) {
38 return {(x + m), (0 + m), (c + m)};
40 return {(c + m), (0 + m), (x + m)};
50 Ws2812b(TIM_HandleTypeDef *htim, uint32_t channel,
size_t size)
51 : htim_{htim}, channel_{channel}, size_{
size},
52 buf_(RESET_CODE +
size * 24, 0) {
53 HAL_TIM_PWM_Start_DMA(htim_, channel_,
54 reinterpret_cast<uint32_t *
>(buf_.data()),
59 uint8_t r = rgb.
r * 255.0f;
60 uint8_t g = rgb.
g * 255.0f;
61 uint8_t b = rgb.
b * 255.0f;
64 size_t offset = RESET_CODE + index * 24;
65 for (
size_t i = 0; i < 8; ++i) {
66 if (g & (1 << (7 - i))) {
67 buf_[offset + i] = ONE_CODE;
69 buf_[offset + i] = ZERO_CODE;
74 for (
size_t i = 0; i < 8; ++i) {
75 if (r & (1 << (7 - i))) {
76 buf_[offset + 8 + i] = ONE_CODE;
78 buf_[offset + 8 + i] = ZERO_CODE;
83 for (
size_t i = 0; i < 8; ++i) {
84 if (b & (1 << (7 - i))) {
85 buf_[offset + 16 + i] = ONE_CODE;
87 buf_[offset + 16 + i] = ZERO_CODE;
93 for (
size_t i = 0; i < size_; ++i) {
98 size_t size() {
return size_; }
101 static constexpr uint8_t RESET_CODE = 50;
102 static constexpr uint8_t ZERO_CODE = 8;
103 static constexpr uint8_t ONE_CODE = 16;
105 TIM_HandleTypeDef *htim_;
108 std::vector<uint32_t> buf_;
Ws2812b(TIM_HandleTypeDef *htim, uint32_t channel, size_t size)
Definition ws2812b.hpp:50
size_t size()
Definition ws2812b.hpp:98
void set_rgb_all(const Rgb &rgb)
Definition ws2812b.hpp:92
void set_rgb(size_t index, const Rgb &rgb)
Definition ws2812b.hpp:58
Rgb to_rgb(const Hsv &hsv)
Definition ws2812b.hpp:24
Definition ws2812b.hpp:18
float s
Definition ws2812b.hpp:20
float h
Definition ws2812b.hpp:19
float v
Definition ws2812b.hpp:21
Definition ws2812b.hpp:12
float b
Definition ws2812b.hpp:15
float g
Definition ws2812b.hpp:14
float r
Definition ws2812b.hpp:13