v.0.0.7 font_16x16

This commit is contained in:
tiijay
2025-11-05 11:42:33 +01:00
parent 2589cc3533
commit b7f5e924e0
9 changed files with 423 additions and 43 deletions

View File

@@ -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;
}

203
lib/Fonts/src/font_16x16.h Normal file
View File

@@ -0,0 +1,203 @@
#ifndef FONT_16X16_H
#define FONT_16X16_H
#include <Arduino.h>
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

View File

@@ -1,14 +1,19 @@
#include "font_5x7.h" #include "font_5x7.h"
// Function to get font data for a character // 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[i];
} }
} }
return font_5x7[52]; // Return space if not found (index of ' ') return font_5x7[52]; // Return space if not found (index of ' ')
} }
const uint8_t fontHeight_5x7()
{
return 7;
}

View File

@@ -115,9 +115,10 @@ const uint8_t font_5x7[][7] = {
}; };
// Character mapping // Character mapping
const char font_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 !?.,:;'\"-_+=*/\\()[]{}<>@#$%&^~°|`¶•"; const char font_chars_5x7[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 !?.,:;'\"-_+=*/\\()[]{}<>@#$%&^~°|`¶•";
// Declarations only // Declarations only
const uint8_t *getFontChar(char c); const uint8_t *getFontChar_5x7(char c);
const uint8_t fontHeight_5x7();
#endif #endif

View File

@@ -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;
}

117
lib/Fonts/src/font_8x8.h Normal file
View File

@@ -0,0 +1,117 @@
#ifndef FONT_8X8_H
#define FONT_8X8_H
#include <Arduino.h>
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

View File

@@ -10,10 +10,11 @@ LedMatrix::~LedMatrix()
{ {
} }
// N entspricht Font-Height
template <size_t N> template <size_t N>
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++) for (size_t i = 0; i < N; i++)
{ {
if (charMatrix[i] > max_val) if (charMatrix[i] > max_val)
@@ -29,6 +30,9 @@ uint8_t LedMatrix::charWidth(const uint8_t *charMatrix)
// Deshalb 32 - Wert // Deshalb 32 - Wert
// bei 8 -> 32-28 = 4.Bit // bei 8 -> 32-28 = 4.Bit
// bei 2 -> 32-20 = 2.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)); 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) uint8_t LedMatrix::drawChar(int x, int y, char c, CRGB color)
{ {
const uint8_t *fontData = getFontChar(c); const uint16_t *fontData = getFontChar_16x16(c);
const u_int8_t char_width_pixel = charWidth<7>(fontData); 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; uint8_t mtx_col_offset = 0;
// Start Column in der Zeichen-Matrix // Start Column in der Zeichen-Matrix
// Abhängig von Zeichen-Breite // Abhängig von Zeichen-Breite
// Bsp: Font hat Breite von 5, Zeichen hat Breite 3 // Bsp: Font hat Breite von 5, Zeichen hat Breite 3
// --> dann brauchen wir nur die Spalten 2-4 // --> dann brauchen wir nur die Spalten 2-4
// denn die Spalten 0 u. 1 haben keine gesetzten Bits // denn die Spalten 0 u. 1 haben keine gesetzten Bits
uint8_t start_col = 5 - char_width_pixel; uint8_t start_col = font_width - char_width_pixel;
for (int col = start_col; col < 5; col++) for (int col = start_col; col < font_width; col++)
{ {
drawPixel(x + mtx_col_offset, y + row, CRGB::SlateGrey); 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); 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<uint8_t> LedMatrix::number_to_bitarray_msb(uint16_t number, int bits, boolean four_bits) vector<uint16_t> LedMatrix::number_to_bitarray_msb(uint16_t number, int bits, boolean four_bits)
{ {
/** Convert 8/16-bit number to bit array (MSB first) */ /** Convert 8/16-bit number to bit array (MSB first) */
std::vector<uint8_t> byte; std::vector<uint16_t> two_bytes;
byte.reserve(bits); two_bytes.reserve(bits);
for (int i = bits - 1; i >= 0; i--) 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 // Debug, Ausgabe des Bytes
Serial.printf("[0x%02X] ", number); Serial.printf("[0x%04X] ", number);
uint8_t idx = 0; uint8_t idx = 0;
for (auto bit : byte) for (auto bit : two_bytes)
{ {
Serial.printf("%d", bit); Serial.printf("%d", bit);
idx++; idx++;
@@ -106,5 +112,5 @@ vector<uint8_t> LedMatrix::number_to_bitarray_msb(uint16_t number, int bits, boo
} }
Serial.println(); Serial.println();
return byte; return two_bytes;
} }

View File

@@ -7,7 +7,9 @@ using namespace std;
#include <FastLED.h> #include <FastLED.h>
#include <vector> #include <vector>
#include <font_5x7.h> // #include <font_5x7.h>
// #include <font_8x8.h>
#include <font_16x16.h>
class LedMatrix : public CFastLED class LedMatrix : public CFastLED
{ {
@@ -20,7 +22,7 @@ private:
vector<CRGB> leds; // Automatic memory management vector<CRGB> leds; // Automatic memory management
template <size_t N> template <size_t N>
uint8_t charWidth(const uint8_t *charMatrix); uint8_t charWidth(const uint16_t *charMatrix);
public: public:
LedMatrix(uint8_t h = 64, uint8_t w = 64); LedMatrix(uint8_t h = 64, uint8_t w = 64);
@@ -32,7 +34,7 @@ public:
// Draw text string // Draw text string
void drawText(int x, int y, const char *text, CRGB color); void drawText(int x, int y, const char *text, CRGB color);
vector<uint8_t> number_to_bitarray_msb(uint16_t number, int bits = 8, boolean four_bits = false); vector<uint16_t> number_to_bitarray_msb(uint16_t number, int bits = 8, boolean four_bits = false);
}; };
#endif #endif

View File

@@ -2,25 +2,28 @@
#include <MyClass.h> #include <MyClass.h>
#include <BlinkInternLed.h> #include <BlinkInternLed.h>
#include <LedMatrix.h> #include <LedMatrix.h>
#include <font_5x7.h>
LedMatrix matrix; LedMatrix matrix;
void printCharMatrixSimple(char c) 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("<");
Serial.print(c); Serial.print(c);
Serial.println(">"); Serial.println(">");
String mtrx = ""; String mtrx = "";
for (int row = 0; row < 7; row++) for (int row = 0; row < font_height; row++)
{ {
uint8_t line = fontData[row]; uint16_t line = fontData[row];
for (int col = 0; col < 5; col++) 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 += ""; mtrx += "";
} }
@@ -51,6 +54,22 @@ void playWithBlinkLed()
Serial.println("PinStatus: " + led_status); 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() void setup()
{ {
// Initialize Serial for debug output // Initialize Serial for debug output
@@ -61,20 +80,9 @@ void setup()
{ {
delay(10); delay(10);
} }
matrix.setBrightness(255);
matrix.clear(); playWithMatrix();
matrix.show(); printCharMatrixSimple('A');
// 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');
// matrix.number_to_bitarray_msb(0x8F); // matrix.number_to_bitarray_msb(0x8F);
// playWithBlinkLed(); // playWithBlinkLed();