-
Notifications
You must be signed in to change notification settings - Fork 0
/
matrixScroller.cpp
63 lines (54 loc) · 1.6 KB
/
matrixScroller.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "matrixScroller.h"
#define CHAR_WIDTH 3
#define CHAR_HEIGHT 5
MatrixScroller::MatrixScroller(String message_) {
message = message_;
position = 0;
color = 0xffffff;
}
uint16_t MatrixScroller::getPosition() {
return position;
}
void MatrixScroller::setColor(uint32_t color_) {
color = color_;
}
void MatrixScroller::draw(RGBMatrix &matrix)
{
uint16_t messageIndex;
uint8_t charIndex;
for(uint8_t x = 0; x < LED_COLS; x++) {
messageIndex = (position+x) / (CHAR_WIDTH+1); // character count within message
charIndex = (position+x) % (CHAR_WIDTH+1); // column within character bitmap
// get the next character in the message
uint8_t charValue = message[messageIndex];
// get the bitmap for this character
uint8_t* char_bitmap;
if(charValue >= ' ' && charValue <= 127) {
uint8_t charIntValue = charValue - ' '; // integer value for the number
char_bitmap = *bitmap_ascii[charIntValue];
} else {
// draw a question mark
char_bitmap = *bitmap_ascii[31];
}
for(uint8_t y = 0; y < LED_ROWS; y++) {
if(charIndex == CHAR_WIDTH // this is the spacer in between characters
|| y >= CHAR_HEIGHT) // rows below the character
{
matrix.set(y, x, 0,0,0);
} else {
uint8_t onoff = char_bitmap[y*3 + charIndex];
if(onoff == 1) {
matrix.set(y, x, color);
} else {
matrix.set(y, x, 0,0,0);
}
}
}
}
matrix.show();
position++;
// check for wrap-around
if((position + LED_COLS - 1) >= (message.length()*(CHAR_WIDTH+1))) {
position = 0;
}
};