// 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 #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();