Introduction: 32x16 LED Matrix Panel and Arduino

Picture of 32x16 LED Matrix Panel and Arduino

The Story of Project

In short, this project is the result of a challenge. One day, a friend who was visiting me, saw my experiments with some led matrix and ask me if I can control many of these. I answered "yes certainly", using auxiliary integrated circuits can be controlled a large number of LEDs.

I started doing research and after I saw many projects I have concluded I need a ready-made panel and start my experiments from there. Also I wanted to skip monochrome panels and try with multicolor LEDs.

I observed that RGB panels are a little more expensive than dual color panels (the price difference is noticed especially when you plan to buy many).

So I decided to start with this panel: which I think would best fit my future plans.

Priced at $ 13.91 is the best price that I could find (at the time I made the order).

I must say that this panel is why I "landed" at this store in the first place. Meanwhile I made several orders (from "Development Board" section)... and I will return with other articles if I manage to do interesting things with them.

Step 1: Components

Picture of Components

The panel came as a kit. I guess that panel is used to make large displays available as finished product at some specialized vendors/manufacturers.

However, this panel assembly requires soldering of many SMD components. This requires careful planning of the sequence in which components will be soldered.

In the next steps I will show sequence that worked for me.

Step 2: PCB

Picture of PCB

PCB is very well done, the markings are visible and useful. Identifying the place for each component is easy.

The most important thing is to finish with SMD components before proceeding with thru-hole components.
Also it is necessary to mount bolts and nuts before soldering LED matrix.

Step 3: Soldering SMD Components

Picture of Soldering SMD Components

I soldered components in the following order:

  1. SMD Capacitors
  2. 74HC138
  3. 4953
  4. 74HC595

Step 4: Soldering Thru-hole Components

Picture of Soldering Thru-hole Components

Not much to say at this step

Step 5: LED Matrix

Picture of LED Matrix

Do not forget to double check orientation of LED matrix before soldering. There are two positions posible and only one is correct.

Note: I change bolts with others longer and put spacers for safety.

Step 6: Data Connector

Picture of Data Connector

A, B, C, D - row select with 74HC138

OE - 74HC595 Ouput Enable(Active Low)

STB - 74HC595 Strobe / Data Latch

CLK - 74HC595 Clock Input

R - data input for 74HC595 (RED section / 4*74HC595)

G - data input for 74HC595 (GREEN section / 4*74HC595)

Step 7: Arduino Library and Demo Code

Picture of Arduino Library and Demo Code

I had to write this Arduino library from scratch because I have not found anything compatible with this panel.

I found souces / libraries for monochrome panels and for RGB panels but nothing to fit exactly this type of panel.

So I give up searching and start coding :) I named the library myMATRIX (sorry for the lack of inspiration).

After installing the library you can run the example myMATRIX_Demo.

This library should work with any ATmega - based Arduino boards. I tested with: Arduino Mega 2560, ATmega32, ATmega1284, ATmega8. It does not depend on other libraries and use timer2 for refreshing purpose.

Here is an example of using the library:

#include "myMATRIX.h"
#define RowAPin 2
#define RowBPin 3
#define RowCPin 4
#define RowDPin 5 
#define OE_Pin 6  
#define RedPin 7  
#define Green_pin 8  
#define CLK_Pin 9  
#define STB_Pin 10 

