Far­ben­spie­le mit einer RGB-Matrix

Lese­zeit: 7 Minu­ten

Lösung
Seite als PDF

Die RGB-Matrix soll ein zufäl­li­ges Pixel­mus­ter anzeigen.

So sieht es aus:

RGB-Matrix

Die RGB-Matrix besteht aus mit­ein­an­der ver­bun­de­nen RGB-LEDs. Jede besitzt einen eige­nen Con­trol­ler und kann ein­zeln ange­steu­ert wer­den. Die RGB-Matrix benö­tigt nur einen digi­ta­len Eingang.

RGB ist eine Mischung aus den Far­ben rot, grün und blau. Die Wer­te wer­den durch Kom­ma­ta getrennt.

Bei­spie­le:

Hier fin­dest du einen Über­blick über die  🔗RGB-Farb­codes (exter­ner Link abge­ru­fen am 19.02.23).

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Benö­tig­te Bibliotheken:

oder: Sketch -> Biblio­thek ein­bin­den -> Biblio­the­ken verwalten

Funk­tio­nen der Biblio­thek Adafruit_NeoMatrix (Aus­wahl)

Schlüs­sel­wortPara­me­terAkti­on
begin();RGB-Matrix star­ten
setBrightness(Parameter)0 = aus, 255 = größ­te HelligkeitBild­schirm­hel­lig­keit setzen
setRotation(Richtung);Rich­tung = 0 → nicht drehen
Rich­tung = 1 → 90° drehen
Rich­tung = 2 → 180° drehen
Rich­tung = 3 → 270 ° drehen
Bild­schirm ausrichten
fillScreen(Farbe);Bild­schirm­hin­ter­grund füllen
Far­ben definieren:
#define Rot RGBMatrix.Color(255,0,0)
#define Gruen RGBMatrix.Color(0,255,0)
#define Blau RGBMatrix.Color(0,0,255)
#define Magen­ta RGBMatrix.Color(139,0,139)
#define Pink RGBMatrix.Color(255,20,147)
#define Weiss RGBMatrix.Color(255,255,255)
#define Gelb RGBMatrix.Color(255,255,0)
Bild­schirm­hin­ter­grund
drawLine(StartX, Star­tY, End­eX, EndeY, Farbe);Linie zeich­nen
drawFastHLine(StartX, Star­tY, Län­ge, Farbe);hori­zon­ta­le Linie zeichnen
drawFastVLine(StartX, Star­tY, Län­ge, Farbe);ver­ti­ka­le Linie zeichnen
drawRect(StartX, Star­tY,, Brei­te, Höhe, Farbe);Recht­eck zeichnen
drawRoundRect(StartX, Star­tY, Brei­te, Höhe, Ecken­ra­di­us, Farbe);abge­run­de­tes Recht­eck zeichnen
fill.Rect(StartX, Star­tY, Brei­te, Höhe, Füllfarbe);aus­ge­füll­tes Recht­eck zeichnen
drawCircle(MittelpunkX, Mit­tel­punk­tY, Radi­us, Farbe);Kreis zeich­nen
drawPixel(StartX, Star­tY, Farbe);ein­zel­nen Pixel zeichnen
drawChar(StartX, Star­tY, Zei­chen, Rot, Hin­ter­grund, Textgröße);drawChar(0, 1, 'Z', Rot, Weiss, 1);Ein­zel­nes Zei­chen schreiben
fillCircle(MittelpunktX, Mit­tel­punk­tY, Radi­us, Füllfarbe);Aus­ge­füll­ten Kreis zeichnen
setCursor(x, y);Cur­sor setzen
setTextSize(Textgröße);Text­grö­ße:
1 – 4
bei einer Matrix nur 1 möglich
Text­grö­ße setzen
setTextColor(Farbe);Text­far­be bestimmen
print("Text");Text schrei­ben

Ob die Aus­rich­tung der RGB-Matrix kor­rekt ist, kannst du mit die­sem Pro­gramm feststellen:

# include "Adafruit_NeoMatrix.h"

# define RGBMatrixPin 7

// RGBMatrix -> Name der RGB-Matrix
/*
  die wichtigsten Parameter:
  Parameter 1 = Breite der Matrix (8)
  Parameter 2 = Höhe der Matrix (8)
  Parameter 3 = Name des Daten-Pins (RGBMatrixPin)
*/
Adafruit_NeoMatrix RGBMatrix =   Adafruit_NeoMatrix(8, 8, RGBMatrixPin,
                                 NEO_MATRIX_TOP + NEO_MATRIX_RIGHT +
                                 NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
                                 NEO_GRB + NEO_KHZ800);
