Here is a start to the code. The simulation is not important, but does show the complete code is not an advanced task. Changing it from 12x9 to 11x11 is simple (pixels count from 0 to 121 rather than 0 to 12x9). I would improve upon this simulation by creating ONLY ONE function to light the words (here I created a function for each word) to (1) identify the starting pixel, (2) identify the ending pixel and (3) change the color (live/dynamically or time of day). The code in the simulation can be found below the images.
diagram.json
{
"version": 1,
"author": "Anonymous maker",
"editor": "wokwi",
"parts": [
{ "type": "wokwi-arduino-nano", "id": "nano", "top": 52.8, "left": -19.7, "attrs": {} },
{
"type": "wokwi-neopixel-matrix",
"id": "ring1",
"top": -165.72,
"left": -88.65,
"attrs": { "pixleate": "1", "rows": "9", "cols": "12" }
},
{
"type": "wokwi-text",
"id": "legendservo1",
"top": -172.8,
"left": -86.4,
"attrs": { "text": "I\nQ\nT\nT\nT\nF\nE\nN\nT" }
},
{
"type": "wokwi-text",
"id": "legendservo2",
"top": -172.8,
"left": -57.6,
"attrs": { "text": "T\nU\nE\nO\nW\nI\nI\nE\nI" }
},
{
"type": "wokwi-text",
"id": "legendservo3",
"top": -172.8,
"left": -28.8,
"attrs": { "text": "T\nA\nN\nE\nO\nV\nG\nL\nO" }
},
{
"type": "wokwi-text",
"id": "legendservo4",
"top": -172.8,
"left": -9.6,
"attrs": { "text": "I\nR\nF\nT\nT\nE\nH\nE\n'" }
},
{
"type": "wokwi-text",
"id": "legendservo5",
"top": -172.8,
"left": 19.2,
"attrs": { "text": "S\nT\nI\nW\nH\nS\nT\nV\nC" }
},
{
"type": "wokwi-text",
"id": "legendservo6",
"top": -172.8,
"left": 38.4,
"attrs": { "text": "I\nE\nV\nE\nR\nI\nN\nE\nL" }
},
{
"type": "wokwi-text",
"id": "legendservo7",
"top": -172.8,
"left": 67.2,
"attrs": { "text": "T\nR\nE\nL\nE\nX\nI\nN\nO" }
},
{
"type": "wokwi-text",
"id": "legendservo8",
"top": -172.8,
"left": 96,
"attrs": { "text": "W\nH\nE\nV\nE\nS\nN\nD\nC" }
},
{
"type": "wokwi-text",
"id": "legendservo9",
"top": -172.8,
"left": 115.2,
"attrs": { "text": "E\nA\nP\nE\nF\nE\nE\nD\nK" }
},
{
"type": "wokwi-text",
"id": "legendservo10",
"top": -172.8,
"left": 144,
"attrs": { "text": "N\nL\nA\nO\nO\nV\nT\nA\nM" }
},
{
"type": "wokwi-text",
"id": "legendservo11",
"top": -172.8,
"left": 172.8,
"attrs": { "text": "T\nF\nS\nN\nU\nE\nE\nT\nE" }
},
{
"type": "wokwi-text",
"id": "legendservo12",
"top": -172.8,
"left": 192,
"attrs": { "text": "Y\nM\nT\nE\nR\nN\nN\nE\nA" }
},
{ "type": "wokwi-vcc", "id": "vcc1", "top": 10.36, "left": 211.2, "attrs": {} },
{ "type": "wokwi-gnd", "id": "gnd1", "top": 57.6, "left": -96.6, "attrs": {} }
],
"connections": [
[ "gnd1:GND", "ring1:GND", "black", [ "v-9.6", "h76.8" ] ],
[ "vcc1:VCC", "ring1:VCC", "red", [ "v9.6", "h-153.6" ] ],
[ "ring1:DIN", "nano:5", "green", [ "v0" ] ]
],
"dependencies": {}
}