Skip to main content

Postavljanje piksela

Što prikazuje ovaj primjer​

Kako upaliti pojedinačne LED diode prema njihovu položaju (x, y). Skica postavlja nisku svjetlinu, boji tri kuta i dva piksela u sredini, jednom zasebnim vrijednostima crvene, zelene i plave, a jednom spakiranom bojom, a zatim sve šalje na mrežu jednim pozivom show().

Povežite VCC na 5 V, GND na GND i DIN na pin 6 svojeg kontrolera ili promijenite PIN na pin koji ste upotrijebili.

Kôd primjera​

Ovo je SetPixel.ino iz fiksirane inačice biblioteke, točno onakav kakav se isporučuje.

Select Board
SetPixel.ino
/**
**************************************************
*
* @file SetPixel.ino
* @brief Basic usage: set individual pixels by (x, y) coordinates on the
* Soldered 8x8 WS2812B LED grid.
*
* Connect the grid data line to PIN below.
* (0, 0) is top-left. X increases to the right, Y increases downward.
*
* @authors Josip Šimun Kuči @ soldered.com
***************************************************/

#include "WS2812Grid-SOLDERED.h"

#define PIN 6

WS2812Grid grid(PIN);

void setup()
{
grid.begin();

// Set overall brightness (0 = off, 255 = full).
// Keep this low to avoid excessive current draw.
grid.setBrightness(40);

// Draw a red pixel at the top-left corner
grid.setPixel(0, 0, 255, 0, 0);

// Draw a green pixel at the top-right corner
grid.setPixel(7, 0, 0, 255, 0);

// Draw a blue pixel at the bottom-left corner
grid.setPixel(0, 7, 0, 0, 255);

// Draw a white pixel in the centre using a packed color
grid.setPixel(3, 3, WS2812Grid::Color(255, 255, 255));
grid.setPixel(4, 4, WS2812Grid::Color(255, 255, 255));

// Push all changes to the hardware
grid.show();
}

void loop()
{
// Nothing to do — pixels stay lit
}

Očekivani rezultat: skica ne ispisuje ništa u Serial Monitor. Odmah nakon prijenosa gornji lijevi piksel (0, 0) svijetli crveno, gornji desni piksel (7, 0) zeleno, donji lijevi piksel (0, 7) plavo, a pikseli na (3, 3) i (4, 4) bijelo, svi sa svjetlinom 40 od 255. Ostaju upaljeni jer loop() ne radi ništa.

Korištene funkcije​

WS2812Grid(uint8_t pin, uint8_t width = 8, uint8_t height = 8)returns WS2812Grid

Stvara upravljački program mreže za width x height LED dioda na pinu povezanom na DIN. Jedna mreža je 8 x 8, što je zadano. Za više povezanih mreža zadajte punu širinu i visinu panela.

ReturnsObjekt mreže.

Parametri

TipNazivOpis
uint8_tpinArduino pin povezan na DIN mreže.
uint8_twidthBroj stupaca, višekratnik broja 8. Zadano 8.
uint8_theightBroj redaka, višekratnik broja 8. Zadano 8.
begin()returns void

Inicijalizira upravljački program LED dioda, postavlja podatkovni pin kao izlaz, zatim briše svaki piksel i poziva show(), pa mreža počinje tamna. Pozovite ga jednom u setup().

ReturnsNišta.

setBrightness(uint8_t b)returns void

Postavlja izlaznu svjetlinu za sve LED diode. Promjena se vidi pri sljedećem show(). Namijenjeno je da se postavi jednom u setup(): biblioteka skalira pohranjene boje, pa ponovljeno mijenjanje gubi preciznost boje.

ReturnsNišta.

Parametri

TipNazivOpis
uint8_tbSvjetlina, od 0 (isključeno) do 255 (najsvjetlije).
setPixel(uint8_t x, uint8_t y, uint8_t r, uint8_t g, uint8_t b)returns void

Postavlja jednu LED diodu prema njezinu položaju na mreži na zasebne vrijednosti crvene, zelene i plave. Položaj izvan mreže se zanemaruje. Nakon toga pozovite show() kako biste promjenu poslali na LED diode.

ReturnsNišta.

Parametri

TipNazivOpis
uint8_txStupac, 0 = lijevo.
uint8_tyRedak, 0 = gore.
uint8_trCrvena, od 0 do 255.
uint8_tgZelena, od 0 do 255.
uint8_tbPlava, od 0 do 255.
setPixel(uint8_t x, uint8_t y, uint32_t color)returns void

Postavlja jednu LED diodu prema njezinu položaju na mreži na spakiranu boju, na primjer onu napravljenu pomoću WS2812Grid::Color(). Položaj izvan mreže se zanemaruje. Nakon toga pozovite show() kako biste promjenu poslali na LED diode.

ReturnsNišta.

Parametri

TipNazivOpis
uint8_txStupac, 0 = lijevo.
uint8_tyRedak, 0 = gore.
uint32_tcolorSpakirana boja, 0x00RRGGBB.
WS2812Grid::Color(uint8_t r, uint8_t g, uint8_t b)returns uint32_t

Statička pomoćna funkcija koja pakira crvenu, zelenu i plavu u jednu 32-bitnu vrijednost boje, za setPixel() sa spakiranom bojom. Pozovite je na klasi, kao WS2812Grid::Color().

ReturnsSpakirana boja, (r << 16) | (g << 8) | b.

Parametri

TipNazivOpis
uint8_trCrvena, od 0 do 255.
uint8_tgZelena, od 0 do 255.
uint8_tbPlava, od 0 do 255.
show()returns void

Šalje boje pohranjene 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 izvršavanju gube oko 30 µs po LED diodi.

ReturnsNišta.

Sastavljanje u cjelinu​

Izradite mrežu s pinom povezanim na DIN, jednom pozovite begin(), postavite svjetlinu, zatim postavite koliko god piksela želite i završite jednim pozivom show(). Na mreži se ništa ne mijenja dok se ne izvrši show(). Povećanje svjetline iznad 40 čini LED diode svjetlijima i povlači više struje, stoga najprije provjerite svoje napajanje od 5 V.