In this tutorial, we will build a scrolling text display using FC-16 LED matrix modules (MAX7219-based), an Arduino, and Visuino.
The project demonstrates how to scroll text of any length across multiple LED matrix displays. The text is not limited by the number of connected modules—you can enter short messages or very long text, and the system automatically calculates the required scrolling length and timing.
In this example, we connect 3 FC-16 modules, each containing four 8×8 LED matrices, creating a wide scrolling display. While additional modules are not required to scroll longer text, adding more matrices increases the display width, resulting in a smoother and more visually appealing scrolling effect.
The tutorial shows how to wire the FC-16 modules in series, configure them in Visuino, and define the scrolling logic so all matrices behave as a single continuous display. No manual text sizing or complex calculations are needed—the scrolling automatically adapts to both the text length and the total display width.
At the end of the tutorial, a dedicated troubleshooting section helps you resolve common issues such as incorrect wiring, reversed module order, mirrored text, or inactive displays.
There is also a “The Logic” step, where everything is explained—how the project works and how to set the number of matrix modules.
This project is ideal for message boards, holiday greetings, information displays, counters, clocks, and decorative LED signage. Because everything is handled visually in Visuino, the project is beginner-friendly while still flexible enough for advanced customizations.
✅ In this tutorial, you will learn how to:
- Connect multiple FC-16 LED matrix modules (MAX7219-based) in series
- Use FC-16 LED matrix modules with Arduino
- Configure 3 FC-16 modules (12 × 8×8 matrices total) in Visuino
- Scroll any length of text across multiple LED matrices
- Automatically adjust scrolling based on text length
- Create a smooth, continuous scrolling message
- Troubleshoot common LED matrix issues
📥 Download the Visuino project file at the bottom
🎥 Watch the Video!
Note: You can easily expand this project by adding more FC-16 modules to create a wider and more visually impressive display.
Step 1: What You Will Need- Arduino UNO (or any other Arduino)
- 3X LED MATRIX. We are going to use the FC-16 modules which has four cascaded 8×8 LED Matrix Displays and a built-in MAX7219 LED Driver for each display.
- Breadboard
- Jumper wires
- Visuino program: Download Visuino
Note: If you plan to use more then 3 LED MATRIX modules consider using an external power supply to power them by using a common ground with Arduino.
Step 2: The Circuit- Connect LED Matrix pin[VCC] to Arduino pin[5V]
- Connect LED Matrix pin[GND] to Arduino pin[GND]
- Connect LED Matrix pin[DIN] to Arduino digital pin[11]
- Connect LED Matrix pin[CS] to Arduino digital pin[10]
- Connect LED Matrix pin[CLK] to Arduino digital pin[13]
Connect LED Matrix1 Left pins to Arduino, Connect LED Matrix2 Left pins to LED Matrix1 Right pins, Connect LED Matrix Left pins to LED Matrix2 right pins
Step 3: Start Visuino, and Select the Arduino UNO Board TypeStart Visuino as shown in the first picture Click on the "Tools" button on the Arduino component (Picture 1) in Visuino When the dialog appears, select "Arduino UNO" as shown on Picture 2
Step 4: In Visuino Add Components- Add "Text Value" component
- Add "Measure Text Length" component
- Add "Multiply Integer By Value" component
- Add "Add Integer Value" component
- Add "Inverse Integer (Change Sign)" component
- Add "Pulse Generator" component
- Add "Up/Down Counter" component
- Add "Integer Multi Source" component
- Add "Maxim LED Display Controller SPI MAX7219/MAX7221" component
- Select "TextValue1" and in the properties window under "Value" set the text that you want to display, example "HELLO WORLD"
- Select "MultiplyByValue1" and in the properties window set "Value" to 6
- Select "AddValue1" and in the properties window set "Value" to 96
- Select "PulseGenerator1" and in the properties window set "Frequency" to 20 or 10 << this will be the scrolling speed, adjust it according to your needs
- Select "UpDownCounter1" and in the properties window set "Initial Value" to 85
- Select "MultiSource1" and in the properties window set "Output Pins" to 3
- Double click on the "LedController1" and in the PixelGroups window drag "2D Graphics" to the left side and set "Mirror Horizontal" to True, "Reverse Horizontal" to True, "Width" to 96, select "Elements" and click on the 3 dots button and in the Elements window drag "Text Field" to the left and in the properties window select "X" and click on the pin icon and select "Integer SinkPin"
- Close All Windows
- Connect TextValue1 pin [Out] to LedController1 > PixelGroups > 2D Graphics1 > Elements > Text Field1 pin [In]
- Connect TextValue1 pin [Out] to TextLength1 pin [In]
- Connect TextLength1 pin [Out] to MultiplyByValue1 pin [In]
- Connect MultiplyByValue1 pin [Out] to AddValue1 pin [In]
- Connect AddValue1 pin [Out] to Inverse1 pin [In]
- Connect Inverse1 pin [Out] to UpDownCounter1 > Min > [ValueIn]
- Connect PulseGenerator1 pin [Out] to UpDownCounter1 pin [DownIn]
- Connect UpDownCounter1 > Min > [ReachedOut] to UpDownCounter1 pin [ResetIn]
- Connect UpDownCounter1 pin [Out] to MultiSource1 pin [In]
- Connect MultiSource1 > OutputPins > Pin [0] to LedController1 > PixelGroups > Elements > Text Field1 pin [XIn]
- Connect MultiSource1 > OutputPins > Pin [1] to LedController1 > PixelGroups > 2D Graphics1 > Elements > Text Field1 pin [ClockIn]
- Connect MultiSource1 > OutputPins > Pin [2] to LedController1 pin [ClockIn]
- Connect LedController1 pin [Out] to Arduino > SPIChannels > SPI pin [In]
- Connect LedController1 pin [ChipSelect] to Arduino > Digital > Digital[10] pin [In]
In the "TextValue1" we put the text that we want to display.
Matrix module contains 8X8 X 4 pixels, in length this is 32 pixels per module, if we have 3 modules like in this tutorial this means 96 pixels.
This is why we set "2D Graphics1" "Width" to 96
But since we want to start from the right, the starting pixel must be 96 (change this if you use more or less modules). That is why we set "Initial Value" to 96 in the "UpDownCounter1"
With "TextLength1" we measure our text to get pixels, but since one letter is 5 pixels we need to multiply it at the end with "MultiplyByValue1", the value should be 5, but since some characters use more pixels like space, etc we set the "Value" in the "MultiplyByValue1" to 6
If our text in pixels is for example 500, this is not enough to scroll it off the Matrix module, so we need to add 96 (the amount of Matrix modules pixels in length), for this we use "AddValue1", in our example this would now be 596
And since we want to scroll from right to left, we need to convert the value to minus in our example to -596, we assign this value to "UpDownCounter1" Min value
Now when we start, the text will be placed at 96 (full right, off the Matrix) and will slowly travel -596 (500 text length in pixels +96pixels length of the matrix modules), when 596 is reached in the counter, it will reset, that is why we connect "UpDownCounter1" Max reached to Reset pin, and the counter will be set to 96 Initial value
Text Positioning is done setting the "X" value on the "LedController1" Text Field1
Remember to adjust the number of pixels according to the number of Matrix modules that you plan to use, in our example here this is 96
Step 8: Generate, Compile, and Upload the Arduino CodeIn Visuino, at the bottom click on the "Build" Tab, make sure the correct port is selected, then click on the "Compile/Build and Upload" button.
Step 9: PlayCongratulations! You have completed your project with Visuino. Also attached is the Visuino project, that I created for this tutorial, you can download it here and open it in Visuino: https://www.visuino.com
Step 10: TroubleshootingIn my case When powering the Arduino the LED Matrix was blinking and the Text was not fully displayed. The reason for this was because MAX7219 chip is very sensitive to any voltage interference.
To solve that I added a 47uf electrolytic capacitor between the LED Matrix VCC(+) and GND(-), make sure you connect the capacitor right, + on (VCC) and - on the (GND)
Also make sure that connections on the modules are good and that jumper wires are ok.
Note: If you plan to use more then 3 LED MATRIX modules consider using an external power supply to power them by using a common ground with Arduino.












Comments