Skip to content

Commit 20348ce

Browse files
ubidefeofacchinm
authored andcommitted
added renderBitmap() method to pass in a bidimensional array of uint8_t for monochrome bitmap grids
1 parent a1aac2c commit 20348ce

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

libraries/Arduino_LED_Matrix/src/Arduino_LED_Matrix.h

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,8 @@ static uint32_t reverse(uint32_t x)
133133
}
134134

135135
// TODO: this is dangerous, use with care
136-
#define loadSequence(x) loadWrapper(x, sizeof(x))
137-
136+
#define loadSequence(frames) loadWrapper(frames, sizeof(frames))
137+
#define renderBitmap(bitmap, rows, columns) loadPixels(&bitmap[0][0], rows*columns)
138138

139139
static uint8_t __attribute__((aligned)) framebuffer[NUM_LEDS / 8];
140140

@@ -186,6 +186,7 @@ class ArduinoLEDMatrix {
186186
}};
187187
loadSequence(tempBuffer);
188188
next();
189+
_interval = 0;
189190
}
190191
void renderFrame(uint8_t frameNumber){
191192
_currentFrame = frameNumber % _framesCount;
@@ -204,6 +205,23 @@ class ArduinoLEDMatrix {
204205
}
205206
return false;
206207
}
208+
209+
void loadPixels(uint8_t *arr, size_t size){
210+
uint32_t partialBuffer = 0;
211+
uint8_t pixelIndex = 0;
212+
uint8_t *frameP = arr;
213+
uint32_t *frameHolderP = _frameHolder;
214+
while (pixelIndex < size) {
215+
partialBuffer |= *frameP++;
216+
if ((pixelIndex + 1) % 32 == 0) {
217+
*(frameHolderP++) = partialBuffer;
218+
}
219+
partialBuffer = partialBuffer << 1;
220+
pixelIndex++;
221+
}
222+
loadFrame(_frameHolder);
223+
};
224+
207225
void loadWrapper(const uint32_t frames[][4], uint32_t howMany) {
208226
_currentFrame = 0;
209227
_frames = (uint32_t*)frames;
@@ -216,6 +234,7 @@ class ArduinoLEDMatrix {
216234

217235
private:
218236
int _currentFrame = 0;
237+
uint32_t _frameHolder[3];
219238
uint32_t* _frames;
220239
uint32_t _framesCount;
221240
uint32_t _interval = 0;

0 commit comments

Comments
 (0)