void setup () {

void loop(){

This example has the result from second image of this step.

Step 8: Another Example

#include "myMATRIX.h"
#define RowA_Pin 2
#define RowB_Pin 3
#define RowC_Pin 4
#define RowD_Pin 5 
#define OE_Pin 6  
#define Red_Pin 7  
#define Green_Pin 8  
#define CLK_Pin 9  
#define STB_Pin 10 

void setup (){

void loop(){
 char scrolltext_1[]="     * <a href="http://www.OpenHardware.Ro" rel="nofollow"> www.OpenHardware.Ro </a> *      ";
 char scrolltext_2[]="     * Numbers * 1234567890      ";
 char scrolltext_3[]="     * Capital Letters * ABCDEFGHIJKLMNOPQRSTUVXYZ      ";
 char scrolltext_4[]="     * Small Letters * abcdefghijklmnopqrstuvxyz      ";
 myMatrix.fillRectangle(0,0,31,15,red); delay(1000);
 myMatrix.fillRectangle(0,0,31,15,green); delay(1000);
 myMatrix.fillRectangle(0,0,31,15,yellow); delay(1000);
 myMatrix.drawRectangle(0,0,31,15,red); delay(1000);
 myMatrix.fillRectangle(10,3,21,12,green); delay(1000); 

Step 9: More About MyMatrix Library

Picture of More About MyMatrix Library

myMatrix library is very simple but has the advantage of being lightweight and easy to use.

All pins can be configured by the user.

Were implemented only basic functions :

void Init(uint8_t pinRed, uint8_t pinGreen, uint8_t pinClock, 
                 uint8_t pinRowA, uint8_t pinRowB, uint8_t pinRowC, uint8_t pinRowD,
                 uint8_t pinOE, uint8_t pinSTB);
void setPixel(uint8_t x ,uint8_t y, uint8_t color);
void fillRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint8_t color);
void drawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint8_t color);
void clearScreen();
void printChar(uint8_t x,uint8_t y, uint8_t For_color, uint8_t Bk_color, char ch);
void printString(uint8_t x, uint8_t y, uint8_t For_color, uint8_t Bk_color,char *p);
void drawVLine(uint16_t x, uint16_t y1, uint16_t y2, uint8_t color);
void drawHLine(uint16_t x1, uint16_t x2, uint16_t y, uint8_t color);
void hScroll(uint8_t y, uint8_t For_color, uint8_t Bk_color,char *p);

This library is still in early stage. It will be maintained here:

No need to check there to see if any updates. I'll post here by a comment any major change.

myMatrix library is released under the MIT license nice explained here

There are plans in the future to update the library to support multiple panels (as I will have those panels).

I will also try other types of panels available on the market (same as above).

Thanks for reading!


I attached here (at this step) version 1.1. Solve the compiling (in fact linking) problem in newer version of Arduino.


UmeshW3 (author)2017-12-11

can anyone share schematic and gerber files of PCB.

dancopy (author)2017-08-12

Silvius! Souvenirs!
Did not you make any more code for this Display? I would like to do a clock + scrolling text but I am not aware enough.
I would also like to find this module already mounted (soldier);
Thank you

Silvius (author)dancopy2017-08-12

Right now I can't start to work at this task. In a few hours I leave for 10 days on vacation. So... when I come back I will talk about it. I think it can be done with the library as it is.

Keep in touch!

kemo (author)2017-05-02

Ellw sir we are making a project on a rgb matrix display .We r using 32*16 rgb pannel we are using 5 rgb we did coding n all by we r facing a problem in a scrolling of text when we connect five rgb together same text is displaying on five rgb we want to scroll the text which is not happening ...Xo sir can u help us ....

pvchaos (author)kemo2017-05-02

Why dont you use the rgb library from Adafruit?

Silvius (author)pvchaos2017-05-03

Yes, this RGY panels are not similar with RGB panels, so I can't help in this matter, even though I like the idea... (I do not have such a panel)

The good news is that there is much more documentation/code/libraries for these panels. The suggestion made by pvchaos is a good starting point.

pvchaos (author)2017-05-01

Hi silvius its me again, in Tomas Kovacik library do you know how to write the sintaxis to write a CHAR or STRING with a different type of font?

Example: myMatrix.printChar(5,8,yellow,black,"Demo", how to select a library);

because I try different posiblities but I still can not compile.

Silvius (author)pvchaos2017-05-03

It seems that is like printString from my library only with an integer parameter uint8_t font added at the end.

So it should work like this:

myMatrix.printString(5,8,yellow,black,"Demo", 1); // for font 1

last parameter can be 0,1,2,3 and 4

I saw in the code that only 0....4 are valid values...

Please note that some added fonts are not complete ...

pvchaos (author)2017-03-31

Hi SIlvius, how can I use the other fonts? set on the folder of myMATRIX library?

Silvius (author)pvchaos2017-04-02

no... original library does not have implemented this capability... my plan is to be developed in the future ...
until then... you can try this:
is based on my library, but is not my project... I notice that other fonts are not completed... ready only the parts that the author needed...some digits, some letters...

pvchaos (author)Silvius2017-04-02

can you give me a tip, about how understand how to control this matrix, i have problems to understand the use of the 74hc138, and 74hc595, because I want to have diferent fonts and have total control of this matrix, and if its posible try to connect more matrix

Silvius (author)pvchaos2017-04-03

you can read also the article and comments here:

the library modified by Thomas Kovacik is made for 3 displays...

there are comments in the code... I tried to made the code easy to read and easy to understand...

you must to work hard :) ... if you want to have total control of this matrix... this project is just a starting point...

intotherain made it! (author)2017-01-21

i got error at sample library

Silvius (author)intotherain2017-01-22

I have no idea. On my Arduino IDE work fine... And I have made many updates to the IDE and core. I started myMatrix since Arduino was 1.5 or less.

I think the only "starting point" is to reinstall/update library or even Arduino IDE...

Now, my setup is IDE 1.6.8 with AVR boards 1.6.17 ... and Linux ... as you can see:

intotherain (author)Silvius2017-01-25

ive reinstall arduino ide but still have error at compiling the example of myMatrix library

Silvius (author)intotherain2017-01-26

Try to disable optimisation for t_shiftOut in myMATRIXclass.h and myMATRIXclass.cpp:

void __attribute__((optimize(“O0”))) t_shiftOut(uint8_t dataRed,uint8_t dataGreen);
intotherain (author)Silvius2017-01-28

please how exactly should those files look at the end, cause i have:


void myMATRIX::t_shiftOut(uint8_t dataRed,uint8_t dataGreen);

and in myMATRIXclass.cpp

void myMATRIX::t_shiftOut(uint8_t dataRed,uint8_t dataGreen)

Silvius (author)intotherain2017-01-29

Look at step 9. I put an updated version of myMatrix there...


intotherain (author)Silvius2017-01-29

Thanks for the prompt response, now it compiles :-)

