I've done some more digging and came across an old thread where someone offered up this fix for the green displays:
Make sure the calc bit is:
#define CalcBit(y) (1 << (y > 7 ? y -8 : y))
and change these two procedures:
inline uint8_t MatrixDisplay::xyToIndex(uint8_t x, uint8_t y)
{
// cap X coordinate at 24th column
x = x > 23 ? 23 : x;
// cap Y coordinate at 16
y &= 0xF;
#ifdef REDDISPLAY
uint8_t addresss = y > 7 ? 1 : 0; // Work out which panel it's on (top:0, bottom:1)
addresss += x<<1; // Shift x by 1 and add which panel it's on
#endif
#ifdef GREENDISPLAY
uint8_t addresss = y > 7 ? 1 : 0;
addresss += (x<<1)^14;
#endif
return addresss;
}
inline uint8_t MatrixDisplay::displayXYToIndex(uint8_t x, uint8_t y)
{
//old code(red display)
#ifdef REDDISPLAY
uint8_t addresss = y == 0 ? 0 : (y / 4); // Calculate which quandrant[?] it's in
addresss += x << 2; // Shift x by 2 and add which panel it's on
#endif
#ifdef GREENDISPLAY
//new code
// actual formula for finding display memory adress from the X,Y
uint8_t addresss = ((x<<2)^28);
addresss += y<4 ? 1 : 0;
addresss += y>11 ? 1 : 0;
addresss += 7< y >12 ? 1 : 0;
#endif
return addresss;
}
I tried to make these changes, but it is now having trouble compiling. When trying to compile the Simple sketch, I get these errors:
/Users/wtwerner/Documents/Arduino/libraries/MatrixDisplay_MilesBurton/MatrixDisplay.cpp: In member function 'uint8_t MatrixDisplay::displayXYToIndex(uint8_t, uint8_t)':
/Users/wtwerner/Documents/Arduino/libraries/MatrixDisplay_MilesBurton/MatrixDisplay.cpp:345: error: redeclaration of 'uint8_t addresss'
/Users/wtwerner/Documents/Arduino/libraries/MatrixDisplay_MilesBurton/MatrixDisplay.cpp:342: error: 'uint8_t addresss' previously declared here