LED matrix display - MD_Parola, MD_MAX72xx and MD_MAXPanel

Ok. Not the solution I would have chosen but it will work.

Hola buenos díaspodría alguien ayudarme,al cargar parola me da el siguiente error

MD_Parola does not name a type

version arduino 1.0.5 y arduino uno

Un saludo

I don't mind any other suggestion

@manucomevi - Please upgrade to the latest IDE. I think the new directory structure may be stopping the library from being found.

@ati105 - A different approach is just to discard that character in the sketch code when it is received on the serial port - you check and just don't save it - or you configure the device to not to send it n the first place.

Code 13 is the CR (Carriage Return) and a CR LF (Line Feed) denoted the end of text lines. CR is also written as '\r' in C/C++. Changing the font file will work but has excluded that character from ever being displayed by any other sketch.

Marco_c thank you so much for these awesome libraries and taking so much time to document and support them!

From this thread I was able to get it up and running on my mega with generic modules after updating the md_max header and using:

#define MAX_DEVICES 6
#define CLK_PIN     52
#define DATA_PIN    51
#define CS_PIN      45

however, I wasn't able to string more than 6 together without inserting additional power but for my first project I only need 6 anyway :slight_smile:

One issue I have observed is after about 15 minutes or so of running the Parola_Animate_Catalog example, artifacts would appear and certain pixels would remain lit until I hit the reset button which made them go away. I have the latest downloads and arduino ide. Images attached - after 15 mins or so IMG_6396 (notice the F and vertical bars far right) and after a reset IMG_1309. Any thoughts?

Also, because I wanted to control this over wifi, I started trying to get it running on a nodemcu. At first it wouldn't compile, I received the following error:

/Arduino/libraries/MD_MAX72xx/src/MD_MAX72xx.h:288:33: error: section attribute not allowed for 'MD_MAX72XX::fontType_t'
  typedef const PROGMEM uint8_t  fontType_t;

Commenting out the progmem parameter allowed it to compile. Here are the pin setup I am using:

#define MAX_DEVICES 2
#define CLK_PIN     14
#define DATA_PIN    13
#define CS_PIN      15

Again, thank you so much for your great work. Please let me know if you have any suggestions for the artifact issue on the mega and if you have any questions regarding the nodemcu.

Hi marco_c

This is really awesome. Thanks for all the documentation and the support.

I was wondering if I could use the following cascaded into a 10 matrix display:

http://www.ebay.com/itm/1pcs-Red-MAX7219-LED-Dot-Matrix-Arduino-Microcontroller-Display-Module-Control-/271889207600?hash=item3f4ddc1130:g:z44AAOSwZd1Vblph

Do you think it would be possible to connect the input/output via jumpers for this module?

Your response will be highly appreciated.

Thanks.

One issue I have observed is after about 15 minutes or so of running the Parola_Animate_Catalog example, artifacts would appear and certain pixels would remain lit until I hit the reset button which made them go away.

My best guess is that if your limit with no external power is 6 then you may be getting power supply issues. Does it work better with 4 or 5 and/or have you tried additional power?

I don't have any experience with nodemcu. I am surprised if PROGMEM does not work, but without knowing much about it I don't even want to guess.

@shah123: Those seem to be new modules - I noticed them on eBay the other day. What I can't see with these modules is the electrolytic capacitor that helps to smooth out the power supply for each module. It may be on the other side, but I don't see any through holes for it.

Without the additional capacitance, there could be problems when there are a few modules together (10 would seem like it may cause an issue). You could add the additional capacitors, of course.

Connections should be ok - it is the same way that the FC-16 modules connect to each other.

Someone else may want to comment if they have used these modules.

marco_c:
My best guess is that if your limit with no external power is 6 then you may be getting power supply issues. Does it work better with 4 or 5 and/or have you tried additional power?

I don't have any experience with nodemcu. I am surprised if PROGMEM does not work, but without knowing much about it I don't even want to guess.

Marco - thanks for the suggestion - I haven't gone back to the mega since getting it up and running on the nodemcu which ironically does not have the same issues while either connected via usb or directly to vin. Will have to go back and test when I get more free time.

As for the nodemcu there was one additional error that I had to encounter and that was the definition of CLOSING in the animation header that conflicted with the esp8622wifi library. I omitted that in the header file and avoided the closing animation and all works perfectly. It is now hooked up to MQTT with a message queue where I can add, update, delete messages all with individual animations and properties controlled remotely via wifi and text.

The code is lengthy and unoptimized ATM and it is only with 6 displays but it is a prototype to build a much larger scrolling display. I will try to share the code once it is cleaned up and happy to share some insights/learning experiences with anyone interested in the interim.

Thanks again for such great and well documented libraries - it made it very easy!

1 Like

marco_c:
You use one of the tools provided or you can do your own.

There is a Microsoft Excel spreadsheet with a macro that provides a graphical interface to turn dots on and off. It will then produce the text for the font definition that you can cut and paste. The first worksheet of the workbook has instructions.

These tools are in the FontBuilder folder of MD_MAX72xx and also described in the latest html documentation. You may need to download version 2.8 from the site to get the latest tools.

Thanxx... marco_c now I can build some coustom Chars...using d font builder..
Video here:- https://www.youtube.com/watch?v=7FCfc45WLyY
I got a code from here:- Trick for 16-rows display using Parola :) - Exhibition / Gallery - Arduino Forum
cos am a very beginner I edited the Font data.h and could some how manage
to animate some custom characters... it was a two row code... having zone 0 n zone 1
can u help me to remove d zone n create a neat code having no zones cos I only have 5 dot matrix displays.. Have attached d edited code below

Thanxx in advance

ass_fonts_demo.ino (2.49 KB)

