How to use a MAX7219 LED Dot Matrix with an Arduino

Got Questions? Click here and post them in the Brainy-Bits Forum to get help!

OVERVIEW

Using a LED Dot Matrix in your next project can be a way to incorporate some cool little animations.

By using these 8X8 matrix modules you can  create your own.

Since these modules use the MAX7219 LED driver chip, we will be able to turn on and off the 64 LEDs of each modules, using only 3 pins on our Arduino.

In this tutorial we will connect 2 of them together to display different animations on each one.



SCHEMATIC

MAX7219 Dot Matrix with Arduino

As you can see, even if we are using 2 Modules, the number of pins needed, does not increase.

VCC and Ground are connected to the Arduino.

Pin 12 is connected to DIN, Pin 11 is connected to CLK and Pin 10 is connected to CS.



THE CODE

 

Our Sketch will make use of the "LedControl" Library to communicate with the MAX7219 modules.

Download and extract it to your Library folder, then restart your IDE software.

The code below assumes that we have 2 Dot Matrix connected together in cascade, but you can modify it easily if you have more or less of them connected.

We select the module we want to write to by using a number based on where it is in the chain, starting from 0 for the first one, 1 for the second, and so on...

 

As always you can have a look at the tutorial video for more information.

#include "LedControl.h"

LedControl lc=LedControl(12,11,10,2);  // Pins: DIN,CLK,CS, # of Display connected

unsigned long delayTime=200;  // Delay between Frames

// Put values in arrays
byte invader1a[] =
{
   B00011000,  // First frame of invader #1
   B00111100,
   B01111110,
   B11011011,
   B11111111,
   B00100100,
   B01011010,
   B10100101
};

byte invader1b[] =
{
  B00011000, // Second frame of invader #1
  B00111100,
  B01111110,
  B11011011,
  B11111111,
  B00100100,
  B01011010,
  B01000010
};

byte invader2a[] =
{
  B00100100, // First frame of invader #2
  B00100100,
  B01111110,
  B11011011,
  B11111111,
  B11111111,
  B10100101,
  B00100100
};

byte invader2b[] =
{
  B00100100, // Second frame of invader #2
  B10100101,
  B11111111,
  B11011011,
  B11111111,
  B01111110,
  B00100100,
  B01000010
};

void setup()
{
  lc.shutdown(0,false);  // Wake up displays
  lc.shutdown(1,false);
  lc.setIntensity(0,5);  // Set intensity levels
  lc.setIntensity(1,5);
  lc.clearDisplay(0);  // Clear Displays
  lc.clearDisplay(1);
}


//  Take values in Arrays and Display them
void sinvader1a()
{
  for (int i = 0; i < 8; i++)  
  {
    lc.setRow(0,i,invader1a[i]);
  }
}

void sinvader1b()
{
  for (int i = 0; i < 8; i++)
  {
    lc.setRow(0,i,invader1b[i]);
  }
}

void sinvader2a()
{
  for (int i = 0; i < 8; i++)
  {
    lc.setRow(1,i,invader2a[i]);
  }
}

void sinvader2b()
{
  for (int i = 0; i < 8; i++)
  {
    lc.setRow(1,i,invader2b[i]);
  }
}

void loop()
{
// Put #1 frame on both Display
    sinvader1a();
    delay(delayTime);
    sinvader2a();
    delay(delayTime);


// Put #2 frame on both Display
    sinvader1b();
    delay(delayTime);
    sinvader2b();
    delay(delayTime);

}



TUTORIAL VIDEO



DOWNLOAD

Copy and paste the above code in the Arduino IDE to program your Arduino.

 

Used Libraries:

Download the LedControl library created by Eberhard Fahle here:  https://github.com/wayoda/LedControl/releases

 

Once downloaded, just extract the content of the zip files inside your “arduino/libraries” folder.

1 Comments

nara - Jan 27, 2017

hye. if i want to measure th current of the led matrix, where should i stick the multimeter probe ? please answer. :(

Got Questions? Click here and post them in the Brainy-Bits Forum to get help!

Leave a comment

Comments have to be approved before showing up