How To: Smart LED pásek
Smart LED pásek vám nabízí snadný způsob, jak zobrazovat hodnoty například teplotu jako barevný rozsah, blikáním apod.
Je potřeba použít Power Module, který se stará o napájení a komunikaci mezi Core Module a LED páskem.
Odkazy
Dostupné barvy
LED diody použité na našem pásku jsou RGBW. To znamená, že obsahují samostatný světelný zdroj pro barvy červenou, zelenou, modrou a bílou (teplá bílá).
Abyste získali téměř studené bílé světlo, musíte nastavit každou jednotlivou barvu na stejnou hodnotu jako ostatní.
Příklad
V tomto příkladu nastavíte prvních 35 LED tak, aby každá svítila o 5 bodů jasněji než ta předchozí. Použije se modrá barva.
Pole _led_strip_buffer je pro funkci LED pásku povinné. Jde v podstatě o popis LED pásku pro Core Module.
Pro nastavení barvy pixelu (LED na pásku) musíte poskytnout několik informací. To se dělá pomocí twr_led_strip_set_pixel_rgbw(twr_led_strip_t *self, int position, uint8_t r, uint8_t g, uint8_t b, uint8_t w). Argumenty funkce jsou:
*self- instance LED pásku, nejčastěji&led_stripposition- pixel (LED) na pásku, který se má nastavit (začíná od 0, nikoli od 1)r, g, b, w- vyjádření jak silně má každá barva svítit, hodnoty musí být mezi 0 (minimum) a 255 (maximum)
Aby se změny projevily, musíte zavolat twr_led_strip_write(&led_strip);. Pokud to neuděláte, na pásku se nic nestane.
Příklad kódu pro nastavení několika LED
#include <application.h>
twr_led_strip_t led_strip;
static uint32_t _dma_buffer[144 * 4 * 2]; // count * type * 2
const twr_led_strip_buffer_t _led_strip_buffer =
{
.type = TWR_LED_STRIP_TYPE_RGBW,
.count = 144,
.buffer = _dma_buffer
};
void application_init(void)
{
twr_module_power_init();
twr_led_strip_init(&led_strip, twr_module_power_get_led_strip_driver(), &_led_strip_buffer);
uint8_t blue = 0;
for (int i = 0; i < 35; ++i) {
twr_led_strip_set_pixel_rgbw(&led_strip, i, 0, 0, blue, 0);
blue += 5;
}
twr_led_strip_write(&led_strip);
}
Maximální jasnost celého LED pásku můžete omezit funkcí twr_led_strip_set_brightness(twr_led_strip_t *self, uint8_t brightness).
Efekty LED pásku
K dispozici je několik funkcí s efekty.
Tyto efekty vypadají skvěle a možná je využijete pro nějakou signalizaci, aniž byste je museli programovat sami.
Pokud si chcete tyto efekty vyzkoušet, zde je kostra kódu pro pásek se 144 LED.
Příklad kostry kódu pro efekty LED pásku
#include <application.h>
twr_led_strip_t led_strip;
static uint32_t _dma_buffer[144 * 4 * 2]; // count * type * 2
const twr_led_strip_buffer_t _led_strip_buffer =
{
.type = TWR_LED_STRIP_TYPE_RGBW,
.count = 144,
.buffer = _dma_buffer
};
void application_init(void)
{
twr_module_power_init();
twr_led_strip_init(&led_strip, twr_module_power_get_led_strip_driver(), &_led_strip_buffer);
// place examples here
}
Efekt Test
Jde o jednoduchý efekt, kterým můžete ověřit, zda všechny barvy LED pásku fungují správně
twr_led_strip_effect_test(&led_strip);
Efekt Rainbow
LED pásek se rozsvítí v barvách duhy a bude tyto barvy plynule měnit do kruhu (co skončí na jedné straně pásku, začne na druhé).
Druhý parametr představuje rychlost změny. Nižší číslo = rychlejší změny.
twr_led_strip_effect_rainbow_cycle(&led_strip, 100);
Existuje také funkce twr_led_strip_effect_rainbow(&led_strip, 100);, která funguje téměř stejně, ale chvíli trvá, než se barva objeví na jednom konci pásku poté, co zmizí z druhého.
Efekt Color Wipe
Vyplní celý pásek pixel po pixelu jednou barvou
twr_led_strip_effect_color_wipe(&led_strip, 0x10000000, 20);
První parametr přijímá barvu v hexadecimálním formátu (tato konkrétní je červená) a druhý parametr je rychlost. Čím nižší, tím rychleji.
Efekt Theater
Způsobí přepínání LED podle vzoru níže: - znamená, že LED je zhasnutá, X znamená, že LED svítí.
twr_led_strip_effect_color_wipe(&led_strip, 0x10000000, 20);
Vzor:
X–X–X–X–X–X -X–X–X–X–X– –X–X–X–X–X- X–X–X–X–X–X
První parametr je barva v hexadecimálním formátu (uložená v `uint32_t), a druhý je rychlost změn. Čím nižší, tím rychleji.
Efekt Stroboscope
Efekt ICicle
Efekt Pulse Color
Efekt Thermometer
Zastavení efektu
Efekt můžete snadno zastavit touto funkcí
twr_led_strip_effect_stop(&led_strip);
Příklad kódu pro zastavení efektu LED pásku
#include <application.h>
twr_led_strip_t led_strip;
static uint32_t _dma_buffer[144 * 4 * 2]; // count * type * 2
const twr_led_strip_buffer_t _led_strip_buffer =
{
.type = TWR_LED_STRIP_TYPE_RGBW,
.count = 144,
.buffer = _dma_buffer
};
void stop_effect(void* param) {
(void) param;
twr_led_strip_effect_stop(&led_strip);
}
void application_init(void)
{
twr_module_power_init();
twr_led_strip_init(&led_strip, twr_module_power_get_led_strip_driver(), &_led_strip_buffer);
twr_led_strip_effect_theater_chase_rainbow(&led_strip, 100);
twr_scheduler_register(stop_effect, NULL, twr_tick_get() + 3000);
}