From b7f5e924e0aca208e5ca2cdcdac5ef41fe19266f Mon Sep 17 00:00:00 2001 From: tiijay Date: Wed, 5 Nov 2025 11:42:33 +0100 Subject: [PATCH] v.0.0.7 font_16x16 --- lib/Fonts/src/font_16x16.cpp | 19 +++ lib/Fonts/src/font_16x16.h | 203 ++++++++++++++++++++++++++++++++ lib/Fonts/src/font_5x7.cpp | 11 +- lib/Fonts/src/font_5x7.h | 5 +- lib/Fonts/src/font_8x8.cpp | 19 +++ lib/Fonts/src/font_8x8.h | 117 ++++++++++++++++++ lib/LedMatrix/src/LedMatrix.cpp | 38 +++--- lib/LedMatrix/src/LedMatrix.h | 8 +- src/main.cpp | 46 +++++--- 9 files changed, 423 insertions(+), 43 deletions(-) create mode 100644 lib/Fonts/src/font_16x16.cpp create mode 100644 lib/Fonts/src/font_16x16.h create mode 100644 lib/Fonts/src/font_8x8.cpp create mode 100644 lib/Fonts/src/font_8x8.h diff --git a/lib/Fonts/src/font_16x16.cpp b/lib/Fonts/src/font_16x16.cpp new file mode 100644 index 0000000..485e4b9 --- /dev/null +++ b/lib/Fonts/src/font_16x16.cpp @@ -0,0 +1,19 @@ +#include "font_16x16.h" + +// Function to get font data for a character +const uint16_t *getFontChar_16x16(char c) +{ + for (int i = 0; i < sizeof(font_chars_16x16) - 1; i++) + { + if (font_chars_16x16[i] == c) + { + return font_16x16[i]; + } + } + return font_16x16[0]; // Return space if not found (index of ' ') +} + +const uint8_t fontHeight_16x16() +{ + return 16; +} diff --git a/lib/Fonts/src/font_16x16.h b/lib/Fonts/src/font_16x16.h new file mode 100644 index 0000000..e7155e7 --- /dev/null +++ b/lib/Fonts/src/font_16x16.h @@ -0,0 +1,203 @@ +#ifndef FONT_16X16_H +#define FONT_16X16_H + +#include + +const uint16_t font_16x16[][16] = { + // Space (index 0) + {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // ' ' + + // Exclamation mark (index 1) + {0x0006, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x0006, 0x0000, 0x000F, 0x000F, 0x0000, 0x0000}, // '!' + + // Double quote (index 2) + {0x0363, 0x0363, 0x0363, 0x0363, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '"' + + // Hash (index 3) + {0x0318, 0x0318, 0x0318, 0x0FFF, 0x0FFF, 0x0318, 0x0318, 0x0318, 0x0318, 0x0FFF, 0x0FFF, 0x0318, 0x0318, 0x0318, 0x0000, 0x0000}, // '#' + + // Dollar (index 4) + {0x0078, 0x00FE, 0x01CF, 0x01C7, 0x01C0, 0x00F8, 0x007C, 0x000F, 0x0007, 0x01C7, 0x01CF, 0x00FE, 0x0078, 0x0010, 0x0000, 0x0000}, // '$' + + // Percent (index 5) + {0x0E0E, 0x1B0E, 0x1B1C, 0x0E38, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x070E, 0x0E1B, 0x1C1B, 0x380E, 0x0000, 0x0000, 0x0000, 0x0000}, // '%' + + // Ampersand (index 6) + {0x07C0, 0x0EE0, 0x1C70, 0x1C70, 0x0EE0, 0x07C0, 0x0FC7, 0x1CE7, 0x387E, 0x383C, 0x387E, 0x1CFF, 0x0FE7, 0x07C0, 0x0000, 0x0000}, // '&' + + // Single quote (index 7) + {0x0003, 0x0003, 0x0003, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // ''' + + // Left parenthesis (index 8) + {0x0007, 0x000E, 0x001C, 0x001C, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x001C, 0x001C, 0x000E, 0x0007, 0x0000, 0x0000}, // '(' + + // Right parenthesis (index 9) + {0x0038, 0x001C, 0x000E, 0x000E, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x000E, 0x000E, 0x001C, 0x0038, 0x0000, 0x0000}, // ')' + + // Asterisk (index 10) + {0x0030, 0x01B3, 0x00FC, 0x0078, 0x00FC, 0x01B3, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '*' + + // Plus (index 11) + {0x0000, 0x0000, 0x0060, 0x0060, 0x0060, 0x0060, 0x03FF, 0x03FF, 0x0060, 0x0060, 0x0060, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000}, // '+' + + // Comma (index 12) + {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0003, 0x0006, 0x0000, 0x0000}, // ',' + + // Minus (index 13) + {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03FF, 0x03FF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '-' + + // Period (index 14) + {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000}, // '.' + + // Slash (index 15) + {0x0003, 0x0007, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000}, // '/' + + // Numbers 0-9 (index 16-25) + {0x01F8, 0x03FC, 0x070E, 0x0606, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0606, 0x070E, 0x03FC, 0x01F8, 0x0000, 0x0000}, // '0' + {0x000C, 0x001C, 0x003C, 0x007C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x007F, 0x007F, 0x0000, 0x0000}, // '1' + {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0003, 0x0007, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x03FF, 0x03FF, 0x0000, 0x0000}, // '2' + {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0003, 0x0007, 0x007E, 0x007E, 0x0007, 0x0003, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000, 0x0000}, // '3' + {0x000E, 0x001E, 0x003E, 0x006E, 0x00CE, 0x018E, 0x030E, 0x060E, 0x07FF, 0x07FF, 0x000E, 0x000E, 0x000E, 0x000E, 0x0000, 0x0000}, // '4' + {0x03FF, 0x03FF, 0x0300, 0x0300, 0x0300, 0x03FC, 0x03FE, 0x0007, 0x0003, 0x0003, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000, 0x0000}, // '5' + {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0300, 0x037C, 0x03FE, 0x0387, 0x0303, 0x0303, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000, 0x0000}, // '6' + {0x03FF, 0x03FF, 0x0003, 0x0007, 0x000E, 0x001C, 0x0038, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0000, 0x0000}, // '7' + {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x01FE, 0x0387, 0x0303, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000}, // '8' + {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0303, 0x0387, 0x01FF, 0x00FF, 0x0003, 0x0003, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000, 0x0000}, // '9' + + // Colon (index 26) + {0x0000, 0x0000, 0x0000, 0x0003, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000}, // ':' + + // Semicolon (index 27) + {0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0003, 0x0006, 0x0000, 0x0000}, // ';' + + // Less than (index 28) + {0x0003, 0x000F, 0x003C, 0x00F0, 0x03C0, 0x0700, 0x03C0, 0x00F0, 0x003C, 0x000F, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '<' + + // Equal (index 29) + {0x0000, 0x0000, 0x0000, 0x0000, 0x03FF, 0x03FF, 0x0000, 0x0000, 0x03FF, 0x03FF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '=' + + // Greater than (index 30) + {0x0600, 0x0780, 0x01E0, 0x0078, 0x001E, 0x0007, 0x001E, 0x0078, 0x01E0, 0x0780, 0x0600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '>' + + // Question mark (index 31) + {0x007C, 0x00FE, 0x01C7, 0x0183, 0x0003, 0x0007, 0x000E, 0x001C, 0x0018, 0x0000, 0x0018, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000}, // '?' + + // At symbol (index 32) + {0x01F8, 0x03FC, 0x070E, 0x0606, 0x0E3F, 0x0E7F, 0x0E67, 0x0E67, 0x0E67, 0x0E7F, 0x0E3E, 0x0600, 0x070E, 0x03FC, 0x01F8, 0x0000}, // '@' + + // Uppercase A-Z (index 33-58) + {0x0070, 0x00F8, 0x00F8, 0x01DC, 0x01DC, 0x038E, 0x038E, 0x038E, 0x03FE, 0x07FF, 0x0707, 0x0707, 0x0707, 0x0707, 0x0000, 0x0000}, // 'A' + {0x07F8, 0x07FC, 0x070E, 0x070E, 0x070E, 0x071C, 0x07F8, 0x07FC, 0x070E, 0x0707, 0x0707, 0x0707, 0x070E, 0x07FE, 0x07FC, 0x0000}, // 'B' + {0x01FC, 0x03FE, 0x0787, 0x0703, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0703, 0x0787, 0x03FE, 0x01FC, 0x0000, 0x0000}, // 'C' + {0x0FF0, 0x0FFC, 0x0E1E, 0x0E0E, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E0E, 0x0E1E, 0x0FFC, 0x0FF0, 0x0000, 0x0000}, // 'D' + {0x07FF, 0x07FF, 0x0700, 0x0700, 0x0700, 0x0700, 0x07FC, 0x07FC, 0x0700, 0x0700, 0x0700, 0x0700, 0x07FF, 0x07FF, 0x0000, 0x0000}, // 'E' + {0x07FF, 0x07FF, 0x0700, 0x0700, 0x0700, 0x0700, 0x07FC, 0x07FC, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0000, 0x0000}, // 'F' + {0x01FC, 0x03FE, 0x0787, 0x0703, 0x0E00, 0x0E00, 0x0E3F, 0x0E3F, 0x0E07, 0x0E07, 0x0707, 0x0787, 0x03FF, 0x01FF, 0x0000, 0x0000}, // 'G' + {0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0FFF, 0x0FFF, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0000, 0x0000}, // 'H' + {0x007F, 0x007F, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x007F, 0x007F, 0x0000, 0x0000}, // 'I' + {0x007F, 0x007F, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x071C, 0x071C, 0x0738, 0x03F8, 0x01F0, 0x0000, 0x0000}, // 'J' + {0x0E0E, 0x0E1C, 0x0E38, 0x0E70, 0x0EE0, 0x0FC0, 0x0FC0, 0x0FE0, 0x0EF0, 0x0E78, 0x0E3C, 0x0E1C, 0x0E0E, 0x0E07, 0x0000, 0x0000}, // 'K' + {0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x07FF, 0x07FF, 0x0000, 0x0000}, // 'L' + {0x1C07, 0x1E0F, 0x1E0F, 0x1F1F, 0x1F1F, 0x1DB7, 0x1DB7, 0x1DB7, 0x1CE7, 0x1CE7, 0x1CE7, 0x1C07, 0x1C07, 0x1C07, 0x0000, 0x0000}, // 'M' + {0x0E07, 0x0F07, 0x0F07, 0x0F87, 0x0FC7, 0x0EE7, 0x0E77, 0x0E77, 0x0E3F, 0x0E1F, 0x0E1F, 0x0E0F, 0x0E07, 0x0E07, 0x0000, 0x0000}, // 'N' + {0x01F8, 0x03FC, 0x078E, 0x0706, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0706, 0x078E, 0x03FC, 0x01F8, 0x0000, 0x0000}, // 'O' + {0x07F8, 0x07FC, 0x070E, 0x0707, 0x0707, 0x0707, 0x070E, 0x07FC, 0x07F8, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0000, 0x0000}, // 'P' + {0x01F8, 0x03FC, 0x078E, 0x0706, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E67, 0x077E, 0x07BE, 0x03FC, 0x01F7, 0x0000, 0x0000}, // 'Q' + {0x0FF0, 0x0FF8, 0x0E1C, 0x0E0E, 0x0E0E, 0x0E0E, 0x0E1C, 0x0FF8, 0x0FF0, 0x0E78, 0x0E3C, 0x0E1E, 0x0E0E, 0x0E07, 0x0000, 0x0000}, // 'R' + {0x01FC, 0x03FE, 0x0787, 0x0703, 0x0700, 0x0780, 0x03FC, 0x00FE, 0x0007, 0x0003, 0x0703, 0x0787, 0x03FE, 0x01FC, 0x0000, 0x0000}, // 'S' + {0x07FF, 0x07FF, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0000, 0x0000}, // 'T' + {0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x070E, 0x07FE, 0x01F8, 0x0000, 0x0000}, // 'U' + {0x0E07, 0x0E07, 0x070E, 0x070E, 0x070E, 0x039C, 0x039C, 0x039C, 0x01F8, 0x01F8, 0x01F8, 0x00F0, 0x00F0, 0x00F0, 0x0000, 0x0000}, // 'V' + {0x0E0E, 0x0E0E, 0x0E0E, 0x0E0E, 0x0E0E, 0x0E0E, 0x06B6, 0x06B6, 0x06B6, 0x07F7, 0x07F7, 0x07F7, 0x03E3, 0x03E3, 0x0000, 0x0000}, // 'W' + {0x0E07, 0x070E, 0x070E, 0x039C, 0x01F8, 0x01F8, 0x00F0, 0x00F0, 0x01F8, 0x01F8, 0x039C, 0x070E, 0x070E, 0x0E07, 0x0000, 0x0000}, // 'X' + {0x0E07, 0x070E, 0x070E, 0x039C, 0x039C, 0x01F8, 0x01F8, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x0000, 0x0000}, // 'Y' + {0x07FF, 0x07FF, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x0E00, 0x07FF, 0x07FF, 0x0000, 0x0000}, // 'Z' + + // Left bracket (index 59) + {0x003F, 0x003F, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x003F, 0x003F, 0x0000}, // '[' + + // Backslash (index 60) + {0x3000, 0x3800, 0x1C00, 0x0E00, 0x0700, 0x0380, 0x01C0, 0x00E0, 0x0070, 0x0038, 0x001C, 0x000E, 0x0007, 0x0003, 0x0000, 0x0000}, // '\\' + + // Right bracket (index 61) + {0x003F, 0x003F, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x003F, 0x003F, 0x0000}, // ']' + + // Caret (index 62) + {0x0030, 0x0078, 0x00FC, 0x01CE, 0x0387, 0x0303, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '^' + + // Underscore (index 63) + {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF}, // '_' + + // Backtick (index 64) + {0x000C, 0x0006, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '`' + + // Lowercase a-z (index 65-90) + {0x0000, 0x0000, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0007, 0x007F, 0x00FF, 0x01C7, 0x0387, 0x0387, 0x01FF, 0x00F7, 0x0000, 0x0000}, // 'a' + {0x0380, 0x0380, 0x0380, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x03CF, 0x03FE, 0x03BC, 0x0000, 0x0000}, // 'b' + {0x0000, 0x0000, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0383, 0x0380, 0x0380, 0x0380, 0x0383, 0x01C7, 0x00FE, 0x007C, 0x0000, 0x0000}, // 'c' + {0x0007, 0x0007, 0x0007, 0x0077, 0x00FF, 0x01CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x00FF, 0x0077, 0x0000, 0x0000}, // 'd' + {0x0000, 0x0000, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0383, 0x03FF, 0x03FF, 0x0380, 0x0381, 0x01C3, 0x00FF, 0x007C, 0x0000, 0x0000}, // 'e' + {0x001F, 0x003F, 0x0078, 0x0070, 0x01FE, 0x01FE, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0000, 0x0000}, // 'f' + {0x0000, 0x0000, 0x0000, 0x0077, 0x00FF, 0x01CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x00FF, 0x0077, 0x0007, 0x01FE, 0x01FC}, // 'g' + {0x0380, 0x0380, 0x0380, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0000, 0x0000}, // 'h' + {0x000C, 0x000C, 0x0000, 0x003C, 0x003C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x003F, 0x003F, 0x0000, 0x0000}, // 'i' + {0x0003, 0x0003, 0x0000, 0x000F, 0x000F, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0E3, 0x0E3, 0x007E, 0x003C}, // 'j' + {0x0700, 0x0700, 0x0700, 0x070E, 0x071C, 0x0738, 0x0770, 0x07E0, 0x07E0, 0x0770, 0x0738, 0x071C, 0x070E, 0x0707, 0x0000, 0x0000}, // 'k' + {0x003C, 0x003C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x003F, 0x003F, 0x0000, 0x0000}, // 'l' + {0x0000, 0x0000, 0x0000, 0x0EE7, 0x0FFF, 0x0F3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0000, 0x0000}, // 'm' + {0x0000, 0x0000, 0x0000, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0000, 0x0000}, // 'n' + {0x0000, 0x0000, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0383, 0x0383, 0x0383, 0x0383, 0x0383, 0x01C7, 0x00FE, 0x007C, 0x0000, 0x0000}, // 'o' + {0x0000, 0x0000, 0x0000, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x03CF, 0x03FE, 0x03BC, 0x0380, 0x0380, 0x0380}, // 'p' + {0x0000, 0x0000, 0x0000, 0x0077, 0x00FF, 0x01CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x00FF, 0x0077, 0x0007, 0x0007, 0x0007}, // 'q' + {0x0000, 0x0000, 0x0000, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0000, 0x0000}, // 'r' + {0x0000, 0x0000, 0x0000, 0x00FC, 0x01FE, 0x0387, 0x0380, 0x01F8, 0x00FE, 0x0007, 0x0007, 0x0387, 0x03FE, 0x01FC, 0x0000, 0x0000}, // 's' + {0x0038, 0x0038, 0x0038, 0x00FF, 0x00FF, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x001F, 0x000F, 0x0000, 0x0000}, // 't' + {0x0000, 0x0000, 0x0000, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x01FF, 0x0077, 0x0000, 0x0000}, // 'u' + {0x0000, 0x0000, 0x0000, 0x0707, 0x0707, 0x038E, 0x038E, 0x038E, 0x01DC, 0x01DC, 0x00F8, 0x00F8, 0x0070, 0x0070, 0x0000, 0x0000}, // 'v' + {0x0000, 0x0000, 0x0000, 0x0E0E, 0x0E0E, 0x0E0E, 0x06B6, 0x06B6, 0x06B6, 0x07F7, 0x07F7, 0x07F7, 0x03E3, 0x03E3, 0x0000, 0x0000}, // 'w' + {0x0000, 0x0000, 0x0000, 0x0707, 0x038E, 0x01DC, 0x00F8, 0x0070, 0x0070, 0x00F8, 0x01DC, 0x038E, 0x0707, 0x0707, 0x0000, 0x0000}, // 'x' + {0x0000, 0x0000, 0x0000, 0x0707, 0x0707, 0x038E, 0x038E, 0x01DC, 0x01DC, 0x00F8, 0x00F8, 0x0070, 0x0070, 0x00E0, 0x01C0, 0x0000}, // 'y' + {0x0000, 0x0000, 0x0000, 0x03FF, 0x03FF, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x03FF, 0x03FF, 0x0000, 0x0000}, // 'z' + + // Left brace (index 91) + {0x000F, 0x001E, 0x001C, 0x001C, 0x001C, 0x001C, 0x0038, 0x0070, 0x0038, 0x001C, 0x001C, 0x001C, 0x001C, 0x001E, 0x000F, 0x0000}, // '{' + + // Vertical bar (index 92) + {0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0000}, // '|' + + // Right brace (index 93) + {0x0078, 0x003C, 0x001C, 0x001C, 0x001C, 0x001C, 0x000E, 0x0007, 0x000E, 0x001C, 0x001C, 0x001C, 0x001C, 0x003C, 0x0078, 0x0000}, // '}' + + // Tilde (index 94) + {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01C7, 0x03EF, 0x077E, 0x0738, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '~' + + // Degree symbol (index 95) + {0x000E, 0x001F, 0x001F, 0x001F, 0x000E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '°' + + // Umlaut characters (index 96-101) + {0x018C, 0x018C, 0x0000, 0x00F8, 0x01FC, 0x038E, 0x038E, 0x038E, 0x03FE, 0x07FF, 0x0707, 0x0707, 0x0707, 0x0707, 0x0000, 0x0000}, // 'Ä' + {0x0318, 0x0318, 0x0000, 0x01F8, 0x03FC, 0x078E, 0x0706, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0706, 0x078E, 0x03FC, 0x01F8, 0x0000}, // 'Ö' + {0x0318, 0x0318, 0x0000, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x070E, 0x07FE, 0x01F8, 0x0000}, // 'Ü' + {0x00C6, 0x00C6, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0007, 0x007F, 0x00FF, 0x01C7, 0x0387, 0x0387, 0x01FF, 0x00F7, 0x0000, 0x0000}, // 'ä' + {0x00C6, 0x00C6, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0383, 0x0383, 0x0383, 0x0383, 0x0383, 0x01C7, 0x00FE, 0x007C, 0x0000, 0x0000}, // 'ö' + {0x00C6, 0x00C6, 0x0000, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x01FF, 0x0077, 0x0000, 0x0000}, // 'ü' + + // Eszett (index 102) + {0x007C, 0x00FE, 0x01C7, 0x01C7, 0x01C7, 0x01CE, 0x01FC, 0x01FE, 0x01CF, 0x01C7, 0x01C7, 0x01CF, 0x01FE, 0x01BC, 0x0180, 0x0180}, // 'ß' + + // Bullet (index 103) + {0x0000, 0x0000, 0x0000, 0x0000, 0x003C, 0x007E, 0x00FF, 0x00FF, 0x00FF, 0x00FF, 0x007E, 0x003C, 0x0000, 0x0000, 0x0000, 0x0000}, // '•' + + // Euro symbol (index 104) + {0x01F8, 0x07FC, 0x0F0E, 0x1C07, 0x1FC0, 0x1FC0, 0x3800, 0x1FC0, 0x1FC0, 0x3800, 0x1FC0, 0x1FC0, 0x1C07, 0x0F0E, 0x07FC, 0x01F8}, // '€' + +}; + +// Character mapping +const char font_chars_16x16[] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°ÄÖÜäßäöü•€"; + +// Declarations only +const uint16_t *getFontChar_16x16(char c); +const uint8_t fontHeight_16x16(); + +#endif \ No newline at end of file diff --git a/lib/Fonts/src/font_5x7.cpp b/lib/Fonts/src/font_5x7.cpp index 005f1a5..e32d962 100644 --- a/lib/Fonts/src/font_5x7.cpp +++ b/lib/Fonts/src/font_5x7.cpp @@ -1,14 +1,19 @@ #include "font_5x7.h" // Function to get font data for a character -const uint8_t *getFontChar(char c) +const uint8_t *getFontChar_5x7(char c) { - for (int i = 0; i < sizeof(font_chars) - 1; i++) + for (int i = 0; i < sizeof(font_chars_5x7) - 1; i++) { - if (font_chars[i] == c) + if (font_chars_5x7[i] == c) { return font_5x7[i]; } } return font_5x7[52]; // Return space if not found (index of ' ') } + +const uint8_t fontHeight_5x7() +{ + return 7; +} diff --git a/lib/Fonts/src/font_5x7.h b/lib/Fonts/src/font_5x7.h index 7d2242e..51eb651 100644 --- a/lib/Fonts/src/font_5x7.h +++ b/lib/Fonts/src/font_5x7.h @@ -115,9 +115,10 @@ const uint8_t font_5x7[][7] = { }; // Character mapping -const char font_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 !?.,:;'\"-_+=*/\\()[]{}<>@#$%&^~°|`¶•"; +const char font_chars_5x7[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 !?.,:;'\"-_+=*/\\()[]{}<>@#$%&^~°|`¶•"; // Declarations only -const uint8_t *getFontChar(char c); +const uint8_t *getFontChar_5x7(char c); +const uint8_t fontHeight_5x7(); #endif \ No newline at end of file diff --git a/lib/Fonts/src/font_8x8.cpp b/lib/Fonts/src/font_8x8.cpp new file mode 100644 index 0000000..44d679e --- /dev/null +++ b/lib/Fonts/src/font_8x8.cpp @@ -0,0 +1,19 @@ +#include "font_8x8.h" + +// Function to get font data for a character +const uint8_t *getFontChar_8x8(char c) +{ + for (int i = 0; i < sizeof(font_chars_8x8) - 1; i++) + { + if (font_chars_8x8[i] == c) + { + return font_8x8[i]; + } + } + return font_8x8[0]; // Return space if not found (index of ' ') +} + +const uint8_t fontHeight_8x8() +{ + return 8; +} diff --git a/lib/Fonts/src/font_8x8.h b/lib/Fonts/src/font_8x8.h new file mode 100644 index 0000000..03c9044 --- /dev/null +++ b/lib/Fonts/src/font_8x8.h @@ -0,0 +1,117 @@ +#ifndef FONT_8X8_H +#define FONT_8X8_H + +#include + +const uint8_t font_8x8[][8] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // ' ' (Space) + {0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x03, 0x00}, // '!' + {0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '"' + {0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // '#' + {0x0C, 0x1F, 0x30, 0x1E, 0x03, 0x3E, 0x0C, 0x00}, // '$' + {0x31, 0x33, 0x06, 0x0C, 0x18, 0x33, 0x23, 0x00}, // '%' + {0x3C, 0x66, 0x3C, 0x38, 0x67, 0x66, 0x3F, 0x00}, // '&' + {0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // "'" + {0x03, 0x06, 0x0C, 0x0C, 0x0C, 0x06, 0x03, 0x00}, // '(' + {0x0C, 0x06, 0x03, 0x03, 0x03, 0x06, 0x0C, 0x00}, // ')' + {0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // '*' + {0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // '+' + {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x06}, // ',' + {0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // '-' + {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00}, // '.' + {0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x00, 0x00}, // '/' + {0x1E, 0x33, 0x37, 0x3B, 0x33, 0x33, 0x1E, 0x00}, // '0' + {0x0C, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // '1' + {0x1E, 0x33, 0x03, 0x06, 0x0C, 0x18, 0x3F, 0x00}, // '2' + {0x1E, 0x33, 0x03, 0x0E, 0x03, 0x33, 0x1E, 0x00}, // '3' + {0x06, 0x0E, 0x1E, 0x36, 0x3F, 0x06, 0x06, 0x00}, // '4' + {0x3F, 0x30, 0x3E, 0x03, 0x03, 0x33, 0x1E, 0x00}, // '5' + {0x1E, 0x33, 0x30, 0x3E, 0x33, 0x33, 0x1E, 0x00}, // '6' + {0x3F, 0x03, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x00}, // '7' + {0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // '8' + {0x1E, 0x33, 0x33, 0x1F, 0x03, 0x33, 0x1E, 0x00}, // '9' + {0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00}, // ':' + {0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x06}, // ';' + {0x00, 0x03, 0x06, 0x0C, 0x06, 0x03, 0x00, 0x00}, // '<' + {0x00, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x00, 0x00}, // '=' + {0x00, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x00, 0x00}, // '>' + {0x1E, 0x33, 0x06, 0x0C, 0x0C, 0x00, 0x0C, 0x00}, // '?' + {0x3C, 0x42, 0x99, 0xA5, 0xA5, 0x9E, 0x40, 0x3C}, // '@' + {0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // 'A' + {0x3E, 0x33, 0x33, 0x3E, 0x33, 0x33, 0x3E, 0x00}, // 'B' + {0x1E, 0x33, 0x30, 0x30, 0x30, 0x33, 0x1E, 0x00}, // 'C' + {0x3C, 0x36, 0x33, 0x33, 0x33, 0x36, 0x3C, 0x00}, // 'D' + {0x3F, 0x30, 0x30, 0x3C, 0x30, 0x30, 0x3F, 0x00}, // 'E' + {0x3F, 0x30, 0x30, 0x3C, 0x30, 0x30, 0x30, 0x00}, // 'F' + {0x1E, 0x33, 0x30, 0x37, 0x33, 0x33, 0x1E, 0x00}, // 'G' + {0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // 'H' + {0x0F, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0F, 0x00}, // 'I' + {0x0F, 0x06, 0x06, 0x06, 0x06, 0x36, 0x1C, 0x00}, // 'J' + {0x33, 0x36, 0x3C, 0x38, 0x3C, 0x36, 0x33, 0x00}, // 'K' + {0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F, 0x00}, // 'L' + {0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x63, 0x00}, // 'M' + {0x33, 0x3B, 0x3F, 0x3F, 0x37, 0x33, 0x33, 0x00}, // 'N' + {0x1E, 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x00}, // 'O' + {0x3E, 0x33, 0x33, 0x3E, 0x30, 0x30, 0x30, 0x00}, // 'P' + {0x1E, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x07, 0x00}, // 'Q' + {0x3E, 0x33, 0x33, 0x3E, 0x3C, 0x36, 0x33, 0x00}, // 'R' + {0x1E, 0x33, 0x30, 0x1E, 0x03, 0x33, 0x1E, 0x00}, // 'S' + {0x3F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00}, // 'T' + {0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x00}, // 'U' + {0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // 'V' + {0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // 'W' + {0x33, 0x33, 0x1E, 0x0C, 0x1E, 0x33, 0x33, 0x00}, // 'X' + {0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x0C, 0x00}, // 'Y' + {0x3F, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x3F, 0x00}, // 'Z' + {0x0F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0F, 0x00}, // '[' + {0x00, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0x00}, // '\' + {0x0F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0F, 0x00}, // ']' + {0x0C, 0x1E, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00}, // '^' + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F}, // '_' + {0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '`' + {0x00, 0x00, 0x1E, 0x03, 0x1F, 0x33, 0x1F, 0x00}, // 'a' + {0x30, 0x30, 0x3E, 0x33, 0x33, 0x33, 0x3E, 0x00}, // 'b' + {0x00, 0x00, 0x1E, 0x33, 0x30, 0x33, 0x1E, 0x00}, // 'c' + {0x03, 0x03, 0x1F, 0x33, 0x33, 0x33, 0x1F, 0x00}, // 'd' + {0x00, 0x00, 0x1E, 0x33, 0x3F, 0x30, 0x1E, 0x00}, // 'e' + {0x0E, 0x1B, 0x18, 0x3C, 0x18, 0x18, 0x18, 0x00}, // 'f' + {0x00, 0x00, 0x1F, 0x33, 0x33, 0x1F, 0x03, 0x3E}, // 'g' + {0x30, 0x30, 0x3E, 0x33, 0x33, 0x33, 0x33, 0x00}, // 'h' + {0x06, 0x00, 0x0E, 0x06, 0x06, 0x06, 0x0F, 0x00}, // 'i' + {0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x33, 0x1E}, // 'j' + {0x30, 0x30, 0x33, 0x36, 0x3C, 0x36, 0x33, 0x00}, // 'k' + {0x0E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0F, 0x00}, // 'l' + {0x00, 0x00, 0x66, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // 'm' + {0x00, 0x00, 0x3E, 0x33, 0x33, 0x33, 0x33, 0x00}, // 'n' + {0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // 'o' + {0x00, 0x00, 0x3E, 0x33, 0x33, 0x3E, 0x30, 0x30}, // 'p' + {0x00, 0x00, 0x1F, 0x33, 0x33, 0x1F, 0x03, 0x03}, // 'q' + {0x00, 0x00, 0x3E, 0x33, 0x30, 0x30, 0x30, 0x00}, // 'r' + {0x00, 0x00, 0x1F, 0x30, 0x1E, 0x03, 0x3E, 0x00}, // 's' + {0x0C, 0x0C, 0x1F, 0x0C, 0x0C, 0x0C, 0x07, 0x00}, // 't' + {0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x1F, 0x00}, // 'u' + {0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // 'v' + {0x00, 0x00, 0x63, 0x6B, 0x7F, 0x3E, 0x36, 0x00}, // 'w' + {0x00, 0x00, 0x33, 0x1E, 0x0C, 0x1E, 0x33, 0x00}, // 'x' + {0x00, 0x00, 0x33, 0x33, 0x33, 0x1F, 0x06, 0x3C}, // 'y' + {0x00, 0x00, 0x3F, 0x06, 0x0C, 0x18, 0x3F, 0x00}, // 'z' + {0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // '{' + {0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00}, // '|' + {0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // '}' + {0x00, 0x00, 0x00, 0x1B, 0x36, 0x00, 0x00, 0x00}, // '~' + {0x0E, 0x11, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00}, // '°' + {0x1F, 0x3D, 0x3D, 0x3D, 0x1D, 0x05, 0x05, 0x00}, // '¶' + {0x00, 0x00, 0x06, 0x0F, 0x0F, 0x06, 0x00, 0x00}, // '•' + {0x1C, 0x3E, 0x7F, 0x7F, 0x1C, 0x1C, 0x3E, 0x00}, // '♠' + {0x1C, 0x1C, 0x3E, 0x7F, 0x36, 0x1C, 0x3E, 0x00}, // '♣' + {0x36, 0x7F, 0x7F, 0x7F, 0x3E, 0x1C, 0x08, 0x00}, // '♥' + {0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x1C, 0x08, 0x00}, // '♦' +}; + +// Character mapping +const char font_chars_8x8[] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°¶•♠♣♥♦"; +// Declarations only +const uint8_t *getFontChar_8x8(char c); +const uint8_t fontHeight_8x8(); + +#endif \ No newline at end of file diff --git a/lib/LedMatrix/src/LedMatrix.cpp b/lib/LedMatrix/src/LedMatrix.cpp index cb177ff..ad38346 100644 --- a/lib/LedMatrix/src/LedMatrix.cpp +++ b/lib/LedMatrix/src/LedMatrix.cpp @@ -10,10 +10,11 @@ LedMatrix::~LedMatrix() { } +// N entspricht Font-Height template -uint8_t LedMatrix::charWidth(const uint8_t *charMatrix) +uint8_t LedMatrix::charWidth(const uint16_t *charMatrix) { - uint8_t max_val = 0; + uint16_t max_val = 0; for (size_t i = 0; i < N; i++) { if (charMatrix[i] > max_val) @@ -29,6 +30,9 @@ uint8_t LedMatrix::charWidth(const uint8_t *charMatrix) // Deshalb 32 - Wert // bei 8 -> 32-28 = 4.Bit // bei 2 -> 32-20 = 2.Bit + + Serial.printf("max_val: [0x%04X] -> %d\n\r", max_val, (32 - __builtin_clz(max_val))); + return (max_val == 0) ? 0 : (32 - __builtin_clz(max_val)); } @@ -43,23 +47,25 @@ void LedMatrix::drawPixel(int x, int y, CRGB color) uint8_t LedMatrix::drawChar(int x, int y, char c, CRGB color) { - const uint8_t *fontData = getFontChar(c); - const u_int8_t char_width_pixel = charWidth<7>(fontData); + const uint16_t *fontData = getFontChar_16x16(c); + const u_int8_t char_width_pixel = charWidth<16>(fontData); + const u_int8_t font_height = fontHeight_16x16(); + const u_int8_t font_width = 16; - for (int row = 0; row < 7; row++) + for (u_int8_t row = 0; row < font_height; row++) { - uint8_t line = fontData[row]; + uint16_t line = fontData[row]; uint8_t mtx_col_offset = 0; // Start Column in der Zeichen-Matrix // Abhängig von Zeichen-Breite // Bsp: Font hat Breite von 5, Zeichen hat Breite 3 // --> dann brauchen wir nur die Spalten 2-4 // denn die Spalten 0 u. 1 haben keine gesetzten Bits - uint8_t start_col = 5 - char_width_pixel; - for (int col = start_col; col < 5; col++) + uint8_t start_col = font_width - char_width_pixel; + for (int col = start_col; col < font_width; col++) { drawPixel(x + mtx_col_offset, y + row, CRGB::SlateGrey); - if (line & (1 << (4 - col))) + if (line & (1 << ((font_width - 1) - col))) { drawPixel(x + mtx_col_offset, y + row, color); } @@ -83,21 +89,21 @@ void LedMatrix::drawText(int x, int y, const char *text, CRGB color) } } -vector LedMatrix::number_to_bitarray_msb(uint16_t number, int bits, boolean four_bits) +vector LedMatrix::number_to_bitarray_msb(uint16_t number, int bits, boolean four_bits) { /** Convert 8/16-bit number to bit array (MSB first) */ - std::vector byte; - byte.reserve(bits); + std::vector two_bytes; + two_bytes.reserve(bits); for (int i = bits - 1; i >= 0; i--) { - byte.push_back((number >> i) & 1); + two_bytes.push_back((number >> i) & 1); } // Debug, Ausgabe des Bytes - Serial.printf("[0x%02X] ", number); + Serial.printf("[0x%04X] ", number); uint8_t idx = 0; - for (auto bit : byte) + for (auto bit : two_bytes) { Serial.printf("%d", bit); idx++; @@ -106,5 +112,5 @@ vector LedMatrix::number_to_bitarray_msb(uint16_t number, int bits, boo } Serial.println(); - return byte; + return two_bytes; } \ No newline at end of file diff --git a/lib/LedMatrix/src/LedMatrix.h b/lib/LedMatrix/src/LedMatrix.h index 0335c88..c425b03 100644 --- a/lib/LedMatrix/src/LedMatrix.h +++ b/lib/LedMatrix/src/LedMatrix.h @@ -7,7 +7,9 @@ using namespace std; #include #include -#include +// #include +// #include +#include class LedMatrix : public CFastLED { @@ -20,7 +22,7 @@ private: vector leds; // Automatic memory management template - uint8_t charWidth(const uint8_t *charMatrix); + uint8_t charWidth(const uint16_t *charMatrix); public: LedMatrix(uint8_t h = 64, uint8_t w = 64); @@ -32,7 +34,7 @@ public: // Draw text string void drawText(int x, int y, const char *text, CRGB color); - vector number_to_bitarray_msb(uint16_t number, int bits = 8, boolean four_bits = false); + vector number_to_bitarray_msb(uint16_t number, int bits = 8, boolean four_bits = false); }; #endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index f7d7df2..1263f92 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,25 +2,28 @@ #include #include #include -#include LedMatrix matrix; void printCharMatrixSimple(char c) { - const uint8_t *fontData = getFontChar(c); + const uint16_t *fontData = getFontChar_16x16(c); + const u_int8_t char_width_pixel = 16; + const u_int8_t font_height = fontHeight_16x16(); Serial.print("<"); Serial.print(c); Serial.println(">"); String mtrx = ""; - for (int row = 0; row < 7; row++) + for (int row = 0; row < font_height; row++) { - uint8_t line = fontData[row]; - for (int col = 0; col < 5; col++) + uint16_t line = fontData[row]; + matrix.number_to_bitarray_msb(line, 16); + + for (int col = 0; col < char_width_pixel; col++) { - if (line & (1 << (4 - col))) + if (line & (1 << ((char_width_pixel - 1) - col))) { mtrx += "•"; } @@ -51,6 +54,22 @@ void playWithBlinkLed() Serial.println("PinStatus: " + led_status); } +void playWithMatrix() +{ + matrix.setBrightness(255); + + matrix.clear(); + matrix.show(); + + // Draw static "HELLO WORLD" + // matrix.drawText(1, 1, "Hello World!", CRGB::Red); + // matrix.drawText(1, 9, "<°|`¶>", CRGB::Yellow); + // matrix.drawText(1, 17, "Bottom", CRGB::Yellow); + // matrix.drawText(1, 25, "ABCDEFGHIJ.", CRGB::Yellow); + matrix.drawText(1, 33, "A", CRGB::Yellow); + matrix.show(); +} + void setup() { // Initialize Serial for debug output @@ -61,20 +80,9 @@ void setup() { delay(10); } - matrix.setBrightness(255); - matrix.clear(); - matrix.show(); - - // Draw static "HELLO WORLD" - matrix.drawText(1, 1, "Hello World!", CRGB::Red); - matrix.drawText(1, 9, "<°|`¶>", CRGB::Yellow); - matrix.drawText(1, 17, "Bottom", CRGB::Yellow); - matrix.drawText(1, 25, "ABCDEFGHIJ.", CRGB::Yellow); - matrix.drawText(1, 33, "Moin u stupid", CRGB::Yellow); - matrix.show(); - - // printCharMatrixSimple('S'); + playWithMatrix(); + printCharMatrixSimple('A'); // matrix.number_to_bitarray_msb(0x8F); // playWithBlinkLed();