raahmajayagrs (author)2016-05-02

can i use arduino DMD library for this led matrix?

Silvius (author)raahmajayagrs2016-05-02

no... I search about DMD library after reading your comment, and I noticed that those library is for monochrome panels... this panel is dual color. DMD library use SPI hardware to output ONE color signal ... in my library I was "forced" to bit-bang some sort of SPI to output TWO color signal at the same time ( like a "DUAL" SPI )

raahmajayagrs (author)Silvius2016-05-02

how about p10(rg)modul.?

Silvius (author)raahmajayagrs2016-05-03

what about p10(rg)module..? ... I don't understand what is the question... if it work with DND library or if work with myMatrix library... so I will try to answer both: If this panel P10(rg) is a RED - GREEN panel:

1) I don't think will work with DND library because it's monochrome library

2) I think will work with myMatrix library but this is only an estimate...

So I think it would be good to be able to do some tests before buying something...
raahmajayagrs (author)Silvius2016-05-02

I want to make my own pcb & need matrix schematic. :)

SimonC92 (author)2016-04-22

Thanks for the code, how would I expand this so that it displays on a 16 x 64? Thanks :)

Silvius (author)SimonC922016-04-23 should be easy… only have to increase the buffer size and adapt coordinates values… but I not have two modules(or more …yet) to test in real conditions…

Look at my answer (for ak007) below. Someone already did it...

SimonC92 (author)Silvius2016-04-23

I have tried using the code but cannot work out what I have got to change. Where are the coordinate values?

SimonC92 (author)Silvius2016-04-23

Thanks for the reply, do I just use his code with your myMATRIX_Demo.pde file? Thanks! (sorry I'm a bit new to this)

Silvius (author)SimonC922016-04-23

not quite... there are some differences in printString and printChar because in this
library he wanted to use several fonts (only numbers are defined in
these additional fonts) ... so ... try them and modify and change them... look at the

and you will figure out...

ak007 (author)2016-02-16

Hi Silvius!, Very good job getting these modules working with Arduino. I am also working with similar project i have 6 16X16 displays cascaded. Your code works on these out of the box but on two displays only(repeated on rest of 2 pairs). Is there a way we can extend this code to drive 96X16 led matrix.

Thanks and regards,


Silvius (author)ak0072016-02-16


is a variant made by Tomas Kovacik based on my library. It's for 96x16 (exactly what do you need). But example included in library not working with this variant... there are some differences in printString and printChar because in this library he wanted to use several fonts (only numbers are defined in these additional fonts).

For my part... I want to decide in some day to order several panels... and make this library to be configurable (as I intended from the beginning)... and work with other microcontrollers like STM32 and Atmel SAM3X (like Arduino Due).

also you can take a look here: there are some comments which you could use in your research...

Regards! :)

