LED matrix display - MD_Parola, MD_MAX72xx and MD_MAXPanel

marco_c:
Yes to all that. You will need to create some sort of message with commands that you can interpret to do what you want.

Will you please guide me?

The methods for changing speed, direction, etc are all explained in the library documentation and used in many of the library examples - where a switch is pressed and the software changes something like the speed - so this should be clear.

In order to replace a physical interface (like a switch) with a software command through the serial interface you need to define what you need to send in order to make the software do what you want. This could be as simple or as complex as you want it to be. Again, there are many examples on how others have done this, especially if you search for Bluetooth interfaces.

A serial connection and a Bluetooth connection are essentially the same, as both look like a serial port from the Arduino code. Focus on using the Serial Monitor to develop and debug the code, which reduces the complexity, and then add the Bluetooth serial interface later.

EDIT: This may give you some clues: Turning a LED on and off with an Arduino, Bluetooth and Android. Part II: 2 way control | Martyn Currey

1 Like

marco_c:
Actually, you can already do the reversed text using the library :slight_smile:

Very cool, haven´t seen that option ! Thank you very much !

Hi Marco and thank you for this wonderfull librairy.

I was wondering if it possible to have a moving animated alien (as a character ie) in a scroll text ?

I've tried with custom caracters, but it seems not possible to have an animated char this way...

My second idea was to try to re use the part of the DAFTPUNL sample from MD_MAX72XX library...
But nothing appears on the screen.
I guess that the trouble occurs in the initailisation of the matrix...
I removed MD_MAX72XX mx = MD_MAX72XX(CS_PIN, MAX_DEVICES); and keep MD_Parola P = MD_Parola(CS_PIN, MAX_DEVICES);

And instead of mx references, i put P references :
mx.begin(); -->P.begin();

mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::OFF); -->P.control...
mx.clear(); --> P.clear();
for (uint8_t i=0; i<dataSize; i++)
{
mx.setColumn(idx-dataSize+i, iType ? invader1 : invader2*); --> P.setColumn...*
mx.setColumn(idx+dataSize-i-1, iType ? invader1 : invader2*); --> P.setColumn...*
* }*
But it seems that it is not that simple...
Any help would be appreciate.
Yours.

But it seems that it is not that simple...

You are right.

MD_Parola is designed to handle text animation. It therefore takes control of the animation and makes it easy for the user by doing all the work. This also means that it has to prevent the user form interfering as it needs to know exactly where everything is at any time. It deals in text and characters and there no concept of rows or columns. So here you can define a space invader as a custom character and it will be moved across the screen for you.

MD_MAX72xx is designed to run the hardware and rows/columns is what it deals in. Even the fonts are just treated like columns of data. This allows total flexibility for the user but the library does nothing for you - you are in total control of the hardware.

Moving animations need to have different bitmaps for each frame of the animation. So, if you want to animate a space invader (like the Daft Punk example), then MD_MAX72xx library is where it needs to be done as you have control. MD_Parola is the wrong place for it.

Other forum contributors have told me that they have mixed graphics and text by using different zones (in which case the animation zone is not touched by Parola), but that needs some careful planning and I am not sure how the interactions could interfere with each other (ie, no guarantees or support from me, so you need to troubleshoot this yourself).

Hi Marco,

I'm progressing with my steep learning curve as a complete newbie and would appreciate a little help. I have successfully completed a project to use bluetooth to input text to the matrix using the example Parola_Scrolling as a basis. In addition I can send commands to invert text, change speed, direction etc.

What I am trying to do now is to look at animating text in line with the example Parola_Test through a bluetooth connection. Initially I would look to use the Serial Monitor as the input method. I understand the input needs to be in this format char *pc[] = {"Parola for","Arduino","LED Matrix","Display"}; format with each of the "xxxxx" statements no greater than the maximum size of the display matrix (in my case eight).

My problem is I have no idea how to achieve this. Do you have any examples or pointers that may help me?

Many thanks for your time, help and awesome work.

Cheers

Peter

char *pc[] = {"Parola for","Arduino","LED Matrix","Display"};

This declares an array of pointers to strings, auto sized by the compiler. As the data never changes (effectively a constant) this works fine and the compiler will just allocate some space and initialise the data to the strings I have specified.

However, if you want to change the data, then you need to declare an array of arrays of characters (ie, a two dimensional array)

#define MAX_STRING 30
char pc[4][MAX_STRING+1];

This allocates the space for the char arrays to be a known size (MAX_STRING). I add 1 to the definition so that the '\0' terminator can also fit in and I actually get the number of characters I need.

To access the first string use pc[0], then pc[1], etc, just like in the previous declaration.

