multiple HCMS-2915 displays

I’ve got one HCMS-2915 (8 character) working like a champ with the LedDisplay library. Has anyone had luck with stringing multiple displays together? I would ideally like to string 5 together to have a 40 character display. I can pull it off with a mega, giving every display it’s own 5 digital pins, but I believe these displays are designed to daisy chain their data to act like larger displays. I’ve tried paralleling all pins except data, then chaining data in to data out, but I haven’t had any luck.

I used two together many years ago for a display of a telescope pointing system. They were only 4 digit systems. The block diagram of how I did it is here:- Basically parallel up the data and the address and have a seprate write for each display.

I can't seem to find the data sheet of exactly what you have I am being led on a web wild goose chase.

Thanks so much for the reply. Here is a link to the date sheet .pdf

According to the data sheet, it seems like all I need to do is parallel all connections except data, then link data out to data in from right to left, and I can write to multiple displays as if they are one long display. The LedDisplay library assumes a bit register of 320, which is the size of an 8 character display. I've altered the source to make it 640 and tried writing to two displays with no luck. (I also doubled the size of the array that holds the bit register data, as well as the displayLength parameter in my program.)

It looks like you paralleled the data, then switched the chipEnable pins if I understand your diagram. That seems like a clever workaround I'm eager to try, but I can't get over that it seems like it should be easy to write as if I have one long display.

Aha! the begin(); function is what was screwing me up. when i called myDisplay1..begin(); everything worked fine. but as soon as i called myDisplay2.begin(); the reset pin was toggled again, and because they're all bussed, it wiped out the first display that I initialized. I called all the functions inside of begin(); explicitly, only calling the reset once, and it's working great.

I'd still love to figure out how to daisy chain, but for now having a workable solution is great.


One question is it possible to display special charaters like ã or ç

if yes who i'm waiting for my display to arrive and i need this ones


The displays can show any character you can create out of the 5x7 bitmap, but you'll have to create your own hex map for the special characters if you want to use the LedDisplay library to display them. (these special characters might be included in the packaged font library, but i doubt it)

Can you help-me who to do that?

Look at the included font library to see how the characters are mapped. Each of the 5 columns that make up each character are represented by a hex word. The hex word when looked at in binary tells you which of the 7 dots in the column are on or off. (one digit of the 8 digit binary word is ignored, but i don't remember if it's the first or last). so each character is made with 5 hex words. if you pick a character from the font library, and write out the 5 hex words in binary, you'll learn exactly how they're mapped out. draw your characters in a 5x7 grid, then translate your binary columns to hex, and you'll have custom maps for your custom characters. this is as far as i can take you.

Ok I found tks for the help. But know i have a new problem if i use only the first 5 characters of the display every thing is ok but if i use the 8 characters the last 3 are garbage.

the display is ok because if i use this program and everything works. but i need to use the library because i don't want rolling text. What is wrong whit the library or what I'm doing wrong.

don’t use print()
it doesn’t work right.

What I use then.

I’m doing like this:

#include <LedDisplay.h>

// Define pins for the LED display.
// You can change these, just re-wire your board:
#define dataPin 6 // connects to the display’s data in
#define registerSelect 7 // the display’s register select pin
#define clockPin 8 // the display’s clock pin
#define enable 9 // the display’s chip enable pin
#define reset 10 // the display’s reset pin
#define displayLength 8 // number of bytes needed to pad the string
// create am instance of the LED display:
LedDisplay myDisplay = LedDisplay(dataPin, registerSelect, clockPin,
enable, reset, displayLength);

int lcdstate = 0; //estado do LCD
long previousMillis = 0;
long interval = 1000;
int brightness = 15; // screen brightness
char door= {’ ‘,‘D’,‘o’,‘o’,‘r’,’ ‘,’ ‘,’ ‘};
char open = {’ ‘,‘O’,‘p’,‘e’,‘n’,’ ‘,’ ‘,’ ‘,};
char apagar={’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ',};
void setup() {

// initialize the display library:

void loop() {
if (millis()- previousMillis > interval) {
previousMillis = millis();
if (lcdstate == 0){
for (int thisPosition = 0; thisPosition < 8; thisPosition++)
lcdstate = 1;
else {
for (int thisPosition = 0; thisPosition < 8; thisPosition++)
lcdstate = 0;


like this work. but i think that is not a good way.

if it works, it's a good way. at least it's better than the other way. i used write also. it's clunky, but i couldn't make print() work.

ok i go use this way

anyone else had any luck daisy chaining these little guys? I have a stack of them ready to put to use, but haven't been able to chain them. I've also wired them as shown in the datasheet and tried to modify the library to no avail.


i banged my head against this for quite some time. i even talked a bit with tom igoe who wrote the ledlibrary. he had the same problems. he advised me to use another method, and i advise you as well. they don't daisy chain as simply as the data sheet suggests. there's some bit of information that they don't provide. just common all the lines with a unique CE pin for each display, and you should be able to do pretty much the same stuff (albeit with clunkier code). que sera.

Thats actually not a terrible compromise. Thanks for the advise. Perhaps I can modify the library for my own needs. Still a shame the print function seems to have been broken. I suspect there’s been an update to the way arduino handles print and it’s not compatible with the display library.

The print() thing is weird. From what I can tell, it's just recursive calls to write(), which should work fine. Apparently there's something funny going on with the way it handles the last call in the chain, though. Hopefully more clever folks than I will crack it. Speaking of, if you get a modification to the library working for multiple displays, please post it in the playground. I tried and failed, but the workaround is not too bad.