NewcastleDavey (author)2016-01-29

Hi Silvius! Firstly, excellent work & well done on this project! You've actually compelled me to create an account so I can thank you for the information you've provided. I've been imagining an LED project myself over the last few months but, as a newbie, I've been finding it difficult to make much progress beyond one or two 8x8 matrices on breadboards. I was delighted to stumble across your project and bought three of those units from Gearbest for a large display for home. I've soldered up one so far but sadly, my inexperience led me to damage the 2nd one I have so I was sad to learn they seem now to be completely sold out with no sign of new stock. The slightly different version that dancopy bought (below) is available so I was wondering if there was any feedback on whether or not one of these chained with the Gearbest version you feature here, and using your software, would be compatible? Tempted to order one and see how it goes.

Thanks again & best wishes - Dave

Silvius (author)NewcastleDavey2016-01-29

Thank you very much for your appreciation. This kind of feedback make me to continue my work here... :)

I've noticed that Gearbest no longer have these panels... And I don't have a feedback from dancopy (other than these comments here). But I talk with others that already have some variations of panels(purchased assembled) and I can confirm that it works. Some discussions are here on instructables some there: and others in some private messages...

Also I plan to buy from somewhere more panels and to extend and upgrade myMatrix library...

Best wishes to you also...

Keep in touch

NewcastleDavey (author)Silvius2016-01-29

Hi Silvius,

You're welcome & thanks so much for the info - I guess if the software works then the general design of the board (and how it works) must be the same, albeit with some component differences (and a bit more soldering it looks like!). It's possible they might display at a slightly different brightness (?) but I think I'll need to order it & built it to find out! I'll let you know how I get on.



Silvius (author)NewcastleDavey2016-01-29

"they might display at a slightly different brightness" ... I'm pretty sure that it is.

Gearbest version use IC 4953 (probable KDS4953 ... dual power mosfet)... other versions use discrete transistors and have been reported to display different brightness in same panel... I'm not sure if that was the reason. So take care...

Anyway I learned that these panels are made to work with some specialized controllers based on more powerful cpu's or mcu's or even fpga's.

And all comply with a de facto standard named HUBxx ... HUB08, HUB75, HUB12... and more... You can look here to see what it is about: (was the second link on google -> HUB08)

Have fun!

NewcastleDavey (author)Silvius2016-01-31

Hi, thanks for the info (a lot to take in but I'm going through the link) and I get what you're saying in that the boards use different components. I can only build it & see but it was advertised to work with Arduino. If there's a brightness difference in the panel I might have to live with it, or get two more so I use three panels the same. I've got more flux pens now so I'm ready to build it whenever it arrives & see what it looks like :) For clarity, this was the specific link I bought from:

On a separate topic, thought you might be interested to know I dabbled with some animation yesterday and put this 4 frame animation together:

Very much a manual process (lots and lots of setPixel & drawHLine commands!) but it was fun to do!



Silvius (author)NewcastleDavey2016-02-01

:) Yes! I like what you managed to do... with little capabilities of the library.

So.. best regards, and see you again!

PraqashM (author)2016-01-26

I am doing this project in grenn colorboard i.e monovhrome board bit i can't find any library for it..i only found for RGB . So can you please help :(
Its urgent. I've to complete my project anyhow.

Silvius (author)PraqashM2016-01-26

Look here:

I think that is what you need... Have fun!

dancopy (author)2015-09-01

Hi Silvius! Sorry to bother you again!
I bought this module:

In this module, as you can see, besides the "GND" pins, there are 2 pins "VCC" and 2 named contacts "+5v and GND"; These pins need not be connected?
I made the connections as you mention in your tutorial but does not work properly;
Light some lights "ghosts" and nothing more - I do not know what's going on;
If you have any tips, I'll be very grateful;
Once again, thank you

rowanbradley (author)dancopy2015-11-20

I bought three of these module kits because I need to make a 16 x 96 display panel. They arrived the other day, with absolutely zero documentation. I think I can assemble them successfully, but please can you explain the pin-out on the In and Out connectors, and the waveforms that I have to use to drive the panels? Are these panels daisy chainable? I.e. can I just connect three of them together using the ribbon cables supplied, and then drive the first one? These are to display the contents of some memory on my existing system as a diagnostic aid, so I need to develop my own software to drive them, and I can't do this without understanding the design of the modules. Is there a schematic available somewhere?

