30 lines
1 KiB
C
30 lines
1 KiB
C
// ws2812.h
|
|
// Thin HAL-Wrapper um Adafruit NeoPixel (bit-bang, kein SERCOM).
|
|
//
|
|
// Dirty-Flag-Pattern:
|
|
// ws2812_set() schreibt nur in den internen NeoPixel-Buffer (RAM).
|
|
// ws2812_show() überträgt den gesamten Buffer an die LEDs (~600µs, blockierend
|
|
// via noInterrupts()). Nie aus einer ISR aufrufen!
|
|
// CButton::render_led() ruft nur ws2812_set() auf; ws2812_show() wird
|
|
// einmalig von CMainController::updateLEDs() aufgerufen wenn mindestens
|
|
// ein Button dirty war oder eine Animation läuft.
|
|
|
|
#pragma once
|
|
#include <stdint.h>
|
|
|
|
#define WS2812_COUNT 20
|
|
#define WS2812_PIN 18 // D18 = PB22 = LED_DATA_PIN
|
|
|
|
void ws2812_init();
|
|
|
|
// Einzelne LED im Buffer setzen (sofort, kein HW-Transfer)
|
|
void ws2812_set(uint8_t idx, uint8_t r, uint8_t g, uint8_t b);
|
|
|
|
// Alle LEDs im Buffer auf dieselbe Farbe setzen (kein HW-Transfer)
|
|
void ws2812_fill(uint8_t r, uint8_t g, uint8_t b);
|
|
|
|
// Buffer an Hardware übertragen (~600µs, blockierend via noInterrupts())
|
|
void ws2812_show();
|
|
|
|
// Buffer löschen und sofort anzeigen (LEDs aus)
|
|
void ws2812_clear();
|