LEDMatrix matrix(4, 5, 6, 7, 9, 11, 10, 13);
// Display Buffer 128 = 64 * 16 / 8
-uint8_t displaybuf[(WIDTH/8) * HEIGHT];
+uint8_t displaybuf[(WIDTH/8) * HEIGHT*2];
uint8_t displaybuf_w[((WIDTH/8)+1) * HEIGHT];
for (int o=0; o<8; o++) {
uint8_t *src = displaybuf_w + pos;
- uint8_t *dest = displaybuf;
+ uint8_t *dest = matrix.offscreen_buffer();
int i = 0;
i++;
}
}
+ matrix.swap();
}
}
#if USE_SPI
SPI.begin();
#endif
+ buffer = 0;
}
void LEDMatrix::begin(uint8_t *displaybuf, uint16_t width, uint16_t height)
}
uint8_t *head = displaybuf + row * (width / 8);
+
+ if ( buffer ) head += (width/8) * height;
+
for (uint8_t line = 0; line < (height / 16); line++) {
uint8_t *ptr = head;
head += width * 2; // width * 16 / 8
row = (row + 1) & 0x0F;
}
+uint8_t *LEDMatrix::offscreen_buffer()
+{
+ uint8_t *buff = displaybuf;
+ if ( ! buffer ) buff += (width/8) * height;
+ return buff;
+}
+
+void LEDMatrix::swap()
+{
+ buffer = ! buffer;
+}
+
void LEDMatrix::on()
{
state = 1;