Referencing an Array of Characters (2x 5x7 Matrix; LEDControl)

This is baffling to me:
I have an array of binary characters I can represent on some 5x7 matrix displays using LEDControl and entering in the array reference point manually. Which is nice, but what I need is to be able to scroll through the array, incrementing and decrementing a variable. ANYTHING I do to this variable seems to send garbage to the display, I can Serial.Print the data and confirm that it matches the reference lines of the array, yet it displays (interesting) gobblediguck. I boiled the problem down to the simplest bit of code I could yet it’s still big due to the character array- I hope the attachment isn’t too interruptive. Suffice it to say that the manually entered digit (any multiple of 8 below 96 or so) always faithfully displays the referenced character from the array, incrementing the other digit in multiples of 8 (the number of lines per character in the array) produces spasms of garbage. Switched displays around in code, switched to an Uno (on a boarduino at the moment), no difference. Any input on this surely simple mistake I’m making would be greatly appreciated.

#include <LedControl.h>
LedControl lc = LedControl(12, 11, 10, 2);

const unsigned char font5x7 [] PROGMEM = {      //Numeric Font Matrix (Arranged as 7x font data + 1x kerning data)
  B00000000,  //Space (Char 0x20) 0
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  6,
///........LARGE ARRAY CONTINUES HERE, 96 SETS OF 8 LINES.....

int font = 0;
//MANUALLY ENTER MULTIPLE OF 8 BELOW TO DISPLAY ON DIGIT 1
int x = 144;
int i;

void setup() {
//  Serial.begin(9600);
  lc.shutdown(0, false);
  lc.shutdown(1, false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0, 8);
  lc.setIntensity(1, 8);
  /* and clear the display */
  lc.clearDisplay(0);
  lc.clearDisplay(1);

}

void loop() {


  for (i = 0; i < 96; i++)
//INCREMENT IN MULTIPLES OF 8 TO DISPLAY ON DIGIT 0
//WITH VARIOUS DEBUG POINTS.. THIS CANNOT DISPLAY PROPER CHARACTERS
//FOR SOME REASON....
  {
//MANUALLY ENTERING BELOW DISPLAYS THE PROPER (STATIC) CHARACTER...
// i = 18;
//Serial.print(i);
//delay(500);
//GET THE MULTIPLE OF 8 TO DISPLAY
    font = (i*8);
// i++
// Serial.println(font);
// Serial.println(x);

    lc.setRow(0, 0, font5x7 [font]);
    lc.setRow(0, 1, font5x7 [(font + 1)]);
    lc.setRow(0, 2, font5x7 [(font + 2)]);
    lc.setRow(0, 3, font5x7 [(font + 3)]);
    lc.setRow(0, 4, font5x7 [(font + 4)]);
    lc.setRow(0, 5, font5x7 [(font + 5)]);
    lc.setRow(0, 6, font5x7 [(font + 6)]);


    lc.setRow(1, 0, font5x7 [x]);
    lc.setRow(1, 1, font5x7 [(x + 1)]);
    lc.setRow(1, 2, font5x7 [(x + 2)]);
    lc.setRow(1, 3, font5x7 [(x + 3)]);
    lc.setRow(1, 4, font5x7 [(x + 4)]);
    lc.setRow(1, 5, font5x7 [(x + 5)]);
    lc.setRow(1, 6, font5x7 [(x + 6)]);
    delay (300);
//   i++;
  }
}

font_test.ino (10.9 KB)

Not sure why it works sometimes but it looks like you are using PROGMEM incorrectly, since you're not reading the characters into SRAM.

FIXED! Thank you; not sure why that could compile at all. Turned it into const byte 5x7 and happy travels. Going to eventually set the digits via an encoder and write them to eeprom which looks a bit simpler.