5#include <Adafruit_GFX.h>
28 uint8_t *matrixPosition;
29 uint8_t *matrixRotation;
30 uint8_t *outputBuffer;
43 Max72xxMatrix(uint8_t csPin, uint8_t hDisplays = 1, uint8_t vDisplays = 1, uint8_t rotation = 0)
44 : Adafruit_GFX(hDisplays << 3, vDisplays << 3), driver(csPin, hDisplays * vDisplays),
45 hDisplays(hDisplays) {
46 uint8_t displays = hDisplays * vDisplays;
47 bitmapSize = displays * 8;
48 bitmap = (uint8_t *)malloc(bitmapSize + (4 * displays));
49 matrixPosition = bitmap + bitmapSize;
50 matrixRotation = matrixPosition + displays;
51 outputBuffer = matrixRotation + displays;
53 for (uint8_t display = 0; display < displays; display++) {
54 matrixPosition[display] = display;
55 matrixRotation[display] = rotation;
66 if (bitmap !=
nullptr) {
109 if (bitmap !=
nullptr) {
112 uint16_t startOffset = bitmapSize + endOffset;
113 uint8_t *pPtr = outputBuffer;
117 pPtr[1] = bitmap[startOffset];
119 }
while (startOffset > endOffset);
120 driver.
sendBlock(outputBuffer, bitmapSize / 4);
131 if (bitmap !=
nullptr) {
132 matrixPosition[x + hDisplays * y] = display;
145 if (bitmap !=
nullptr) {
146 matrixRotation[display] = rotation;
185 void getCharBounds(
unsigned char c, int16_t *x, int16_t *y, int16_t *minx, int16_t *miny,
186 int16_t *maxx, int16_t *maxy) {
187 charBounds(c, x, y, minx, miny, maxx, maxy);
206 bool printFormatted(int16_t x, int16_t y, int16_t w, int16_t align, String content,
207 uint8_t baseLine, uint8_t yAdvance = 0) {
208 int16_t xx = 0, yy = 0;
209 uint16_t ww = 0, hh = 0;
210 bool old_wrap = wrap;
212 getTextBounds(content, 0, 0, &xx, &yy, &ww, &hh);
230 if (yAdvance && (hh % yAdvance)) {
231 hh = ((hh / yAdvance) + 1) * yAdvance;
233 GFXcanvas1 tmp(w, hh);
235 tmp.setFont(gfxFont);
237 tmp.fillScreen(textbgcolor);
238 tmp.setTextWrap(
false);
239 tmp.setCursor(xx, baseLine ? baseLine : -1 * yy);
240 tmp.setTextColor(textcolor, textbgcolor);
243 drawBitmap(x, y, tmp.getBuffer(), w, hh, textcolor, textbgcolor);
245 setCursor(x + tmp.getCursorX(), y + (baseLine ? baseLine : -1 * yy));
246 return w >= (int16_t)ww;
256 if (bitmap !=
nullptr) {
257 memset(bitmap, color ? 0xff : 0, bitmapSize);
266 void drawPixel(int16_t xx, int16_t yy, uint16_t color) {
267 if (bitmap ==
nullptr) {
286 if (rotation == 1 || rotation == 2) {
299 if (x < 0 || x >= WIDTH || y < 0 || y >= HEIGHT) {
307 uint8_t display = matrixPosition[(x >> 3) + hDisplays * (y >> 3)];
311 uint8_t r = matrixRotation[display];
316 if (r == 1 || r == 2) {
327 uint8_t d = display / hDisplays;
328 x += (display - d * hDisplays) << 3;
333 uint8_t *ptr = bitmap + x + WIDTH * (y >> 3);
334 uint8_t val = 1 << (y & 0b111);
The MAX72XX Controller Class.
Definition: max72xx.h:14
void begin()
Definition: max72xx.h:52
@ digit0
Digit 0.
Definition: max72xx.h:24
@ digit7
Digit 7.
Definition: max72xx.h:31
void setPowerSave(bool powersave)
Definition: max72xx.h:93
void setIntensity(uint8_t intensity)
Definition: max72xx.h:78
void setTestMode(bool testmode)
Definition: max72xx.h:104
void sendBlock(uint8_t *buffer, uint8_t size)
Definition: max72xx.h:126
void setScanLimit(uint8_t scanlimit)
Definition: max72xx.h:85
void setDecodeMode(uint8_t mode)
Definition: max72xx.h:71
The MAX72XX Matrix Display Class.
Definition: max72xx_matrix.h:19
void setRotation(uint8_t display, uint8_t rotation)
Definition: max72xx_matrix.h:144
void setPosition(uint8_t display, uint8_t x, uint8_t y)
Definition: max72xx_matrix.h:130
void setIntensity(uint8_t intensity)
Definition: max72xx_matrix.h:90
virtual void fillScreen(uint16_t color)
Definition: max72xx_matrix.h:255
void setTestMode(bool testmode)
Definition: max72xx_matrix.h:98
void begin()
Definition: max72xx_matrix.h:65
void write()
Definition: max72xx_matrix.h:108
bool getTextWrap() const
Definition: max72xx_matrix.h:153
int16_t getCursorY() const
Definition: max72xx_matrix.h:167
void drawPixel(int16_t xx, int16_t yy, uint16_t color)
Definition: max72xx_matrix.h:266
int16_t getCursorX() const
Definition: max72xx_matrix.h:160
void getCharBounds(unsigned char c, int16_t *x, int16_t *y, int16_t *minx, int16_t *miny, int16_t *maxx, int16_t *maxy)
Definition: max72xx_matrix.h:185
Max72xxMatrix(uint8_t csPin, uint8_t hDisplays=1, uint8_t vDisplays=1, uint8_t rotation=0)
Definition: max72xx_matrix.h:43
void setPowerSave(bool powersave)
Definition: max72xx_matrix.h:83
bool printFormatted(int16_t x, int16_t y, int16_t w, int16_t align, String content, uint8_t baseLine, uint8_t yAdvance=0)
Definition: max72xx_matrix.h:206
The muwerk namespace.
Definition: display_digits_max72xx.h:10