X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=Hub08_LedMatrix%2FLEDMatrix.cpp;h=8cae64e11d6336c2438e15a53d2f18d003eb8120;hb=6bc2030a3b0a0a4c9dc7203a325fdfacdae55be6;hp=74e4fa532b926ec13dbd4785442b00a720db4344;hpb=ad7afe12e3eaa2a6db9426db4dfef59b0da3cfba;p=Arduino diff --git a/Hub08_LedMatrix/LEDMatrix.cpp b/Hub08_LedMatrix/LEDMatrix.cpp index 74e4fa5..8cae64e 100644 --- a/Hub08_LedMatrix/LEDMatrix.cpp +++ b/Hub08_LedMatrix/LEDMatrix.cpp @@ -21,8 +21,6 @@ #include "LEDMatrix.h" #include "Arduino.h" -#define USE_SPI 1 - #if USE_SPI #include #endif @@ -49,6 +47,7 @@ LEDMatrix::LEDMatrix(uint8_t a, uint8_t b, uint8_t c, uint8_t d, uint8_t oe, uin #if USE_SPI SPI.begin(); #endif + buffer = 0; } void LEDMatrix::begin(uint8_t *displaybuf, uint16_t width, uint16_t height) @@ -137,6 +136,9 @@ void LEDMatrix::scan() } 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 @@ -157,14 +159,14 @@ void LEDMatrix::scan() } } - digitalWrite(oe, HIGH); // disable display - // select row digitalWrite(a, (row & 0x01)); digitalWrite(b, (row & 0x02)); digitalWrite(c, (row & 0x04)); digitalWrite(d, (row & 0x08)); + digitalWrite(oe, HIGH); // disable display + // latch data digitalWrite(stb, LOW); digitalWrite(stb, HIGH); @@ -175,6 +177,18 @@ void LEDMatrix::scan() 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;