Unfortunately you have a bit of a problem because your sketch calls the setRotation() function. The Adafruit_8x8matrix::drawPixel() method calls the getRotation() function to determine where to draw the pixels.
Line 100 of Adafruit_LEDBackpack.cpp
void Adafruit_8x8matrix::drawPixel(int16_t x, int16_t y, uint16_t color) {
if ((y < 0) || (y >= 8)) return;
if ((x < 0) || (x >= 8)) return;
// check rotation, move pixel around if necessary
switch (getRotation()) {
case 1:
swap(x, y);
x = 8 - x - 1;
break;
case 2:
x = 8 - x - 1;
y = 8 - y - 1;
break;
case 3:
swap(x, y);
y = 8 - y - 1;
break;
}
// wrap around the x
x += 7;
x %= 8;
if (color) {
displaybuffer[y] |= 1 << x;
} else {
displaybuffer[y] &= ~(1 << x);
}
}
Unfortunately, because 16x8 is not square, and this code is for 8x8, "rotation" is a little tricky.
For 8x8, rotating 0.0 to 7,0 then 7,7 then 0,7 makes sense.
What do you do on a 16x8? 0,0 to 7,0 makes sense, but 7,15?
So basically, you need to look at your sketch and its use of rotation, and how it interacts with rotation here. This is the core of your current problem I think.
If you're new to programming, this isn't the easiest task. But, with the will and time I'm sure you could do it.
In the interim, you could comment out all setRotation() calls in your sketch and see if the thing sort of works (my guess is tetris blocks would never rotate, but hopefully other than that it would work-ish).
Or, you could try changing the library code to this as a test:
void Adafruit_8x8matrix::drawPixel(int16_t x, int16_t y, uint16_t color) {
// wrap around the x
x += 7;
x %= 8;
if (color) {
displaybuffer[y] |= 1 << x;
} else {
displaybuffer[y] &= ~(1 << x);
}
}