flamezz
This commit is contained in:
parent
34bf5e1c54
commit
def486e7a7
@ -11,6 +11,8 @@ enum DisplayStyle {
|
||||
Congress,
|
||||
Supercomputer,
|
||||
Cyber,
|
||||
Plasma
|
||||
Plasma,
|
||||
Flame,
|
||||
NumStyles
|
||||
};
|
||||
#endif
|
||||
|
85
nametag/src/flame.cpp
Normal file
85
nametag/src/flame.cpp
Normal file
@ -0,0 +1,85 @@
|
||||
#include "constants.h"
|
||||
#include "flame.h"
|
||||
|
||||
#define FLAME_PALETTE_SIZE 36
|
||||
|
||||
uint16_t flame_palette[] = {
|
||||
0x0020,
|
||||
0x1820,
|
||||
0x2860,
|
||||
0x4060,
|
||||
0x50A0,
|
||||
0x60E0,
|
||||
0x70E0,
|
||||
0x8920,
|
||||
0x9960,
|
||||
0xA9E0,
|
||||
0xBA20,
|
||||
0xC220,
|
||||
0xDA60,
|
||||
0xDAA0,
|
||||
0xDAA0,
|
||||
0xD2E0,
|
||||
0xD321,
|
||||
0xCB61,
|
||||
0xCBA1,
|
||||
0xCBE1,
|
||||
0xCC23,
|
||||
0xC422,
|
||||
0xC462,
|
||||
0xC4A3,
|
||||
0xBCE3,
|
||||
0xBCE3,
|
||||
0xBD24,
|
||||
0xBD24,
|
||||
0xBD65,
|
||||
0xB565,
|
||||
0xB5A5,
|
||||
0xB5A6,
|
||||
0xCE6D,
|
||||
0xDEF3,
|
||||
0xEF78,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
int framebuffer[PANEL_WIDTH * PANEL_HEIGHT];
|
||||
bool flame_ready = false;
|
||||
|
||||
void spread_fire(int from) {
|
||||
int rand = random(1, 4);
|
||||
int to = from - PANEL_WIDTH - rand + 1;
|
||||
if (to < 0) {
|
||||
to = 0;
|
||||
}
|
||||
framebuffer[to] = framebuffer[from] - rand;
|
||||
if (framebuffer[to] < 0)
|
||||
framebuffer[to] = 0;
|
||||
}
|
||||
|
||||
void do_fire() {
|
||||
for(int x = 0 ; x < PANEL_WIDTH; x++) {
|
||||
for (int y = 1; y < PANEL_HEIGHT ; y++) {
|
||||
spread_fire(y * PANEL_WIDTH + x);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void setup_flame() {
|
||||
memset(framebuffer, 0, sizeof framebuffer);
|
||||
for (int i = 0; i < PANEL_WIDTH; i++) {
|
||||
framebuffer[(PANEL_WIDTH * PANEL_HEIGHT - i - 1)] = FLAME_PALETTE_SIZE - 1;
|
||||
}
|
||||
}
|
||||
|
||||
void draw_flame(MatrixPanel_I2S_DMA *matrix, enum Mode mode) {
|
||||
if(not flame_ready) {
|
||||
setup_flame();
|
||||
flame_ready = true;
|
||||
}
|
||||
do_fire();
|
||||
for(int p = 0; p < PANEL_HEIGHT * PANEL_WIDTH; p++) {
|
||||
matrix->drawPixel(p % PANEL_WIDTH, p / PANEL_WIDTH, flame_palette[framebuffer[p]]);
|
||||
}
|
||||
|
||||
}
|
4
nametag/src/flame.h
Normal file
4
nametag/src/flame.h
Normal file
@ -0,0 +1,4 @@
|
||||
#include "xtensa/core-macros.h"
|
||||
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
|
||||
#include "enums.h"
|
||||
void draw_flame(MatrixPanel_I2S_DMA *matrix, enum Mode mode);
|
@ -8,13 +8,18 @@
|
||||
#include "rain.h"
|
||||
#include "supercomputer.h"
|
||||
#include "cyber.h"
|
||||
#include "flame.h"
|
||||
|
||||
#include "pillowlava8pt7b.h"
|
||||
|
||||
#define CYCLE_TIME_MS 20000
|
||||
|
||||
MatrixPanel_I2S_DMA *matrix = nullptr;
|
||||
|
||||
Mode mode = HighVis;
|
||||
DisplayStyle style = Rain;
|
||||
DisplayStyle style = Flame;
|
||||
|
||||
unsigned long last_switch;
|
||||
|
||||
void setup(){
|
||||
pinMode(ONBOARD_LED, OUTPUT);
|
||||
@ -25,6 +30,8 @@ void setup(){
|
||||
HUB75_I2S_CFG::i2s_pins _pins={R1, G1, BL1, R2, G2, BL2, CH_A, CH_B, CH_C, CH_D, CH_E, LAT, OE, CLK};
|
||||
HUB75_I2S_CFG mxconfig(PANEL_WIDTH, PANEL_HEIGHT, PANELS_NUMBER, _pins);
|
||||
|
||||
last_switch = millis();
|
||||
|
||||
mxconfig.gpio.e = PIN_E;
|
||||
mxconfig.driver = HUB75_I2S_CFG::FM6126A; // for panels using FM6126A chips
|
||||
|
||||
@ -47,6 +54,12 @@ void loop() {
|
||||
matrix->clearScreen();
|
||||
delay(25);
|
||||
|
||||
if (millis() - last_switch > CYCLE_TIME_MS) {
|
||||
// next style
|
||||
style = DisplayStyle((style + 1) % (NumStyles - 1));
|
||||
last_switch = millis();
|
||||
}
|
||||
|
||||
if(!digitalRead(BACK_BUTTON)) {
|
||||
switch(mode) {
|
||||
case Stealth:
|
||||
@ -66,7 +79,6 @@ void loop() {
|
||||
switch(style) {
|
||||
case Rain:
|
||||
style = Congress;
|
||||
matrix->setFont(&Pilowlava_Regular8pt7b);
|
||||
break;
|
||||
case Congress:
|
||||
style = Supercomputer;
|
||||
@ -86,6 +98,7 @@ void loop() {
|
||||
draw_rain(matrix, mode);
|
||||
break;
|
||||
case Congress:
|
||||
matrix->setFont(&Pilowlava_Regular8pt7b);
|
||||
draw_congress(matrix, mode);
|
||||
break;
|
||||
case Supercomputer:
|
||||
@ -94,6 +107,9 @@ void loop() {
|
||||
case Cyber:
|
||||
draw_cyber(matrix, mode);
|
||||
break;
|
||||
case Flame:
|
||||
draw_flame(matrix, mode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user