Font_Data.h (6.98 KB)

1 Like

Not sure why you started from that code. There are a number of examples with the Parola library that you can use. For example, the one with Japanese and Arabic characters.

Sorry but I do not have time to edit other people's code.

marco_c:
My best guess is that if your limit with no external power is 6 then you may be getting power supply issues. Does it work better with 4 or 5 and/or have you tried additional power?

I don't have any experience with nodemcu. I am surprised if PROGMEM does not work, but without knowing much about it I don't even want to guess.

So after some time using the nodemcu artifacts do come up too - same issue. I have tried with a few less and I have also tried inserting direct power both at the start and the middle as well as powering half from the nodemcu and half with direct power and in all cases it is about 10-15 minutes of continuous scrolling then artifacts appear and require a reset to unstick the pixels.

I've tried everything I can think of (or know of and that isn't much) to get isolated power to them. I don't know if it is the hardware or not but I plan on building a bigger one so I have ordered the parola kits from electrodragon and will try luck with them.

Will come back on any changes or the next go around.

I made some pleasing custom shapes, two hearts and two cats. I'll just leave them here in expanded binary form so they're easier to tweak if you like.

uint8_t heart1[] = {9,
 0b00001110,
 0b00011111,
 0b00111111,
 0b01111111,
 0b11111110,
 0b01111111,
 0b00111111,
 0b00011111,
 0b00001110
};

uint8_t heart2[] = {7,
 0b00001110,
 0b00011111,
 0b00111111,
 0b01111110,
 0b00111111,
 0b00011111,
 0b00001110
};

uint8_t cat1[] = { 11,
  0b00001110,
  0b11011011,
  0b10110110,
  0b00111010,
  0b11111111,
  0b00111000,
  0b01111000,
  0b10111000,
  0b11111000,
  0b00001101,
  0b00000110
};

uint8_t cat2[] = { 9,
  0b00011111,
  0b01111110,
  0b11100100,
  0b11111100,
  0b10111100,
  0b11111100,
  0b11100100,
  0b01111110,
  0b00011111
};
1 Like

I downloaded Max72XX LED Matrix Display Library v2.8.

I am trying to get example MD_MAX72xx_Test to work with the Digispark TINY85 and an 8x8 Generic MAX7219 Module.
I edited MD_MAX72xx.h as follows:
#define USE_PAROLA_HW 0
#define USE_GENERIC_HW 1

and the pinout in MD_MAX72xx_Test:
#define CLK_PIN 2 // DataIn
#define DATA_PIN 1 // CLK
#define CS_PIN 0 // LOAD/CS

When I try to verify the sketch, it exits with many "'xxxx' was not declared in this scope" errors, where xxxx includes 'SS', 'MOSI', 'SCK' ... 'SPIF'.

I tried editing MD_MAX72xx.h :
#define USE_LIBRARY_SPI 0

but that doesn't make any difference.

It looks like there's a #include instruction missing, but what??

where xxxx includes 'SS', 'MOSI', 'SCK' ... 'SPIF'.

None of these are in the library so I am not sure what went wrong.

Asking some obvious questions:

Have you selected the right hardware type in the IDE?

Did you try changing the class/object declaration for MD_Parola to be the non-hardware SPI version?

marco_c:
None of these are in the library so I am not sure what went wrong.

Asking some obvious questions:

Have you selected the right hardware type in the IDE?

Did you try changing the class/object declaration for MD_Parola to be the non-hardware SPI version?

Thank for your quick reply.

Yes, the IDE seems fine. It uploads the example program to the Digispark TINY85, which flashes an on-board LED.

I searched for 'MD_Parola' in all project files and found nothing, so I am confused by your question - probably because I have barged into the first thread I could find which sounded vaguely relevant.

Sorry, I can't find a way to search sub-forums or specific topics??

Should we move my query to a new thread in a more appropriate sub-forum?

I am confused by your question

At the top of each example sketch there is a declaration for the Parola object that allows for a hardware based SPI or a software based SPI. If you are not using the hardware SPI (that depends on your pins, and I don't know the Digispark at all) then you need to comment out the hardware definition and uncomment the software definition. This may or may not help.

Do you have another Arduino (Uno, Nano, etc) that you can try to use? If that works ok, then it would verify that the problem is Digispark specific and not something in your setup.

Should we move my query to a new thread in a more appropriate sub-forum

Probably. Is there a Digispark forum? Otherwise the programming forum is probably better.

@Marco_C - I finally received my Parola kits from Electrodragon and assembled them - I am very impressed with the ease of building and how well they fit together.

One issue that I have run into now that I have more boards is how to do a Top and Bottom display. I saw the methods in the examples using zones but with nodemcu it fails because of the while check on the zone status in the main loop - Watch Dog Timer (WDT) resets - blocking code.

while (!P.getZoneStatus(ZONE_LOWER) || !P.getZoneStatus(ZONE_UPPER))

Is there a way to rewrite the loop to be non-blocking while waiting for zones? For non-zone I simply do

if(P.displayAnimate())

Any thoughts or ideas?

Thx!

You can always invert the logic of any boolean expression by negating the operands and changing OR to AND. So

  while (!P.getZoneStatus(ZONE_LOWER) || !P.getZoneStatus(ZONE_UPPER))

becomes

  while (P.getZoneStatus(ZONE_LOWER) && P.getZoneStatus(ZONE_UPPER))

Clearly, what goes in the while loop also changes. In your case it probably changes to an if statement, as per your second example.

The main thing is that you need to wait for both zones to complete animating. They may or may not finish at the same time. How you do that is entirely what suits your application.

Are the 8x8 LED matrices the row anode-column cathode type or the row cathode-column anode types?