void setup()
{
  RGBMatrix.setBrightness(10);

  // RGBMatrix starten
  RGBMatrix.begin();
}
void loop()
{
  RGBMatrix.clear();

  // horizintale Linie
  RGBMatrix.drawFastHLine(0, 2, 8, RGBMatrix.Color(0, 0, 255));

  // vertikale Linie
  RGBMatrix.drawFastVLine(2, 0, 8, RGBMatrix.Color(0, 0, 255));

  /* 
    leuchtende LEDs in den Ecken
    oben links
    oben rechts
    unten links
    unten rechts
  */
  RGBMatrix.drawPixel(0, 0, RGBMatrix.Color(0, 0, 255));
  RGBMatrix.drawPixel(7, 0, RGBMatrix.Color(0, 0, 255));
  RGBMatrix.drawPixel(0, 7, RGBMatrix.Color(0, 0, 255));
  RGBMatrix.drawPixel(7, 7, RGBMatrix.Color(0, 0, 255));

  RGBMatrix.show();
}

So muss es aussehen:

Ein Lauf­licht:

Das dazu­ge­hö­ri­ge Programm:

# include "Adafruit_NeoMatrix.h"

// Startposition links oben
int Spalte = 0;

# define RGBMatrixPin 7

// RGBMatrix -> Name der RGB-Matrix
/*
  die wichtigsten Parameter:
  Parameter 1 = Breite der Matrix (8)
  Parameter 2 = Höhe der Matrix (8)
  Parameter 3 = Name des Daten-Pins (RGBMatrixPin)
*/
Adafruit_NeoMatrix RGBMatrix = Adafruit_NeoMatrix(8, 8, RGBMatrixPin,
                               NEO_MATRIX_TOP + NEO_MATRIX_RIGHT +
                               NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
                               NEO_GRB + NEO_KHZ800);

void setup()
{
  // Helligkeit setzen
  RGBMatrix.setBrightness(10);

  // RGBMatrix starten
  RGBMatrix.begin();
}

void loop()
{
  RGBMatrix.clear();

  // von oben nach unten
  for (int i = 0; i <= 7; i ++)
  {
    RGBMatrix.drawPixel(Spalte, i, RGBMatrix.Color(0, 0, 255));
    delay(100);
    RGBMatrix.show();
  }

  RGBMatrix.clear();

  // eine Spalte nach rechts
  Spalte++;

  // von unten nach oben
  for (int i = 7; i >= 0; i--)
  {
    RGBMatrix.drawPixel(Spalte, i, RGBMatrix.Color(0, 0, 255));
    delay(100);
    RGBMatrix.show();
  }

  // solange das Ende (Spalte = 7) nicht erreicht ist
  // -> eine Spalte hinzufügen
  if (Spalte < 6) Spalte++;

  // Ende erreicht, Spalte wieder auf 0 setzen
  else Spalte = 0;
}

Gra­fik­funk­tio­nen:

Download

Das dazu­ge­hö­ri­ge Programm:

# include "Adafruit_NeoMatrix.h"

# define RGBMatrixPin 7

// RGBMatrix -> Name der RGB-Matrix
/*
  die wichtigsten Parameter:
  Parameter 1 = Breite der Matrix (8)
  Parameter 2 = Höhe der Matrix (8)
  Parameter 3 = Name des Daten-Pins (RGBMatrixPin)
*/
Adafruit_NeoMatrix RGBMatrix =  Adafruit_NeoMatrix(8, 8, RGBMatrixPin,
                                NEO_MATRIX_TOP + NEO_MATRIX_RIGHT +
                                NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
                                NEO_GRB + NEO_KHZ800);

// Farben definieren
# define Rot          RGBMatrix.Color(255,0,0)
# define Gruen        RGBMatrix.Color(0,255,0)
# define Blau         RGBMatrix.Color(0,0,255)
# define Magenta      RGBMatrix.Color(139,0,139)
# define Pink         RGBMatrix.Color(255,20,147)
# define Weiss        RGBMatrix.Color(255,255,255)
# define Gelb         RGBMatrix.Color(255,255,0)
# define ZufallsFarbe RGBMatrix.Color(random(1, 255), random(1, 255), random(1, 255))

void setup()
{
  RGBMatrix.setBrightness(10);

  // RGBMatrix starten
  RGBMatrix.begin();
}