Thanks - Rowan

Silvius (author)rowanbradley2015-11-22

"Are these panels daisy chainable?" - Yes

You can just connect three of them together using the ribbon cables supplied, and then drive the first one ... :)

Someone made a library for three modules: (based on my library)

I think you can easily "extract" schematic from PCB and studying code to see how multiplexing is done. I do not think that there is a schematic of this module anywhere in internet... (I think I will make shematic in gEDA as a challenge/ exercise)

About waveforms to drive modules: "In this library serial communication is bit-banged emulating a SPI with dual data stream (Red and Green) ...and one clock)"

You can read also some comments from here:

Have fun! :)

Silvius (author)dancopy2015-09-01

one GND from Data connector must be wired to GND from Arduino / Atmega
LED Matrix module must be powered separately with 5V - GND connector that you mention. This module need about 0.5~1.5A ... so 5V-2A power source should be ok...

dancopy (author)2015-09-03

Thank Silvius!
You say that the LED Matrix Module must be powered separately;
I have an ADAPTER like this:
So how do I do? I have to use two of this, one for the Arduino and one for the module? Do you think this way will work?
Again, I am very grateful;

Silvius (author)dancopy2015-09-04

Ok. I returned from a 4 day trip... and now I can study images from links you posted...

At first, your LED module from e-bay is slightly different from the module presented in instructable; At first glance should work... same connectors ... same pinout. You must use IN connector from your board (= D-IN connector on my board)

Second, LED module must be powered with 5V~2A.

It depends on what kind of Arduino board you use, you can power (or not) from same power supply.

If you use a standard board (Uno, Mega,... so on) you must use a power supply suitable for these boards...(or power them from USB connector) and LEDs from 5V/2A source.

If you use a stand-alone, custom Arduino compatible microcontroller/board, you can power microcontroller from same 5V source as for LED module... (also it depents on board configuration...)

About adapter from aliexpress link: If indeed characteristics are correctly marked, It should work ok...

guillerlt (author)2015-07-28

Does this panel work with Arduino UNO R3?

I do not know how I should connect the matrix with the Arduino

Silvius (author)guillerlt2015-07-28

It should go smoothly. I tested with Arduino Mega 2560, ATmega32, ATmega1284, ATmega8.

You have the freedom to choose which pins you want. Only needs to be defined like this:

#define RowAPin 2 // this is Arduino digital pin 2
#define RowBPin 3 // this is Arduino digital pin 3
#define RowCPin 4 //......
#define RowDPin 5 //......
#define OE_Pin 6
#define RedPin 7
#define Green_pin 8
#define CLK_Pin 9
#define STB_Pin 10

So you can make any configuration you want. Then you must initialize the library in setup() section:


in Step 6 is detailed data connector.

guillerlt (author)Silvius2015-07-28

Thank you so much <3

dancopy (author)2015-07-08

Thank you for answering Silvius.
I have the same panel as the PetriJ (64x16 but only red).
I can adapt your code for my panel? - As in the case of Step 8, I would exclude [#define Green_Pin 8]; in 'void setup' would come out [Green_Pin]; and also exclude [myMatrix.hScroll (0, black, green, scrolltext_1); ] Would be this or am I wrong?
Remembering: My panel is only red
Sorry, for I am well beginner Silvius
Again, my thanks

Silvius (author)dancopy2015-07-09

Sorry... It will not work in this way ... the library is built for two colors panels (32x16)... the library can be modified for other panels... but I think is beyond capabilities of a beginner... (There are two buffers internaly, for red and for green; and scan function need to output 2 signals...)

Good news is that exist more libraries and code available for monochrome led panels (comparing with RGY)

In fact is more easy to code for monochrome led displays... (you do not need to output Red and Green signal same time). You can use SPI hardware for output color signal...

When I started working at this library I bumped a couple of libraries like this:

You can search more...

About This Instructable




More by Silvius:Reading 15 Rotary Encoders with Arduino and ATmega1284Open Source TV Box - GeekBoxAVR Transistor Tester
Add instructable to: