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: http://www.gearbest.com/development-boards/pp_65373.html 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.
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.
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 () {
myMatrix.Init(Red_Pin,Green_Pin,CLK_Pin,RowA_Pin,RowB_Pin,RowC_Pin,RowD_Pin,OE_Pin,STB_Pin);
myMatrix.fillRectangle(0,0,31,4,red);
myMatrix.fillRectangle(0,5,31,10,green);
myMatrix.fillRectangle(0,11,31,15,yellow);
}
void loop(){
}
This example has the result from second image of this step.
#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 (){
myMatrix.Init(Red_Pin,Green_Pin,CLK_Pin,RowA_Pin,RowB_Pin,RowC_Pin,RowD_Pin,OE_Pin,STB_Pin);
}
void loop(){
myMatrix.clearScreen();
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);
myMatrix.clearScreen();
myMatrix.drawHLine(0,31,7,green);
myMatrix.drawHLine(0,31,15,green);
myMatrix.drawVLine(0,0,15,yellow);
myMatrix.drawVLine(31,0,15,yellow);
myMatrix.printString(5,8,yellow,black,"Demo");
myMatrix.hScroll(0,red,black,scrolltext_1);
myMatrix.hScroll(0,black,green,scrolltext_1);
myMatrix.hScroll(0,red,black,scrolltext_2);
myMatrix.hScroll(0,red,black,scrolltext_3);
myMatrix.hScroll(0,red,black,scrolltext_4);
}
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: http://openhardware.ro/mymatrix
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 http://opensource.org/licenses/MIT nice explained here http://choosealicense.com/
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.