v.0.1.0 fonts as vectors
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include "LedMatrix.h"
|
||||
#include <fonts.hpp>
|
||||
|
||||
LedMatrix::LedMatrix(uint8_t h, uint8_t w)
|
||||
: height(h), width(w), num_leds(h * w), leds(num_leds)
|
||||
@@ -10,12 +11,22 @@ LedMatrix::~LedMatrix()
|
||||
{
|
||||
}
|
||||
|
||||
// N entspricht Font-Height
|
||||
template <size_t N>
|
||||
const uint8_t LedMatrix::getFontHeight()
|
||||
{
|
||||
#ifdef USE_FONT_5x7
|
||||
return 7;
|
||||
#elifdef USE_FONT_8x8
|
||||
return 8;
|
||||
#elifdef USE_FONT_16x16
|
||||
return 16;
|
||||
#endif
|
||||
}
|
||||
|
||||
uint8_t LedMatrix::charWidth(const uint8_t *charMatrix)
|
||||
{
|
||||
const uint16_t fHeight = getFontHeight();
|
||||
uint16_t max_val = 0;
|
||||
for (size_t i = 0; i < N; i++)
|
||||
for (size_t i = 0; i < fHeight; i++)
|
||||
{
|
||||
if (charMatrix[i] > max_val)
|
||||
max_val = charMatrix[i];
|
||||
@@ -47,9 +58,17 @@ 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_5x7(c);
|
||||
const u_int8_t char_width_pixel = charWidth<7>(fontData);
|
||||
const u_int8_t font_height = fontHeight_5x7();
|
||||
#ifdef USE_FONT_5x7
|
||||
const std::map<uint8_t, std::vector<uint8_t>> &font = font_5x7;
|
||||
#elifdef USE_FONT_8x8
|
||||
const std::map<uint8_t, std::vector<uint8_t>> &font = font_8x8;
|
||||
#elifdef USE_FONT_16x16
|
||||
const std::map<uint8_t, std::vector<uint8_t>> &font = font_16x16;
|
||||
#endif
|
||||
const vector<uint8_t> &fontData_ = getFontChar(c, font);
|
||||
const uint8_t *fontData = fontData_.data();
|
||||
const u_int8_t char_width_pixel = charWidth(fontData);
|
||||
const u_int8_t font_height = getFontHeight();
|
||||
const u_int8_t font_width = 5;
|
||||
|
||||
for (u_int8_t row = 0; row < font_height; row++)
|
||||
@@ -89,22 +108,29 @@ void LedMatrix::drawText(int x, int y, const char *text, CRGB color)
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t LedMatrix::getTextWidth(const char *text)
|
||||
const uint8_t LedMatrix::getTextWidth(const char *text)
|
||||
{
|
||||
uint8_t totalWidth = 0;
|
||||
for (uint8_t i = 0; text[i] != '\0'; i++)
|
||||
{
|
||||
const uint8_t *fontData = getFontChar_5x7(text[i]);
|
||||
totalWidth += charWidth<7>(fontData) + 1; // char width + spacing
|
||||
#ifdef USE_FONT_5x7
|
||||
const std::map<uint8_t, std::vector<uint8_t>> &font = font_5x7;
|
||||
#elifdef USE_FONT_8x8
|
||||
const std::map<uint8_t, std::vector<uint8_t>> &font = font_8x8;
|
||||
#elifdef USE_FONT_16x16
|
||||
const std::map<uint8_t, std::vector<uint8_t>> &font = font_16x16;
|
||||
#endif
|
||||
const vector<uint8_t> &fontData_ = getFontChar(text[i], font);
|
||||
|
||||
const uint8_t *fontData = fontData_.data();
|
||||
totalWidth += charWidth(fontData) + 1; // char width + spacing
|
||||
}
|
||||
return totalWidth;
|
||||
}
|
||||
|
||||
void LedMatrix::clearRow(uint8_t y)
|
||||
{
|
||||
const u_int8_t font_height = fontHeight_5x7();
|
||||
|
||||
Serial.printf("clearRow: %dx%d@%d\n\r", font_height, width, y);
|
||||
const u_int8_t font_height = getFontHeight();
|
||||
|
||||
for (uint8_t line = y; line < (y + font_height); line++)
|
||||
{
|
||||
|
||||
@@ -3,13 +3,21 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
#define USE_FONT_5x7
|
||||
// #define USE_FONT_8x8
|
||||
// #define USE_FONT_16x16
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <FastLED.h>
|
||||
#include <vector>
|
||||
|
||||
#ifdef USE_FONT_5x7
|
||||
#include <font_5x7.h>
|
||||
// #include <font_8x8.h>
|
||||
// #include <font_16x16.h>
|
||||
#elifdef USE_FONT_8x8
|
||||
#include <font_8x8.h>
|
||||
#elifdef USE_FONT_16x16
|
||||
#include <font_16x16.h>
|
||||
#endif
|
||||
|
||||
class LedMatrix : public CFastLED
|
||||
{
|
||||
@@ -21,14 +29,14 @@ private:
|
||||
uint16_t num_leds; // default 64x64 = 4096 LEDs
|
||||
vector<CRGB> leds; // Automatic memory management
|
||||
|
||||
template <size_t N>
|
||||
uint8_t charWidth(const uint8_t *charMatrix);
|
||||
|
||||
// Text Scrolling
|
||||
int8_t scrollPosition = 0;
|
||||
unsigned long lastScrollTime = 0;
|
||||
|
||||
uint8_t getTextWidth(const char *text);
|
||||
const uint8_t getTextWidth(const char *text);
|
||||
const uint8_t getFontHeight();
|
||||
|
||||
public:
|
||||
LedMatrix(uint8_t h = 64, uint8_t w = 64);
|
||||
|
||||
Reference in New Issue
Block a user