Arduino Parola software

Parola A to Z – Multi Zone Displays

Parola_Controlled_ZoneA very powerful feature of the Parola library is the ability to separate a display into a number of zones. This allows the implementation of sophisticated animations schemes and is a key part of being able to create double height displays.

This post explains what they are, how they are set up, and how to manage them.

What is a Zone?

A Parola display is a sequence of n 8×8 LED modules, numbered from 0 to n-1. A zone is simply a contiguous subset of these modules that is treated as a ‘virtual’ display and has all the characteristics (font, text effect, text string, speed, etc) required to run the Parola animation. The example below has 9 modules and 3 zones – the green Zone 0, blue Zone 1 and purple Zone 2.


Zones allow for different animations to be running in separate parts of the LED display. This video shows zoned displays in action.

Managing Zones

The creation of zones is determined by the type of begin() method that is called in the user code. Using the method with no parameters creates the default display with just one (default) zone.

However, using the method with the zone parameter prepares the library to manage the number of required zones. If z zones are specified, each one is referenced by a number from 0 to z-1, with zone 0 as the first zone.

The library must also be told which modules belong to which zone. This is done with the setZone() method. Usually this immediately follows begin(), as in the example below,  but it can be done anytime. Zone boundaries can also be changed dynamically during run time.

For the 9 module example display shown in the figure above, the setup code would look like

P.setZone(0, 0, 3);
P.setZone(1, 4, 6);
P.setZone(2, 7, 8);

Animating Zones

Most MD_Parola class methods have variants that operate on the whole display (ie, default single zone) or on a specific zone. An example is displayReset() – without parameters it operates on the whole display; with a zone parameter it is used to reset the specified zone only.

The main difference in managing animations comes in the call to displayAnimate(), usually invoked from the main loop() function. For single zone displays the method returns true when the animation is completed, so the construct shown below will correctly detected the end of the current animation.

if (P.displayAnimate())
 // do something with the parameters for the animation then reset it

However, in multi zone displays, displayAnimate() will return true if one or more of the zones has completed, so an additional step of calling getZoneStatus() for each zone is needed to determine which zones have completed, as in the the code snippet below.

if (P.displayAnimate())
  for (uint8_t i=0; i<MAX_ZONES; i++)
    if (P.getZoneStatus(i))
      // do something with the parameters for the animation then reset it

Or, to wait until all zones have completed before resetting them all, the following code snippet is used.

if (P.displayAnimate())
 boolean bAllDone = true;

 for (uint8_t i=0; i<MAX_ZONES && bAllDone; i++)
   bAllDone = bAllDone && P.getZoneStatus(i);

 if (bAllDone) 
    // do something as all zones have completed

A number of examples in the Parola library illustrate various ways that zones can be used and are a good starting point for your own application code.

5 replies on “Parola A to Z – Multi Zone Displays”

Before I go on a potentially fruitless misson – can you tell me if it is possible to use the Parola library to create a MAX7219 matrix of 4 by 3 displays, in other words, a small screen of 32 LEDs across by 24 down. I’m searching all over the net for anyone else who’s done that but nothing so far.

I’m happy to spend hours puzzling over it, but if you think it can’t be done with Parola, I’ll try to find another way instead. You would save me a lot of frustration. 🙂

The project I’m trying to create is a photo-frame sized screen, with a Conway Game Of Life simulation running. I’m teaching myself to code, and this seems like a good challenge.


MD_Parola is specifically designed for text display and animation so I don’t think this is the right way to go. The MD_Max72xx library on its own is probably a better fit (or LedControl, MaxMatrix, etc) as basically you are just looking to turn pixels on or off. With all the module based libraries you will need to map your 2D coordinates to a module/row/column eventually, so it would not be hard to write something for this from scratch.
I think Adafruit has a library for an ‘m by n’ panel of LED matrix modules, so worth looking there.
Also, I just googled ‘arduino LED matrix “game of life”‘ and got 687,000 hits, (including this one for 32×62 RGB matrix) so there must be something amongst that.
Good luck with the project.


Hi Marco.
Fantastic library but you already know that.
Is any way to use MD_MAX72xx.h library for 7 segments displays instead of using LedControl.h library.
Of course only displaying numbers that can be shifted and using some staff from parola libray.



Technically the library will work. The font definition would simply be one column (8 segments of the LED) and everything else works. Not sure I would use Parola over this though as there is a lot of overhead that would be unnecessary.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s