Thanks for the information. I'll go away and try to implement it.

Thanks for your answer Marco. I understand the logic.

Maybe in a next version you include a text animation that allowed to flip two words in the scrolling (NEW -- HOT ie).

... then with the custom chars I'll have my invader moving lol !

Hello,

I'm new to Parola and running in some strange addressing problems.

The LED's I'm using are driven by a 7219 Chip on Arduino UNO.
I get all text inverted and it seems that the output is shifted by one pixel.

Beside of this the Letters are mirrored and the "Block's" are like mismatched.

Any idea what can this be?

Regards,
Maverick

You probably don't have the right hardware configured in the MD_MAx72xx library. Please read the documentation that comes with the library describing how to edit the header file foe the type of hardware you are using. There are lots of different types of matrix modules that are wired in different ways to the MAX7219 IC.

You was fast.
Thank You.

Solved.

Regards,
Maverick

hi
any plan on porting this cool library to ESP8266 platform? So it can be used even wirelessly to display live feeds :slight_smile:
thanks

The library should work on the ESP2866. The only difference to make it wireless is to write code to replace the serial link in one of the examples.

I use the EPS8266 in combination with a Arduino Pro Micro to control a scrolling Parola based sign (24 Parola modules). The 8266 displays a web page, sends the results of the page selections via serial to the Arduino that's running the displays.

I probably could have ran it directly from the 8266 and skipped the Arduino, but I was retro fitting the original design that used an RF module via a serial interface to the Arduino. Thus it was easier to just program the 8266 (NodeMcu 1.0) with the same serial protocol as I was using for the original RF module.

Hello,

Many grateful thanks to Marco_c for developing and sharing the Parola library for driving 8 connected 8x8 LED matrix modules, it is very much appreciated.

Although I have implemented the 'switches' for my 8 module matrices line, the resulting display occasionally (more often than not) is missing letters or has some artefacts in them. Example images of the anomalies are attached to this message.

I've successfully implemented the 'HW_' switches in the library header file, as I mention above, and which orientates the letters correctly on the devices I'm using.

However, as can be seen from the attachments, when 8 modules are linked together, the matrices don't reproduce the word(s) or sentence correctly.

I've tried reading through the many postings in this thread but I'm still unable to resolve this problem with my devices. I'm concerned that the modules I've bought, which were sourced through Amazon and came from China may not be the genuine article, so to speak. The dealer is not helpful either.

All help is gratefully received as obviously I'm missing something out in my attempts to make these modules work together correctly.

Many thanks,

M.

Matrix Modules

came from China may not be the genuine article, so to speak. The dealer is not helpful either.

Not sure what the 'genuine article' could be as they are all from China. No surprises about the dealer not being helpful - they have generally got no idea what they are selling.

I have implemented the 'switches' for my 8 module matrices line

Don't know what you mean by this.


A few things you could try:

  1. Verify that you are running the latest version of MD_Parola and MD_MAX72xx. The official distribution is from my code repositories (links in the email signature below). The release has been stable for some time, so I don't think this is a likely issue.

  2. Are you powering all this from the Arduino? Try using an external power supply (make sure that the Arduino and Power Supply GNDs are all connected), to see if this improves things. Also try adding one module at a time and see when the errors start. Mindful of item 3 below, when you get the error try different modules in that position to eliminate the possibility of a faulty unit.

  3. The errors you show always seem to be in the second and third last modules. Move these modules somewhere else in the chain and see if the errors move with the modules. If they do you have faulty modules.

These are the most common causes of problems, so try these fixes first.

Hello,

First of all, I would like to thank you for the great job you made with the LED matrices.
I'm new to to the world of LED matrices. recently, I purchased 10 modules along with the Arduino Mega, and I am using your Parola_Test code.

The one thing I want to do is increasing the scroll speed when using:

P.displayText(pc[curString], Center, P.getSpeed(), PAUSE_TIME, SCROLL_LEFT, SCROLL_LEFT);

The scrolling speed is always the same regardless of the values of Speed and Pause_time (on the other functions like Print, it is working perfect).

Any idea on how to to this?

Regards,
Sami

The Parola_Test uses an external pot to set the speed. If youwant to control your own speed, you need to modify the sketch to remove the pot dependency or add a pot to A5 to control the speed. Look in the doUI() function for the pot speed mapping.

wabbitguy,
Thank you for the reply.
This is how I modified the sketch to remove the pot dependency:
Example: P.displayText(pc[curString], Center, 10, 1000, SCROLL_LEFT, SCROLL_LEFT);
I tried different values, but the speed still always the same.(just when scrolling left).

Thanks!