Forked LEDMatrix and added horizontal scrolling
Fork of LEDMatrix by
Revision 4:40d4afefcd74, committed 2016-01-15
- Comitter:
- Bobty
- Date:
- Fri Jan 15 09:50:10 2016 +0000
- Parent:
- 3:1e06e89bc0c9
- Child:
- 5:334fc002e200
- Commit message:
- Added control of scrolling and flashing rates
Changed in this revision
LEDMatrix.cpp | Show annotated file Show diff for this revision Revisions of this file |
LEDMatrix.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/LEDMatrix.cpp Thu Jan 14 16:52:04 2016 +0000 +++ b/LEDMatrix.cpp Fri Jan 15 09:50:10 2016 +0000 @@ -59,12 +59,14 @@ _isBusy = false; _charSeparation = 1; _flashCounter = 0; - _flashRate = 8; + _flashRate = 50; _flashState = false; + _scrollCounter = 0; + _scrollRate = 7; } void LEDMatrix::begin(uint8_t *_pDisplayBuf, uint16_t width, uint16_t height, uint16_t dispBufWidth, - uint16_t numLines, int charSeparation, int flashRate) + uint16_t numLines, int charSeparation, int flashRate, int scrollRate) { ASSERT(0 == (width % LED_MATRIX_LEDS_HORIZONTALLY)); ASSERT(0 == (scroll_width % LED_MATRIX_LEDS_HORIZONTALLY)); @@ -76,7 +78,10 @@ this->dispBufWidth = dispBufWidth; this->numLines = numLines; this->_charSeparation = charSeparation; - this->_flashRate = flashRate; + if (flashRate > 0) + this->_flashRate = flashRate; + if (scrollRate > 0) + this->_scrollRate = scrollRate; if (numLines > LED_MATRIX_MAX_LINES) this->numLines = LED_MATRIX_MAX_LINES; for (int i = 0; i < LED_MATRIX_LEDS_VERTICALLY; i++) @@ -323,6 +328,16 @@ *ptr++ = 0x00; } +void LEDMatrix::setScrollRate(int rate) +{ + _scrollRate = rate; +} + +void LEDMatrix::setFlashRate(int rate) +{ + _flashRate = rate; +} + void LEDMatrix::setupScroll(int lineIdx, int scrollWidth, int scrollInc) { // Interpret param @@ -370,13 +385,17 @@ void LEDMatrix::serviceEffects() { - // Scroll / flash logic - int rowsInLine = (height / numLines); - for (int i = 0; i < numLines; i++) + // Scroll logic + _scrollCounter++; + if (_scrollCounter >= _scrollRate) { - for (int j = 0; j < rowsInLine; j++) - _hScrollPos[i*rowsInLine+j] += _lineScrollInc[i]; - _lineInvert[i] = _lineAlert[i] ? _flashState : false; + _scrollCounter = 0; + int rowsInLine = (height / numLines); + for (int i = 0; i < numLines; i++) + { + for (int j = 0; j < rowsInLine; j++) + _hScrollPos[i*rowsInLine+j] += _lineScrollInc[i]; + } } // Update flash state @@ -385,6 +404,10 @@ { _flashCounter = 0; _flashState = !_flashState; + for (int i = 0; i < numLines; i++) + { + _lineInvert[i] = _lineAlert[i] ? _flashState : false; + } } }
--- a/LEDMatrix.h Thu Jan 14 16:52:04 2016 +0000 +++ b/LEDMatrix.h Fri Jan 15 09:50:10 2016 +0000 @@ -40,7 +40,7 @@ * @param number panels' number */ void begin(uint8_t *pDisplayBuf, uint16_t width, uint16_t height, uint16_t scrollWidth, - uint16_t numLines, int charSeparation = 1, int flashRate = 8); + uint16_t numLines, int charSeparation = 1, int flashRate = -1, int scrollRate = -1); /** * draw a point - origin is like a graph with 0,0 at the lower-left corner @@ -92,6 +92,8 @@ int displayLargeDigit(int curX, int curY, char ch); int displayLine(int lineIdx, const char* line); + void setScrollRate(int rate); + void setFlashRate(int rate); void setAlert(int lineIdx, bool alertOn); // Called frequently and regularly to handle effects like scrolling @@ -117,6 +119,8 @@ int _flashCounter; int _flashRate; bool _flashState; + int _scrollCounter; + int _scrollRate; }; #endif