void loop()
{
  RGBMatrix.clear();
  char Text[7] = {'A', 'r', 'd', 'u', 'i', 'n', 'o'};
  for (int i = 0; i < sizeof(Text); i++)
  {
    RGBMatrix.drawChar(0, 1, Text[i], Rot, 1, 1);
    RGBMatrix.show();
    delay(500);
    RGBMatrix.clear();
  }
  delay(1000);
  RGBMatrix.clear();

  // Matrix mit Farbe füllen
  RGBMatrix.fillScreen(Blau);
  RGBMatrix.show();
  delay(500);
  RGBMatrix.clear();

  RGBMatrix.fillScreen(Gelb);
  RGBMatrix.show();
  delay(500);
  RGBMatrix.clear();

  RGBMatrix.fillScreen(Rot);
  RGBMatrix.show();
  delay(500);

  RGBMatrix.clear();
  RGBMatrix.fillScreen(Gruen);
  RGBMatrix.show();
  delay(500);
  RGBMatrix.clear();

  RGBMatrix.fillScreen(Magenta);
  RGBMatrix.show();
  delay(500);
  RGBMatrix.clear();

  // einzelnes Zeichen schreiben
  RGBMatrix.setCursor(0, 1);
  RGBMatrix.setTextColor(Pink);
  RGBMatrix.setTextSize(1);
  RGBMatrix.print('Z');
  RGBMatrix.show();
  delay(500);
  RGBMatrix.clear();

  // Linie zeichnen
  for (int i = 0; i <= 7; i ++)
  {
    RGBMatrix.drawLine(i, 0, i, 8, Gelb);
    RGBMatrix.show();
    delay(200);
  }
  delay(500);
  RGBMatrix.clear();

  // horizontale Linie zeichnen
  for (int i = 1; i < 9; i ++)
  {
    RGBMatrix.drawFastHLine(0, i , i, Gruen);
    RGBMatrix.show();
    delay(200);
  }
  delay(500);
  RGBMatrix.clear();

  // vertikale Linie zeichnen
  for (int i = 1; i < 9; i ++)
  {
    RGBMatrix.drawFastVLine(i, 0 , i, Magenta);
    RGBMatrix.show();
    delay(100);
  }
  delay(500);
  RGBMatrix.clear();

  // Kreis zeichnen
  RGBMatrix.drawCircle(4, 4, 3, Weiss);
  RGBMatrix.show();
  delay(500);
  RGBMatrix.clear();

  // ausgefüllten Kreis zeichnen
  RGBMatrix.fillCircle(4, 4, 3, Blau);
  RGBMatrix.show();
  delay(500);

  // Rechtecke zeichnen
  RGBMatrix.clear();
  for (int i = 1; i < 9; i ++)
  {
    RGBMatrix.drawRect(0, 0, i, i, RGBMatrix.Color(0, 255, 255));
    RGBMatrix.show();
    delay(200);
  }
  delay(500);
  RGBMatrix.clear();
}

Das eigent­li­che Pro­gramm: LEDs mit Zufallsfarben:

# include "Adafruit_NeoMatrix.h"

# define RGBMatrixPin 7

// Anzahl der leuchtenden LEDs
// da die Position zufällig bestimmt wird, können sie sich auch überlagern
# define AnzahlLED 64

// RGBMatrix -> Name der RGB-Matrix
/*
  die wichtigsten Parameter:
  Parameter 1 = Breite der Matrix (8)
  Parameter 2 = Höhe der Matrix (8)
  Parameter 3 = Name des Daten-Pins (RGBMatrixPin)
*/
Adafruit_NeoMatrix RGBMatrix = Adafruit_NeoMatrix(8, 8, RGBMatrixPin,
                               NEO_MATRIX_TOP + NEO_MATRIX_RIGHT +
                               NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
                               NEO_GRB + NEO_KHZ800);

# define Zufallsfarbe RGBMatrix.Color(random(1, 255), random(1, 255), random(1, 255))

void setup()
{
  RGBMatrix.setBrightness(10);

  // NeoPixel Bibliothek initialisieren
  RGBMatrix.begin();
  
  // Zufallsgenerator starten
  randomSeed(analogRead(0));
}

void loop()
{
  RGBMatrix.clear();

  int Minimum = 0;
  int Maximum = 8;

  for (int i = 0; i < AnzahlLED; i++)
  {
    // Zufallsposition der Pixel
    int Spalte =  random(Minimum, Maximum);
    int Zeile =  random(Minimum, Maximum);

    RGBMatrix.drawPixel(Spalte, Zeile, Zufallsfarbe);
  }
  RGBMatrix.show();
  delay(1000);
  RGBMatrix.clear();
}

Erstel­le mit den gra­fi­schen Funk­tio­nen auch eige­ne Mus­ter oder einen eige­nen Text.


Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 29. Dez 2023 @ 12:06