Animacije
Što prikazuje ovaj primjer
Kako animirati cijelu matricu ponovnim iscrtavanjem sličica jednu za drugom. Skica u petlji izvodi dvije animacije: prolazak redova koji redom pali jedan red od vrha prema dnu, i dugu koja kroz kolo boja provodi svaki piksel, pri čemu je svaki piksel malo dalje od svog susjeda.
Spojite VCC na 5 V, GND na GND i DIN na pin 6 svojeg kontrolera, ili
promijenite PIN u pin koji ste koristili.
Kôd primjera
Ovo je Animations.ino iz fiksirane verzije biblioteke, točno onakav kakav se isporučuje.
/**
**************************************************
*
* @file Animations.ino
* @brief Demonstrates row sweep and colour-cycle animations on the
* Soldered 8x8 WS2812B LED grid.
*
* Connect the grid data line to PIN below.
*
* @authors Josip Šimun Kuči @ soldered.com
***************************************************/
#include "WS2812Grid-SOLDERED.h"
#define PIN 6
WS2812Grid grid(PIN);
// ---------------------------------------------------------------------------
// Helpers
// ---------------------------------------------------------------------------
// Simple HSV-to-RGB wheel: hue 0–255
static uint32_t colorWheel(uint8_t pos)
{
pos = 255 - pos;
if (pos < 85)
return WS2812Grid::Color(255 - pos * 3, 0, pos * 3);
if (pos < 170)
{
pos -= 85;
return WS2812Grid::Color(0, pos * 3, 255 - pos * 3);
}
pos -= 170;
return WS2812Grid::Color(pos * 3, 255 - pos * 3, 0);
}
// ---------------------------------------------------------------------------
// Animations
// ---------------------------------------------------------------------------
void rowSweep()
{
for (uint8_t y = 0; y < 8; y++)
{
grid.clear();
for (uint8_t x = 0; x < 8; x++)
{
grid.setPixel(x, y, 0, 180, 255);
}
grid.show();
delay(80);
}
}
void rainbowGrid(uint8_t cycles)
{
for (uint8_t c = 0; c < cycles; c++)
{
for (uint16_t hue = 0; hue < 256; hue++)
{
for (uint8_t y = 0; y < 8; y++)
{
for (uint8_t x = 0; x < 8; x++)
{
uint8_t offset = (x + y * 2) & 0xFF;
grid.setPixel(x, y, colorWheel((hue + offset) & 0xFF));
}
}
grid.show();
delay(10);
}
}
}
// ---------------------------------------------------------------------------
// Setup / loop
// ---------------------------------------------------------------------------
void setup()
{
grid.begin();
grid.setBrightness(40);
}
void loop()
{
rowSweep();
delay(200);
rainbowGrid(2);
delay(200);
}
Očekivani rezultat: skica ne ispisuje ništa u Serial Monitor. Na matrici, pri svjetlini 40 od 255, svaki red redom zasvijetli bojom (0, 180, 255) na 80 ms, od gornjeg do donjeg reda. Nakon stanke od 200 ms duga dvaput prolazi kroz 256 boja kola, 10 ms po koraku, a svaki piksel je pomaknut na kolu za svoj stupac plus dvostruki red. Još jedna stanka od 200 ms i petlja počinje ispočetka.
Korištene funkcije
WS2812Grid(uint8_t pin, uint8_t width = 8, uint8_t height = 8)returns WS2812GridStvara upravljački program matrice za width x height LED dioda na pinu spojenom na DIN. Jedna matrica je 8 x 8, što je zadano. Za više povezanih matrica navedite punu širinu i visinu cijelog panela.
ReturnsObjekt matrice.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | pin | Arduino pin spojen na DIN matrice. |
uint8_t | width | Broj stupaca, višekratnik broja 8. Zadano 8. |
uint8_t | height | Broj redova, višekratnik broja 8. Zadano 8. |
begin()returns voidInicijalizira upravljački program LED dioda i postavlja podatkovni pin kao izlaz, zatim briše sve piksele i poziva show(), pa matrica počinje ugašena. Pozovite ga jednom u setup().
ReturnsNišta.
setBrightness(uint8_t b)returns voidPostavlja izlaznu svjetlinu svih LED dioda. Promjena se vidi pri sljedećem show(). Namijenjeno je da se postavi jednom u setup(): biblioteka skalira spremljene boje, pa ponovljena promjena gubi preciznost boja.
ReturnsNišta.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | b | Svjetlina, od 0 (isključeno) do 255 (najsvjetlije). |
clear()returns voidIsključuje svaki piksel u memoriji. LED diode se gase pri sljedećem show(). Prolazak redova koristi ga da obriše prethodni red prije iscrtavanja sljedećeg.
ReturnsNišta.
setPixel(uint8_t x, uint8_t y, uint8_t r, uint8_t g, uint8_t b)returns voidPostavlja jednu LED diodu prema njezinu položaju u matrici na zasebne vrijednosti crvene, zelene i plave. Položaj izvan matrice se ignorira. Nakon toga pozovite show() kako biste promjenu poslali na LED diode.
ReturnsNišta.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | x | Stupac, 0 = lijevo. |
uint8_t | y | Red, 0 = gore. |
uint8_t | r | Crvena, od 0 do 255. |
uint8_t | g | Zelena, od 0 do 255. |
uint8_t | b | Plava, od 0 do 255. |
setPixel(uint8_t x, uint8_t y, uint32_t color)returns voidPostavlja jednu LED diodu prema njezinu položaju u matrici na pakiranu boju. Duga predaje vrijednost koju colorWheel() izgradi pomoću WS2812Grid::Color(). Položaj izvan matrice se ignorira. Nakon toga pozovite show() kako biste promjenu poslali na LED diode.
ReturnsNišta.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | x | Stupac, 0 = lijevo. |
uint8_t | y | Red, 0 = gore. |
uint32_t | color | Pakirana boja, 0x00RRGGBB. |
WS2812Grid::Color(uint8_t r, uint8_t g, uint8_t b)returns uint32_tStatična pomoćna funkcija koja pakira crvenu, zelenu i plavu u jednu 32-bitnu vrijednost boje. Pomoćna funkcija colorWheel() iz skice koristi je za pretvaranje položaja na kolu u boju.
ReturnsPakirana boja, (r << 16) | (g << 8) | b.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | r | Crvena, od 0 do 255. |
uint8_t | g | Zelena, od 0 do 255. |
uint8_t | b | Plava, od 0 do 255. |
show()returns voidŠalje boje spremljene u memoriji na LED diode. Na većini pločica nakratko isključuje prekide kako bi održala vremenski slijed signala, pa millis() i micros() pri svakom izvođenju gube oko 30 µs po LED diodi.
ReturnsNišta.
Sve zajedno
Svaka sličica iscrtava se na isti način: promijenite piksele u memoriji pomoću clear()
i setPixel(), zatim jednom pozovite show() i pričekajte prije sljedeće sličice.
delay() nakon svakog show() određuje brzinu, pa promijenite 80 i 10 da
prolazak redova ili duga bude brži ili sporiji. colorWheel() i dvije
funkcije animacija dio su skice, a ne biblioteke.