Zum Hauptinhalt springen

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.

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
}

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 WS2812Grid

Erstellt 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

TypNameBeschreibung
uint8_tpinArduino-Pin, der mit DIN des Grids verbunden ist.
uint8_twidthAnzahl der Spalten, ein Vielfaches von 8. Standard 8.
uint8_theightAnzahl der Zeilen, ein Vielfaches von 8. Standard 8.
begin()returns void

Initialisiert 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 void

Legt 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

TypNameBeschreibung
uint8_tbHelligkeit, 0 (aus) bis 255 (am hellsten).
setPixel(uint8_t x, uint8_t y, uint8_t r, uint8_t g, uint8_t b)returns void

Setzt 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

TypNameBeschreibung
uint8_txSpalte, 0 = links.
uint8_tyZeile, 0 = oben.
uint8_trRot, 0 bis 255.
uint8_tgGrün, 0 bis 255.
uint8_tbBlau, 0 bis 255.
setPixel(uint8_t x, uint8_t y, uint32_t color)returns void

Setzt 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

TypNameBeschreibung
uint8_txSpalte, 0 = links.
uint8_tyZeile, 0 = oben.
uint32_tcolorGepackte Farbe, 0x00RRGGBB.
WS2812Grid::Color(uint8_t r, uint8_t g, uint8_t b)returns uint32_t

Eine 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

TypNameBeschreibung
uint8_trRot, 0 bis 255.
uint8_tgGrün, 0 bis 255.
uint8_tbBlau, 0 bis 255.
show()returns void

Sendet 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.