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 Matrix Display 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.

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? :-)

Hast du weitere Fragen? Probier doch mal unser brandneues Forum zu Arduino aus!

One thought on “Arduino Matrix Display 8×8 Pixel und jede Menge Spaß

Schreibe einen Kommentar

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

Ich akzeptiere

 

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