I have this sample code:

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#define MAX_DEVICES 4
#define CLK_PIN   11
#define DATA_PIN  12
#define CS_PIN    10


void setup(void) {

void loop(void) {

And this is how it lights up the display:

enter image description here

I presume that the code displays text incorrectly, because the display manufacturer has connected individual 8x8 displays "differently than any library expects" (i.e. in red I have annotated the column addresses for my display, while with green I have annotated what they would have to be for this library to show text correctly).

I have two questions:

  1. Is there any good Arduino graphics library that would allow me to fix from software the addressing issue specific to my display?
  2. Since in the future I plan to make a 16x64 display out of 4 of these, then is there a library capable of doing that as well (i.e. have vertical font size of 12-16 pixels)?
  • No software will work properly when hardware doesn't. Dec 3, 2017 at 20:26
  • @IgnacioVazquez-Abrams I imagine that if there was graphics library that would allow me to render pixels in memory buffer instead of hardware directly, then I could compensate this hardware bug by using LedControl library and calling something like setColumn((7-addr&0x7)+addr&252,value). So is there a library that allows to render pixlels in memory buffer? Dec 3, 2017 at 20:35
  • This may help. It's hard to say if you have bad hardware or a bad library.
    – Nick Gammon
    Jan 3, 2018 at 6:11

1 Answer 1


The issue is minor. It looks like the library was designed for a slightly different matrix display / wiring.

Take a look at the library and it likely maps the input buffer to segment / dot-matrix information. Play with that.

The author did 99% of the work for you. You just need to finish the last 1%.

  • You mean to change the code in library itself? This somewhat puts maintenance burden on me to share a fork of patched Parola library with my code until I get these Parola changes upstreamed and downstream (ie. Arduino Web IDE) picks them up. So I would prefer to use a library that can deal with this issue out of the box, if there is one. Dec 3, 2017 at 21:01
  • 2
    the solution is really simple: swap bit orders. so you just need to write a function that swaps bit 7 <-> bit 0, bit 6 <-> bit 1, bit 5 <-> bit 2, bit 4 <-> bit 3. very easy to do.
    – dannyf
    Dec 4, 2017 at 1:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.