37 lines
915 B
C++
37 lines
915 B
C++
#include "ws2812.h"
|
|
|
|
#include <utility>
|
|
|
|
WS2812::WS2812(uint gpio, PIO pio, uint sm) : m_pio{pio}, m_gpio{gpio}, m_sm{sm} { init(); }
|
|
|
|
WS2812::~WS2812() { deinit(); }
|
|
|
|
void WS2812::switchColor(Color color) { putPixel(std::to_underlying(color)); }
|
|
|
|
void WS2812::blinkReady() {
|
|
for (int i = 0; i < 2; i++) {
|
|
switchColor(Color::WHITE);
|
|
sleep_ms(250);
|
|
switchColor(Color::OFF);
|
|
sleep_ms(250);
|
|
}
|
|
}
|
|
|
|
void WS2812::init() {
|
|
if (m_offset != 0)
|
|
return;
|
|
|
|
m_offset = pio_add_program(m_pio, &ws2812_program);
|
|
ws2812_program_init(m_pio, m_sm, m_offset, m_gpio, 800000, true);
|
|
switchColor(Color::OFF);
|
|
sleep_ms(1);
|
|
}
|
|
|
|
void WS2812::deinit() {
|
|
switchColor(Color::OFF);
|
|
sleep_ms(1);
|
|
pio_remove_program(m_pio, &ws2812_program, m_offset);
|
|
m_offset = 0;
|
|
}
|
|
|
|
void WS2812::putPixel(uint32_t pixel_grb) { pio_sm_put_blocking(m_pio, m_sm, pixel_grb << 8u); } |