Emil 5. Geburtstag + Creeper

This commit is contained in:
Patrick Haßel 2025-01-19 23:59:22 +01:00
parent 0d73d112b1
commit 6b4ed1658c
3 changed files with 482 additions and 373 deletions

View File

@ -134,6 +134,41 @@ bool SYMBOLS[SYMBOL_COUNT][DISPLAY_CHAR_WIDTH * DISPLAY_CHAR_HEIGHT] = {
X, _, _, X, _, _,
X, X, X, X, X, X,
}, },
{
X, _, X,
X, _, X,
X, X, X,
X, _, X,
X, _, X,
},
{
X, X, _,
X, _, X,
X, X, _,
X, X, _,
X, _, X,
},
{
X, _, _,
X, _, _,
X, _, _,
X, _, _,
X, _, _,
},
{
X, _, _,
X, _, _,
X, _, _,
X, _, _,
X, X, X,
},
{
_, _, _,
_, _, _,
_, _, _,
_, _, _,
_, _, _,
},
// this must always be the last symbol (fallback) // this must always be the last symbol (fallback)
{ {
X, X, X, X, X, X,

View File

@ -5,15 +5,21 @@
#include "Adafruit_NeoPixel.h" #include "Adafruit_NeoPixel.h"
#include "Vector.h" #include "Vector.h"
#define SYMBOL_COUNT 20 #define SYMBOL_COUNT 26
#define SYMBOL_J 11
#define SYMBOL_X 12
#define SYMBOL_DASH 13 #define SYMBOL_DASH 13
#define SYMBOL_PERCENT 14 #define SYMBOL_PERCENT 14
#define SYMBOL_T 15 #define SYMBOL_T 15
#define SYMBOL_A 16 #define SYMBOL_A 16
#define SYMBOL_G 17 #define SYMBOL_G 17
#define SYMBOL_E 18 #define SYMBOL_E 18
#define SYMBOL_H 19
#define SYMBOL_R 20
#define SYMBOL_I 21
#define SYMBOL_L 22
#define SYMBOL_SPACE 23
#define DISPLAY_CHAR_WIDTH 3 #define DISPLAY_CHAR_WIDTH 3
#define DISPLAY_CHAR_HEIGHT 5 #define DISPLAY_CHAR_HEIGHT 5
@ -48,8 +54,7 @@ private:
public: public:
Display(uint8_t width, uint8_t height) : Display(uint8_t width, uint8_t height) : width(width), height(height),
width(width), height(height),
pixelCount(width * height), pixelCount(width * height),
pixelByteCount(pixelCount * sizeof(Color)), pixelByteCount(pixelCount * sizeof(Color)),
leds(pixelCount, GPIO_NUM_13) { leds(pixelCount, GPIO_NUM_13) {
@ -164,6 +169,57 @@ public:
return DISPLAY_CHAR_WIDTH; return DISPLAY_CHAR_WIDTH;
} }
// TODO REMOVE QUICK & DIRTY
uint8_t printM(uint8_t xPos, uint8_t yPos, Color color) {
bool sym[5][5] = {
{X,_,_,_,X},
{X,X,_,X,X},
{X,_,X,_,X},
{X,_,_,_,X},
{X,_,_,_,X},
};
for (int y = 0; y < countof(sym); ++y) {
for (int x = 0; x < countof(sym[0]); ++x) {
if (sym[y][x]) {
set(xPos + x, yPos + y, color);
} else {
set(xPos + x, yPos + y, BLACK);
}
}
}
return countof(sym[0]);
}
// TODO REMOVE QUICK & DIRTY
uint8_t printCreeper(uint8_t xPos, uint8_t yPos) {
Color G = GREEN;
Color I = {128, 255, 128};
Color O = BLACK;
Color sym[7][7] = {
{G, G, G, G, G, G, G},
{G, I, I, I, I, I, G},
{G, I, O, I, O, I, G},
{G, I, I, I, I, I, G},
{G, I, O, O, O, I, G},
{G, I, O, I, O, I, G},
{G, G, G, G, G, G, G},
};
for (int y = 0; y < countof(sym); ++y) {
for (int x = 0; x < countof(sym[0]); ++x) {
set(xPos + x, yPos + y, sym[y][x]);
}
}
return countof(sym[0]);
}
// TODO REMOVE QUICK & DIRTY
uint8_t printI(uint8_t xPos, uint8_t yPos, Color color) {
for (int y = 0; y < 5; ++y) {
set(xPos, yPos + y, color);
}
return 1;
}
void set(Vector pos, Color color) { void set(Vector pos, Color color) {
set((uint8_t) round(pos.x), (uint8_t) round(pos.y), color); set((uint8_t) round(pos.x), (uint8_t) round(pos.y), color);
} }

View File

@ -1,7 +1,7 @@
#ifndef MODE_COUNT_DOWN_H #ifndef MODE_COUNT_DOWN_H
#define MODE_COUNT_DOWN_H #define MODE_COUNT_DOWN_H
#define MAX_FIREWORKS 5 #define MAX_FIREWORKS 6
#include "mode/Mode.h" #include "mode/Mode.h"
#include "CountDownFirework.h" #include "CountDownFirework.h"
@ -28,8 +28,7 @@ private:
public: public:
CountDown(Display &display, bool bars, bool plus1DayForSleepingCount) : CountDown(Display& display, bool bars, bool plus1DayForSleepingCount) : Mode(display), bars(bars), plus1DayForSleepingCount(plus1DayForSleepingCount) {
Mode(display), bars(bars), plus1DayForSleepingCount(plus1DayForSleepingCount) {
for (auto& firework: fireworks) { for (auto& firework: fireworks) {
firework.init(display); firework.init(display);
} }
@ -266,13 +265,32 @@ private:
} }
} }
static void drawYear(Display &display, int year) { // ReSharper disable CppDFAUnusedValue
void drawYear(Display& display, int year) const {
if (plus1DayForSleepingCount) {
uint8_t x = 0;
x += display.print(x, 1,SYMBOL_E, WHITE, true);
x += 1;
x += display.printM(x, 1, WHITE);
x += 1;
x += display.printI(x, 1, WHITE);
x += 1;
x += display.print(x, 1,SYMBOL_L, WHITE, true);
x += 4;
x += display.print(x, 1, 5, WHITE, true);
x += 2;
display.printCreeper(x, 0);
} else {
uint8_t x = 8; uint8_t x = 8;
x += display.print(x, 1, year / 1000 % 10, WHITE, true) + 1; x += display.print(x, 1, year / 1000 % 10, WHITE, true) + 1;
x += display.print(x, 1, year / 100 % 10, WHITE, true) + 1; x += display.print(x, 1, year / 100 % 10, WHITE, true) + 1;
x += display.print(x, 1, year / 10 % 10, WHITE, true) + 1; x += display.print(x, 1, year / 10 % 10, WHITE, true) + 1;
display.print(x, 1, year / 1 % 10, WHITE, true); x += display.print(x, 1, year / 1 % 10, WHITE, true);
} }
}
// ReSharper restore CppDFAUnusedValue
}; };