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.

  1. // File test_draw_line.cs
  2. using System;
  3. using System.Threading;
  4. using rpi_rgb_led_matrix_sharp; // RGBLedMatrix.dll
  5.  
  6. namespace rgbmatrixclock
  7. {
  8. class Program
  9. {
  10. static int Main(string[] args)
  11. {
  12. // Instanzierung der Objekte
  13. var matrix = new RGBLedMatrix(new RGBLedMatrixOptions
  14. {
  15. Rows = 64,
  16. Cols = 64,
  17. GpioSlowdown = 2,
  18. LimitRefreshRateHz = 60,
  19. Brightness = 35,
  20. DisableHardwarePulsing = false
  21. });
  22. var canvas = matrix.CreateOffscreenCanvas();
  23. var yellow = new Color(255,255,0);
  24. // Der Ursprung des Koordinatensystems ist links oben.
  25. // Die y-Achse zeigt nach unten.
  26. // Linie diagonal über den Bildschirm zeichnen:
  27. canvas.DrawLine(0, 0, 63, 63, yellow);
  28. // Die "Leinwand" auf das Panel übertragen
  29. canvas = matrix.SwapOnVsync(canvas);
  30. // 10 Sekunden warten
  31. Thread.Sleep(10000);
  32. // Mit Programmende wird das LED-Panel zurückgesetzt.
  33. return 0;
  34. }
  35. }
  36. }

Stellenmarkt
  1. Informatiker / Fachinformatiker (m/w/d) Netzwerktechnik und -sicherheit
    ED Netze GmbH, Rheinfelden (Baden)
  2. Software Architekt / Software Architect (m/w/d)
    igus GmbH, Köln
Detailsuche

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.

Golem Karrierewelt
  1. Deep-Dive Kubernetes – Production Grade Deployments: virtueller Ein-Tages-Workshop
    20.09.2022, Virtuell
  2. Adobe Premiere Pro Aufbaukurs: virtueller Zwei-Tage-Workshop
    14./15.07.2022, Virtuell
Weitere IT-Trainings

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.

  • Unser 10-adriges Flachbandkabel (Bild: Michael Bröde)
  • Der Pinout für das LED-Panel - auf der nächsten Seite ist der Pinout für die GPIO-Leiste zu sehen. (Bild: Michael Bröde)
  • Der Pinout für die GPIO-Leiste des Raspberry Pi Zero (Bild: Michael Bröde)
  • Hier ein Screenshot aus Putty (Bild: Michael Bröde)
Hier ein Screenshot aus Putty (Bild: Michael Bröde)

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:

  1. int x = 0;
  2. int y = 0;
  3. // Eine Endlosschleife
  4. for ( ; ; )
  5. {
  6. // Leinwand zurücksetzen
  7. canvas.Clear();
  8. // Linie zeichnen
  9. canvas.DrawLine(x, y, 63 - x, 63 - y, yellow);
  10. // Auf dem Panel ausgeben
  11. canvas = matrix.SwapOnVsync(canvas);
  12. // Neue Koordinaten berechnen
  13. if (++y > 63)
  14. {
  15. y = 63;
  16. x++;
  17. }
  18. if (x > 63)
  19. {
  20. x = 0;
  21. y = 0;
  22. }
  23. }

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:

  1. RGBLedFont font = new RGBLedFont("/home/pi/rpi-rgb-led-matrix/fonts/7x13.bdf");
  2. canvas.DrawText(font, 10, 30, yellow, "Hallo");
  3. canvas.DrawText(font, 10, 45, yellow, "Welt!");

Raspberry Pi: Das umfassende Handbuch. Über 1.000 Seiten in Farbe. Mit Einstieg in Linux, Python und Elektrotechnik. Aktuell zum Raspberry Pi 4

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.

Bitte aktivieren Sie Javascript.
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
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5


derdiedas 24. Mai 2022 / Themenstart

Korrekt :-) Vor allem kosten die doch kaum noch etwas. Aber wer verwendet 2022 noch...

pesos-maximus 17. Mai 2022 / Themenstart

Für ARM v6 stellt Microsoft keine Runtimes zur Verfügung. Andere PIs, auch der neue Zero...

Kommentieren



Aktuell auf der Startseite von Golem.de
Franziska Giffey
Deepfake von Klitschko täuscht Berlins Bürgermeisterin

Berlins Regierende Bürgermeisterin Franziska Giffey (SPD) hat per Videokonferenz mit einem Deepfake von Vitali Klitschko gesprochen. Der Betrug flog auf.

Franziska Giffey: Deepfake von Klitschko täuscht Berlins Bürgermeisterin
Artikel
  1. Mond: US-Sonde findet Einschlagstelle des unbekannten Raketenteils
    Mond
    US-Sonde findet Einschlagstelle des unbekannten Raketenteils

    Die Nasa hat die Stelle auf dem Mond gefunden, wo im März ein noch unidentifiziertes Raketenteil abgestürzt ist. Der Krater ist überraschend groß.

  2. Datenpanne: IT-Mitarbeiter verliert USB-Stick mit Meldedaten einer Stadt
    Datenpanne
    IT-Mitarbeiter verliert USB-Stick mit Meldedaten einer Stadt

    Die Tasche mit dem USB-Stick wurde über ein in ihr ebenfalls enthaltenes Smartphone geortet und gefunden.

  3. Logistik: Post will mit Solarschiff Pakete in Berlin verteilen
    Logistik
    Post will mit Solarschiff Pakete in Berlin verteilen

    Die Post will Pakettransporte von der Straße aufs Wasser verlagern. Das erste der Schiffe wird mit Solarstrom betrieben. In Zukunft sollen sie autonom fahren.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • MSI 323CQRDE (WQHD, 165 Hz) 399€ • LG OLED 48C17LB 919€ • Samsung 980 PRO (PS5-komp.) 2 TB 234,45€ • Apple HomePod Mini 84€ • 16.000 Artikel günstiger bei Media Markt • MindStar (u. a. AMD Ryzen 7 5700G 239€, Samsung 970 EVO Plus 250 GB 39€ und Corsair Crystal 680X RGB 159€) [Werbung]
    •  /