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


    7 Gedanken zu „Arduino Matrix Display 8×8 Pixel und jede Menge Spaß“

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

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

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

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

     

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