Zum Inhalt springen
Arduino Matrix Display Max7219

Arduino Matrix Display 8×8 Pixel und jede Menge Spaß

Mit Arduino Matrix Displays anzusteuern ist ziemlich einfach, wenn man es sich einfach macht! Hier zeige ich dir, wie das geht.

Ein Matrixdisplay besteht je nach Bauart aus z.B. 8×8 Pixeln. Es sind also insgesamt 64 LEDs. Die mit Arduino anzusteuern dürfte bei den begrenzten I/O Pins ziemlich schwierig werden. Zum Glück gibt es Controller-Bausteine (ICs), die einem das Leben leichter machen. Einer dieser Chips ist der MAX72XX.

Zusatzinfo: XX steht für alle möglichen Zahlenkombinationen wie MAX7218, MAX7219, MAX721 oder MAX7228. Um tiefer in die Materie einzusteigen, kannst du einen Blick ins Datenblatt werfen. Für diese Anleitung ist das aber nicht nötig.


Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


Ich empfehle dringend, ein Matrix-Display mit bereits integriertem MAX72XX zu kaufen. Das erspart dir viel Arbeit, einiges an Kabelsalat und schlaflose Nächte.

Ich hab mir diese besorgt: AZDelivery 3 x MAX7219 8×8 Das sind drei Matrix-Displays für rund neun Euro. Ich denke, das ist ein guter Preis.

Schaltung

Die Schaltung ist sehr einfach. Das Display bekommt Strom durch den GND und 5V+. Darüber hinaus werden drei Datenleitungen benötigt. Super nützlich ist die Möglichkeit, mehrere Displays hintereinander zu schalten:

Arduino Matrix Display Code

Um den Max7219 anzusteuern muss noch die LEDControl Bibliothek installiert werden. Klicke auf Sketch>Bibliotheken einbinden>Bibliotheken verwalten und suche nach LEDControl. Installiere die aktuelle Version der Bibliothek.

//We always have to include the library
#include "LedControl.h"

/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 12 is connected to the DataIn 
 pin 11 is connected to the CLK 
 pin 10 is connected to LOAD 
 We have only a single MAX72XX.
 */
LedControl lc=LedControl(12,11,10,1);

/* we always wait a bit between updates of the display */
unsigned long delaytime=100;

void setup() {
  /*
   The MAX72XX is in power-saving mode on startup,
   we have to do a wakeup call
   */
  lc.shutdown(0,false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0,8);
  /* and clear the display */
  lc.clearDisplay(0);
}

/*
 This method will display the characters for the
 word "Arduino" one after the other on the matrix. 
 (you need at least 5x7 leds to see the whole chars)
 */
void writeArduinoOnMatrix() {
  /* here is the data for the characters */
  byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};
  byte r[5]={B00111110,B00010000,B00100000,B00100000,B00010000};
  byte d[5]={B00011100,B00100010,B00100010,B00010010,B11111110};
  byte u[5]={B00111100,B00000010,B00000010,B00000100,B00111110};
  byte i[5]={B00000000,B00100010,B10111110,B00000010,B00000000};
  byte n[5]={B00111110,B00010000,B00100000,B00100000,B00011110};
  byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};

  /* now display them one by one with a small delay */
  lc.setRow(0,0,a[0]);
  lc.setRow(0,1,a[1]);
  lc.setRow(0,2,a[2]);
  lc.setRow(0,3,a[3]);
  lc.setRow(0,4,a[4]);
  delay(delaytime);
  lc.setRow(0,0,r[0]);
  lc.setRow(0,1,r[1]);
  lc.setRow(0,2,r[2]);
  lc.setRow(0,3,r[3]);
  lc.setRow(0,4,r[4]);
  delay(delaytime);
  lc.setRow(0,0,d[0]);
  lc.setRow(0,1,d[1]);
  lc.setRow(0,2,d[2]);
  lc.setRow(0,3,d[3]);
  lc.setRow(0,4,d[4]);
  delay(delaytime);
  lc.setRow(0,0,u[0]);
  lc.setRow(0,1,u[1]);
  lc.setRow(0,2,u[2]);
  lc.setRow(0,3,u[3]);
  lc.setRow(0,4,u[4]);
  delay(delaytime);
  lc.setRow(0,0,i[0]);
  lc.setRow(0,1,i[1]);
  lc.setRow(0,2,i[2]);
  lc.setRow(0,3,i[3]);
  lc.setRow(0,4,i[4]);
  delay(delaytime);
  lc.setRow(0,0,n[0]);
  lc.setRow(0,1,n[1]);
  lc.setRow(0,2,n[2]);
  lc.setRow(0,3,n[3]);
  lc.setRow(0,4,n[4]);
  delay(delaytime);
  lc.setRow(0,0,o[0]);
  lc.setRow(0,1,o[1]);
  lc.setRow(0,2,o[2]);
  lc.setRow(0,3,o[3]);
  lc.setRow(0,4,o[4]);
  delay(delaytime);
  lc.setRow(0,0,0);
  lc.setRow(0,1,0);
  lc.setRow(0,2,0);
  lc.setRow(0,3,0);
  lc.setRow(0,4,0);
  delay(delaytime);
}

