Eine Linie und Bewegungen: Beispiele für Ausgaben auf dem LED-Panel
Das nachfolgende Beispiel zeigt auf dem LED-Panel eine Linie von links oben nach rechts unten.
// File test_draw_line.cs using System; using System.Threading; using rpi_rgb_led_matrix_sharp; // RGBLedMatrix.dll namespace rgbmatrixclock { class Program { static int Main(string[] args) { // Instanzierung der Objekte var matrix = new RGBLedMatrix(new RGBLedMatrixOptions { Rows = 64, Cols = 64, GpioSlowdown = 2, LimitRefreshRateHz = 60, Brightness = 35, DisableHardwarePulsing = false }); var canvas = matrix.CreateOffscreenCanvas(); var yellow = new Color(255,255,0); // Der Ursprung des Koordinatensystems ist links oben. // Die y-Achse zeigt nach unten. // Linie diagonal über den Bildschirm zeichnen: canvas.DrawLine(0, 0, 63, 63, yellow); // Die "Leinwand" auf das Panel übertragen canvas = matrix.SwapOnVsync(canvas); // 10 Sekunden warten Thread.Sleep(10000); // Mit Programmende wird das LED-Panel zurückgesetzt. return 0; } } }
Das Objekt matrix (Zeile 14) entspricht dem LED-Panel. Im Konstruktor RGBLedMatrix sind diverse Optionsparameter zur Konfiguration des Panels definiert. Informationen zu diesen Parametern entnehmen wir der Herstellerdokumentation zum Panel. Zusätzliche Informationen gibt es in verschiedenen readme- und Header-Dateien im Bibliotheksverzeichnis, wie zum Beispiel hier \rpi-rgb-led-matrix\README.md oder hier \rpi-rgb-led-matrix\include\led-matrix.h.
Das Objekt canvas (Zeile 23) ist mit einem 64-x-64-Pixel-Bitmap vergleichbar, das im Speicher liegt. Jedes Pixel dieses Bitmaps entspricht einer LED des Panels. Auf dem Bitmap zeichnen wir mit der Methode DrawLine (Zeile 28).
Das canvas-Objekt beherrscht weiterhin die Methoden DrawCircle, DrawText, SetPixel und Fill - mehr aber auch nicht. Umfangreiche Draw- und Fill-Methoden, wie wir sie beispielsweise aus dem .Net-Framework-Namespace Drawing kennen, gibt es hier leider nicht. Mit ein bisschen Mathematik erstellen wir uns diese Methoden jedoch bei Bedarf leicht selbst.
Die Matrix-Methode SwapOnVsync (Zeile 30) überträgt das Bitmap dann auf das LED-Panel. Erst durch diese Methode ist auf dem Panel etwas zu sehen.
Der nachfolgende Codeschnipsel zeigt, wie Bewegungen auf dem LED-Panel ausgegeben werden. Die grundlegenden Schritte sind immer die gleichen: eine Schleife erstellen, darin pro Durchlauf die Leinwand zurücksetzen, eine Situation zeichnen, SwapOnVsync anweisen, neue Situation berechnen und nächsten Schleifendurchlauf ausführen. In diesem Beispiel wird die Linie um den Panel-Mittelpunkt gedreht:
int x = 0; int y = 0; // Eine Endlosschleife for ( ; ; ) { // Leinwand zurücksetzen canvas.Clear(); // Linie zeichnen canvas.DrawLine(x, y, 63 - x, 63 - y, yellow); // Auf dem Panel ausgeben canvas = matrix.SwapOnVsync(canvas); // Neue Koordinaten berechnen if (++y > 63) { y = 63; x++; } if (x > 63) { x = 0; y = 0; } }
Für die Ausgabe von Text stehen im Arbeitsverzeichnis fonts diverse Font-Dateien zur Verfügung. Auf diese muss bei der Instanziierung des Font-Objekts explizit verwiesen werden. Mit den folgenden Anweisungen geben wir Text auf dem LED-Panel aus:
RGBLedFont font = new RGBLedFont("/home/pi/rpi-rgb-led-matrix/fonts/7x13.bdf"); canvas.DrawText(font, 10, 30, yellow, "Hallo"); canvas.DrawText(font, 10, 45, yellow, "Welt!");
Fazit
In diesem Projekt haben wir gezeigt, wie mit einfacher C#-Programmierung Ausgaben auf einem LED-Panel gemacht werden. Wenn auch zum Zeichnen nur 64 x 64 Bildpunkte zur Verfügung stehen, sind die Möglichkeiten doch vielfältig.
Darüber hinaus besteht die Möglichkeit, mehrere LED-Panels parallel und/oder in Reihe verkettet an einem einzigen Raspberry Pi zu betreiben. So bilden zum Beispiel vier LED-Panels im Quadrat ein circa 40 x 40 cm großes Display mit 128 x 128 Bildpunkten.
Damit sind schon viel mehr Ideen für Hobby und Beruf realisierbar. Auch die Anordnung von vier Panels nebeneinander (circa 20 x 80 cm) ist eine Lösung für verschiedene praktische Aufgaben. Als ein Beispiel sei hier die Textausgabe mittels Laufschrift genannt.
Natürlich ist bei solchen Konstellationen mehr Augenmerk auf die Raspberry-Hardware zu richten. Hier empfehlen wir zum Beispiel die Ausrüstung mit einer aktiven Kühlung. Die Zero-Version des Raspberrys ist dafür nicht geeignet.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
- ohne Werbung
- mit ausgeschaltetem Javascript
- mit RSS-Volltext-Feed
So erstellen wir ein Programm |
Korrekt :-) Vor allem kosten die doch kaum noch etwas. Aber wer verwendet 2022 noch...
Für ARM v6 stellt Microsoft keine Runtimes zur Verfügung. Andere PIs, auch der neue Zero...