Here's the arduino code.
#include <Adafruit_GFX.h> // Core graphics library
#include <RGBmatrixPanel.h> // Hardware-specific library
#define CLK 8 // MUST be on PORTB! (Use pin 11 on Mega)
#define LAT A3
#define OE 9
#define A A0
#define B A1
#define C A2
RGBmatrixPanel dotmatrix(A, B, C, CLK, LAT, OE, false);
uint32_t BLACK = dotmatrix.Color333(0,0,1);
uint32_t GREEN = dotmatrix.Color333(0, 7, 0);
uint32_t RED = dotmatrix.Color333(7, 0, 0);
uint32_t YELLOW = dotmatrix.Color333(7, 3, 0);
uint32_t ORANGE = dotmatrix.Color333(7, 3, 3);
int array[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int arraytemp[16] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int i, j, k, r;
void setup ()
{
Serial.begin(9600);
dotmatrix.fillScreen(BLACK);
}
void loop() {
delay(15);
if (Serial.read() != 0xff) return;
for (int i = 0; i != 16; array[i++] = Serial.read());
for (int j = 0; j != 16; ++j) {
const int val = array[j];
if (val < 0 | val > 16 | val == arraytemp[j]) continue;
arraytemp[j] = val;
if (val < 2) dotmatrix.drawLine(2 * j, 0, 2 * j, 15, BLACK);
else dotmatrix.drawLine(2 * j, 15, 2 * j, 0, BLACK);
dotmatrix.drawLine(2 * j + 1, 0, 2 * j + 1, 15, BLACK);
switch (val) {
case 1:
dotmatrix.drawPixel(2 * j, 15, GREEN);
dotmatrix.drawPixel(2 * j + 1, 15, GREEN);
break;
case 2:
dotmatrix.drawLine(2 * j, 15, 2 * j, 14, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 14, GREEN);
break;
case 3:
dotmatrix.drawLine(2 * j, 15, 2 * j, 13, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 13, GREEN);
break;
case 4:
dotmatrix.drawLine(2 * j, 15, 2 * j, 12, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 12, GREEN);
break;
case 5:
dotmatrix.drawLine(2 * j, 15, 2 * j, 11, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 11, GREEN);
break;
case 6:
dotmatrix.drawLine(2 * j, 15, 2 * j, 10, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 10, GREEN);
break;
case 7:
dotmatrix.drawLine(2 * j, 15, 2 * j, 9, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 9, GREEN);
break;
case 8:
dotmatrix.drawLine(2 * j, 15, 2 * j, 8, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 8, GREEN);
break;
case 9:
dotmatrix.drawLine(2 * j, 15, 2 * j, 7, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 7, GREEN);
break;
case 10:
dotmatrix.drawLine(2 * j, 15, 2 * j, 6, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 6, GREEN);
break;
case 11:
dotmatrix.drawLine(2 * j, 15, 2 * j, 5, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 5, GREEN);
break;
case 12:
dotmatrix.drawLine(2 * j, 15, 2 * j, 4, ORANGE);
dotmatrix.drawLine(2 * j, 15, 2 * j, 5, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 4, ORANGE);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 5, GREEN);
break;
case 13:
dotmatrix.drawLine(2 * j, 15, 2 * j, 3, ORANGE);
dotmatrix.drawLine(2 * j, 15, 2 * j, 5, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 3, ORANGE);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 5, GREEN);
break;
case 14:
dotmatrix.drawLine(2 * j, 15, 2 * j, 2, ORANGE);
dotmatrix.drawLine(2 * j, 15, 2 * j, 5, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 2, ORANGE);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 5, GREEN);
break;
case 15:
dotmatrix.drawLine(2 * j, 15, 2 * j, 1, RED);
dotmatrix.drawLine(2 * j, 15, 2 * j, 2, ORANGE);
dotmatrix.drawLine(2 * j, 15, 2 * j, 5, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 1, RED);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 2, ORANGE);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 5, GREEN);
break;
case 16:
dotmatrix.drawLine(2 * j, 15, 2 * j, 0, RED);
dotmatrix.drawLine(2 * j, 15, 2 * j, 2, ORANGE);
dotmatrix.drawLine(2 * j, 15, 2 * j, 5, GREEN);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 0, RED);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 2, ORANGE);
dotmatrix.drawLine(2 * j + 1, 15, 2 * j + 1, 5, GREEN);
}
}
}