Pixel setzen
Was dieses Beispiel zeigt
So leuchten einzelne LEDs anhand ihrer (x, y)-Position auf. Der Sketch stellt eine niedrige Helligkeit ein, färbt drei Ecken und zwei Pixel in der Mitte, einmal mit getrennten Rot-, Grün- und Blauwerten und einmal mit einer gepackten Farbe, und sendet dann alles mit einem einzigen show() an das Grid.
Verbinden Sie VCC mit 5 V, GND mit GND und DIN mit Pin 6 Ihres Controllers, oder ändern Sie PIN auf den Pin, den Sie verwendet haben.
Der Beispielcode
Dies ist SetPixel.ino aus der fest eingebundenen Bibliothek, genau so, wie sie ausgeliefert wird.
/**
**************************************************
*
* @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
}
Erwartetes Ergebnis: Der Sketch gibt nichts im Serial Monitor aus. Direkt nach dem Upload leuchtet das Pixel oben links (0, 0) rot, das Pixel oben rechts (7, 0) grün, das Pixel unten links (0, 7) blau und die Pixel bei (3, 3) und (4, 4) weiß, alle mit Helligkeit 40 von 255. Sie bleiben an, weil loop() nichts tut.
Verwendete Funktionen
WS2812Grid(uint8_t pin, uint8_t width = 8, uint8_t height = 8)returns WS2812GridErstellt den Grid-Driver für width x height LEDs an dem Pin, der mit DIN verbunden ist. Ein Grid ist 8 x 8, der Standardwert. Bei mehreren verketteten Grids übergeben Sie die volle Breite und Höhe des Panels.
ReturnsDas Grid-Objekt.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | pin | Arduino-Pin, der mit DIN des Grids verbunden ist. |
uint8_t | width | Anzahl der Spalten, ein Vielfaches von 8. Standard 8. |
uint8_t | height | Anzahl der Zeilen, ein Vielfaches von 8. Standard 8. |
begin()returns voidInitialisiert den LED-Driver, setzt den Datenpin als Ausgang, löscht dann jedes Pixel und ruft show() auf, sodass das Grid dunkel startet. Rufen Sie es einmal in setup() auf.
ReturnsNichts.
setBrightness(uint8_t b)returns voidLegt die Ausgabehelligkeit für alle LEDs fest. Die Änderung wird beim nächsten show() sichtbar. Sie ist dafür gedacht, einmal in setup() gesetzt zu werden: Die Bibliothek skaliert die gespeicherten Farben, daher geht bei wiederholtem Ändern Farbgenauigkeit verloren.
ReturnsNichts.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | b | Helligkeit, 0 (aus) bis 255 (am hellsten). |
setPixel(uint8_t x, uint8_t y, uint8_t r, uint8_t g, uint8_t b)returns voidSetzt eine LED anhand ihrer Grid-Position auf getrennte Rot-, Grün- und Blauwerte. Eine Position außerhalb des Grids wird ignoriert. Rufen Sie anschließend show() auf, um die Änderung an die LEDs zu senden.
ReturnsNichts.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | x | Spalte, 0 = links. |
uint8_t | y | Zeile, 0 = oben. |
uint8_t | r | Rot, 0 bis 255. |
uint8_t | g | Grün, 0 bis 255. |
uint8_t | b | Blau, 0 bis 255. |
setPixel(uint8_t x, uint8_t y, uint32_t color)returns voidSetzt eine LED anhand ihrer Grid-Position auf eine gepackte Farbe, etwa eine mit WS2812Grid::Color() erzeugte. Eine Position außerhalb des Grids wird ignoriert. Rufen Sie anschließend show() auf, um die Änderung an die LEDs zu senden.
ReturnsNichts.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | x | Spalte, 0 = links. |
uint8_t | y | Zeile, 0 = oben. |
uint32_t | color | Gepackte Farbe, 0x00RRGGBB. |
WS2812Grid::Color(uint8_t r, uint8_t g, uint8_t b)returns uint32_tEine statische Hilfsfunktion, die Rot, Grün und Blau zu einem 32-Bit-Farbwert packt, für setPixel() mit gepackter Farbe. Rufen Sie sie auf der Klasse auf, als WS2812Grid::Color().
ReturnsDie gepackte Farbe, (r << 16) | (g << 8) | b.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | r | Rot, 0 bis 255. |
uint8_t | g | Grün, 0 bis 255. |
uint8_t | b | Blau, 0 bis 255. |
show()returns voidSendet die im Speicher gehaltenen Farben an die LEDs. Auf den meisten Boards schaltet sie kurz die Interrupts ab, um das Signaltiming einzuhalten, daher verlieren millis() und micros() bei jedem Aufruf etwa 30 µs pro LED.
ReturnsNichts.
Alles zusammensetzen
Erstellen Sie das Grid mit dem Pin, der mit DIN verbunden ist, rufen Sie begin() einmal auf, stellen Sie die Helligkeit ein, setzen Sie dann beliebig viele Pixel und schließen Sie mit einem einzigen show() ab.
Auf dem Grid ändert sich nichts, bis show() ausgeführt wird. Eine Helligkeit über 40 lässt die LEDs heller leuchten und zieht mehr Strom, prüfen Sie daher zuerst Ihre 5-V-Versorgung.