/*
  This function lights up a some Leds in a row.
 The pattern will be repeated on every row.
 The pattern will blink along with the row-number.
 row number 4 (index==3) will blink 4 times etc.
 */
void rows() {
  for(int row=0;row<8;row++) {
    delay(delaytime);
    lc.setRow(0,row,B10100000);
    delay(delaytime);
    lc.setRow(0,row,(byte)0);
    for(int i=0;i<row;i++) {
      delay(delaytime);
      lc.setRow(0,row,B10100000);
      delay(delaytime);
      lc.setRow(0,row,(byte)0);
    }
  }
}

/*
  This function lights up a some Leds in a column.
 The pattern will be repeated on every column.
 The pattern will blink along with the column-number.
 column number 4 (index==3) will blink 4 times etc.
 */
void columns() {
  for(int col=0;col<8;col++) {
    delay(delaytime);
    lc.setColumn(0,col,B10100000);
    delay(delaytime);
    lc.setColumn(0,col,(byte)0);
    for(int i=0;i<col;i++) {
      delay(delaytime);
      lc.setColumn(0,col,B10100000);
      delay(delaytime);
      lc.setColumn(0,col,(byte)0);
    }
  }
}

/* 
 This function will light up every Led on the matrix.
 The led will blink along with the row-number.
 row number 4 (index==3) will blink 4 times etc.
 */
void single() {
  for(int row=0;row<8;row++) {
    for(int col=0;col<8;col++) {
      delay(delaytime);
      lc.setLed(0,row,col,true);
      delay(delaytime);
      for(int i=0;i<col;i++) {
        lc.setLed(0,row,col,false);
        delay(delaytime);
        lc.setLed(0,row,col,true);
        delay(delaytime);
      }
    }
  }
}

void loop() { 
  writeArduinoOnMatrix();
  rows();
  columns();
  single();
}

Dieses Beispiel findest du auch unter Datei>Beispiele>LedControl>LCDemoMatrix.

Nützliche Befehle der LedControl-Bibliothek

LedControl lc = LedControl(12,11,10,1);

Erstellt ein Display Objekt und übergibt die angeschlossenen Pins und die Anzahl der Display-Module

lc.shutdown(0,false);

Weckt das Display aus dem Energiespar-Modus

lc.setIntensity(0,8);
Setzt die Leuchtstärke des Displays. (Wertebereich ist mir leider unbekannt.)

lc.clearDisplay(0);
Löscht die Anzeige auf dem Display 0.

lc.setRow(0,row,B01111110);

Schreibt zeilenweise ein Byte (Werte 0 – 255) in die Zeile row (Wertebereich 0 – 7).

lc.setColumn(0,col,B10100000);

Schreibt spaltenweise ein Byte (Werte 0 – 255) in die Spalte col (Wertebereich 0 – 7).

lc.setLed(0,row,col,true);

Schaltet eine LED im Display 0 an der Stelle row, col ein. (Werte true und false).

Und was machst du jetzt damit? Wie wäre es mit einem coolen Arduino Halloween LED Matrix-Kürbis oder einem Arduino-Kaminfeuer? :-)


Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

  • Die beliebtesten Arduino-Projekte von StartHardware
  • Inklusive Schaltplan, Beschreibung und Code
  • Arduino-Schnellstart-Kapitel
  • Kompakter Programmierkurs


4 1 vote
Article Rating
Abonnieren
Benachrichtige mich bei

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.

8 Comments
Newest
Oldest Most Voted
Inline Feedbacks
Alle Kommentare anzeigen
anonym
9 Monate zuvor

Aus dem ausschnit:
lc.setIntensity(0,8);
Setzt die Leuchtstärke des Displays. (Wertebereich ist mir leider unbekannt.)
der werte bereich ist mir im source code von 0-15 aufgefallen

Jürgen N:
1 Jahr zuvor

Vielen Dank für die ausführlichen Beschreibungen!!

Henning
2 Jahre zuvor

Muss man nicht mit dem Strom aufpassen, wenn der vom Arduino kommt und nicht von einer externen Stromquelle?

Jürgen N.
Antworte an  Henning
1 Jahr zuvor

Man muss ja nur die Stromversorgung separat an die LED Matrix anlegen.
Der Arduino kann den Strom über USB bekommen.
Ich habe nur die beiden GND zusammengelegt.

Johan
4 Jahre zuvor

Ich habe mal ein wenig im SourceCode der Library herumgelesen und herausgefunden, dass die Intensität zwischen 0-15 liegen darf.
Ansonsten :DaumenHoch

H.-U. Küster
4 Jahre zuvor

Eine Übersicht über Befehle der LedControl-Bibliothek habe ich schon lange gesucht. Man findet viele Beispiele, aber der verwendete Syntax ist leider meistens nicht erklärt. Wieder etwas schlauer . . .

5 Jahre zuvor

Ich habe ein Programming Tool gemacht, dass das ganze erheblich vereinfacht!
https://scratch.mit.edu/projects/411009947/

8
0
Ich würde mich über deine Meinung freuen.x