Compare commits

..

No commits in common. "master" and "organism" have entirely different histories.

30 changed files with 283 additions and 1408 deletions

View File

@ -1,30 +1,11 @@
# lumagrid
Drives a 64x32 HUB75 panel using an Adafruit Matrix Portal S3.
Drives a 64x32 HUB75 panel using an ESP32.
## Applications
Currently plays Bad Apple!!
### nametag
Ideas:
Displays my name.
Upper button changes visibility level, lower button changes display style.
|Style|Description|Visibility 0|Visibility 1|Visibility 2|
|--|--|--|--|--|
|Rain|Matrix-style digital rain|No highlights|Overlay is highlighted|Highlights do not fade|
|38C3|38C3 themed font and background|Show only "38C3"|Show only "Panki"|Rotating text with name and DECT extension|
|Supercomputer|Inspired by a [BigClive video](https://www.youtube.com/watch?v=7f8jgvvJe-Q)|Red only|Rainbow, inverted name|Rainbow name, no background|
|Cyber|The classic CYBER Sticker|Static|Moving text|Moving text|
### gifplayer
Plays included GIF files. Buttons skip forward/backward.
### organism
Approximation of a Physarum (aka slime mold) transport network.
To learn more about this, read [this blog post](https://www.moll.dev/projects/physarum/) by Thomas Moll which helped a lot in getting started on this.
The original paper on which this is based on is titled "Pattern Formation and Evolution in Approximations of Physarum Transport Networks" by Jeff Jones and can be found [here](https://uwe-repository.worktribe.com/js/pdfjs/web/viewer.html?file=https://uwe-repository.worktribe.com/previewfile/980585/artl.2010.16.2.pdf).
CYBER Absperrband
Nyancat
Matrix Digital Rain

View File

@ -1,21 +0,0 @@
# Uncomment lines below if you have problems with $PATH
#SHELL := /bin/bash
#PATH := /usr/local/bin:$(PATH)
all:
pio.exe -f -c vim run
upload:
pio.exe -f -c vim run --target upload
clean:
pio.exe -f -c vim run --target clean
program:
pio.exe -f -c vim run --target program
uploadfs:
pio.exe -f -c vim run --target uploadfs
update:
pio.exe -f -c vim update

View File

@ -1,22 +0,0 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:adafruit_matrixportal_esp32s3]
platform = espressif32
board = adafruit_matrixportal_esp32s3
framework = arduino
monitor_speed = 115200
lib_deps =
adafruit/Adafruit GFX Library
adafruit/Adafruit BusIO
Wire
fastled/FastLED
https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA.git

View File

@ -1,4 +0,0 @@
// config.h
#define WIFI_SSID PankiNet
#define WIFI_PSK foo

View File

@ -1,26 +0,0 @@
#define R1 42
#define G1 40
#define BL1 41
#define R2 38
#define G2 37
#define BL2 39
#define CH_A 45
#define CH_B 36
#define CH_C 48
#define CH_D 35
#define CH_E 21
#define CLK 2
#define LAT 47
#define OE 14
#define PIN_E 21
#define PANEL_WIDTH 64
#define PANEL_HEIGHT 32 // Panel height of 64 will required PIN_E to be defined.
#define PANELS_NUMBER 1
#define PANE_WIDTH PANEL_WIDTH * PANELS_NUMBER
#define PANE_HEIGHT PANEL_HEIGHT
#define NUM_LEDS PANE_WIDTH*PANE_HEIGHT
#define ONBOARD_LED 13

View File

@ -1,110 +0,0 @@
#include <Arduino.h>
#include "xtensa/core-macros.h"
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
#include "main.h"
#include "constants.h"
#include "config.h"
#include "util.h"
#include <vector>
#include <string>
MatrixPanel_I2S_DMA *matrix = nullptr;
void setup(){
Serial.begin(BAUD_RATE);
//while (!Serial) {
// ; // wait for serial port to connect. Needed for native USB
//}
pinMode(ONBOARD_LED, OUTPUT);
// redefine pins if required
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);
mxconfig.gpio.e = PIN_E;
mxconfig.driver = HUB75_I2S_CFG::FM6126A; // for panels using FM6126A chips
mxconfig.latch_blanking = 4;
mxconfig.i2sspeed = HUB75_I2S_CFG::HZ_10M;
mxconfig.clkphase = false;
// mxconfig.double_buff = true;
matrix = new MatrixPanel_I2S_DMA(mxconfig);
matrix->begin();
matrix->setBrightness8(64);
matrix->fillScreenRGB888(0, 0, 0);
}
void draw_title(const std::string& title, uint16_t color) {
int y_pos = 0;
int x_pos = 0;
//matrix->setCursor(x_pos, y_pos);
for (size_t idx = 0; idx < title.size(); idx++) {
char current = title[idx];
if (current != ' ') {
if (current == 'I') {
x_pos -=1;
}
matrix->drawChar(x_pos, y_pos, current, color, matrix->color444(0,0,0), 1);
if (current == 'I') {
x_pos += 5;
} else {
x_pos += 6; // char width + 1px gap
}
} else {
x_pos += 2; // small space
}
if (x_pos > (63 - 5)) { // new line
if (current != ' ') {
matrix->drawChar(x_pos, y_pos, '-', color, matrix->color444(0,0,0), 1);
}
x_pos = 0;
y_pos = y_pos + 8; //char height + 1px
}
}
}
void draw_time(const std::string &time) {
int x_pos = 0;
int y_pos = 32 - 8;
for (size_t idx = 0; idx < time.size(); idx++) {
char current = time[idx];
int offset = 0;
switch (current) {
case '1':
offset = 1;
break;
}
if (current == ':') {
matrix->drawPixel(x_pos, y_pos + 2, matrix->color444(1,1,1));
matrix->drawPixel(x_pos, y_pos + 4, matrix->color444(1,1,1));
x_pos = x_pos + 2;
} else {
x_pos = x_pos - offset;
matrix->drawChar(x_pos, y_pos, current, matrix->color444(1,1,1), matrix->color444(0,0,0), 1);
x_pos = x_pos + (6 - offset);
}
}
}
void draw_location(const std::string &location) {
int pixel_size = (location.size() * 6) - 1;
matrix->setCursor(63 - pixel_size, 32 - 8);
matrix->print(location.c_str());
}
void loop() {
std::string title = "THE ART OF TEXT RENDERING";
std::string time = "11:00";
std::string loc = "GRND";
draw_title(title, matrix->color565(249, 176, 0));
draw_time(time);
draw_location(loc);
delay(100);
}

View File

@ -1,10 +0,0 @@
#include <FastLED.h>
#define BAUD_RATE 115200 // serial debug port baud rate
void buffclear(CRGB *buf);
uint16_t XY16( uint16_t x, uint16_t y);
void mxfill(CRGB *leds);
uint16_t colorWheel(uint8_t pos);
void drawText(int colorWheelOffset);

View File

@ -1,5 +0,0 @@
#include "constants.h"
bool is_in_bounds(int x, int y) {
return (x < PANEL_WIDTH) and (y < PANEL_HEIGHT) and (x >= 0) and (y >= 0);
}

View File

@ -1,2 +0,0 @@
bool is_in_bounds(int x, int y);

View File

@ -13,7 +13,6 @@ platform = espressif32
board = adafruit_matrixportal_esp32s3
framework = arduino
monitor_speed = 115200
build_flags = -Ilib -Isrc
lib_deps =
adafruit/Adafruit GFX Library

View File

@ -0,0 +1,184 @@
const uint8_t CaveatBrush_Regular9pt7bBitmaps[] PROGMEM = {
0x00, 0x25, 0xB6, 0xDB, 0x6D, 0x81, 0xD8, 0xDE, 0xF5, 0x29, 0x48, 0x06,
0x40, 0x4E, 0x0C, 0xC0, 0xDF, 0x0F, 0xC7, 0xD8, 0xF1, 0xE1, 0xFE, 0xFF,
0x0F, 0x30, 0x23, 0x06, 0x20, 0x62, 0x00, 0x10, 0x47, 0xF7, 0xDF, 0x5F,
0x1E, 0x3C, 0xBA, 0xFF, 0x78, 0x82, 0x00, 0x60, 0x03, 0x80, 0x34, 0x01,
0xB1, 0x8D, 0x98, 0x68, 0x83, 0x4C, 0x0C, 0xCC, 0x06, 0xF0, 0x66, 0x82,
0x24, 0x31, 0xA1, 0x0F, 0x08, 0x30, 0x18, 0x1E, 0x0B, 0x05, 0x83, 0x81,
0xD9, 0xED, 0xF6, 0xCF, 0x67, 0x33, 0xDF, 0xF7, 0x38, 0xFE, 0xA0, 0x3B,
0x99, 0xCE, 0x63, 0x18, 0xC6, 0x30, 0x86, 0x10, 0xC3, 0x30, 0x41, 0x86,
0x18, 0x61, 0xC7, 0x18, 0x61, 0x84, 0x33, 0x80, 0x30, 0x5F, 0xCE, 0xF1,
0x40, 0x10, 0x10, 0x10, 0xFE, 0xFF, 0x18, 0x18, 0x18, 0xFF, 0x80, 0xFF,
0xE0, 0xBD, 0x0C, 0x21, 0x86, 0x10, 0xC3, 0x08, 0x61, 0x84, 0x30, 0xC3,
0x08, 0x00, 0x3C, 0x3C, 0x7E, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6E,
0x7C, 0x3C, 0x08, 0x73, 0x9E, 0xF8, 0x61, 0x86, 0x18, 0x61, 0x86, 0x38,
0xF9, 0xDB, 0x34, 0xE3, 0x87, 0x1C, 0x70, 0xC3, 0xF3, 0xF0, 0x1C, 0xFD,
0xFA, 0x30, 0xE1, 0x8F, 0x1F, 0x06, 0x0F, 0xF7, 0xE7, 0x00, 0x0E, 0x0F,
0x07, 0x86, 0xC7, 0x63, 0x23, 0xBD, 0xFF, 0xFC, 0x76, 0x03, 0x01, 0x80,
0xC0, 0x7E, 0x7F, 0x60, 0x60, 0x7C, 0xFE, 0x03, 0x07, 0x1E, 0x7C, 0xF8,
0x40, 0x0C, 0x1C, 0x38, 0x38, 0x30, 0x7E, 0x7F, 0x73, 0x67, 0xE6, 0x6E,
0x78, 0x10, 0xFD, 0xFD, 0xF8, 0xE1, 0x87, 0x0C, 0x18, 0x70, 0xC1, 0x83,
0x00, 0x1C, 0x3E, 0x72, 0x72, 0x36, 0x3C, 0x1C, 0x3E, 0x6E, 0x67, 0xE7,
0x47, 0x6E, 0x3C, 0x1E, 0x3E, 0x77, 0x67, 0xE7, 0xEF, 0xFE, 0x76, 0x0E,
0x0E, 0x0C, 0x1C, 0x08, 0xFC, 0x2F, 0xC0, 0xFC, 0x0F, 0xF8, 0x0E, 0x38,
0xE7, 0x06, 0x06, 0x06, 0x06, 0xFF, 0xE0, 0x00, 0xEF, 0xE0, 0xE0, 0xE0,
0xE0, 0x70, 0xE3, 0x0C, 0x30, 0x11, 0xF6, 0xF3, 0xDC, 0x63, 0x8C, 0x71,
0x80, 0x00, 0x61, 0x80, 0x03, 0x01, 0xF0, 0x71, 0x18, 0x33, 0x72, 0xDB,
0xDA, 0xDA, 0x56, 0xDD, 0xD9, 0x81, 0x00, 0x21, 0x83, 0xF0, 0x3C, 0x00,
0x1C, 0x1C, 0x3E, 0x36, 0x36, 0x66, 0x7E, 0x7E, 0x66, 0x67, 0xE3, 0xE3,
0x71, 0xFB, 0xB6, 0x2C, 0xDB, 0x3F, 0x63, 0xC7, 0x8F, 0x3F, 0xE7, 0x80,
0x38, 0xFB, 0xBF, 0x6C, 0xD8, 0x30, 0x60, 0xC1, 0x83, 0xB3, 0xE3, 0x80,
0x7C, 0xFE, 0xF7, 0x73, 0x63, 0x63, 0x63, 0x63, 0x66, 0x66, 0x7C, 0x78,
0x20, 0x7D, 0xE6, 0x38, 0xE3, 0x2F, 0xB8, 0xC3, 0x0C, 0x3F, 0x78, 0x0E,
0xFF, 0xE0, 0x60, 0x60, 0x7C, 0xFC, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
0x3E, 0x7A, 0x60, 0xE0, 0xC2, 0xCE, 0xCB, 0xC3, 0xC7, 0xEE, 0xFE, 0x16,
0x06, 0xE1, 0xE3, 0xE3, 0xE3, 0xC3, 0xFF, 0xFB, 0xC7, 0xC6, 0xC6, 0xE7,
0x43, 0x08, 0xFD, 0xE0, 0xC3, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC3, 0xEF,
0x80, 0x1E, 0xFC, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0D, 0x99, 0x33, 0xC1,
0x00, 0x60, 0x67, 0x66, 0x6C, 0xF8, 0xF0, 0xF0, 0xF0, 0xF8, 0xDC, 0xCE,
0xCF, 0xC0, 0x63, 0x39, 0x8C, 0x63, 0x18, 0xC6, 0x76, 0xF0, 0x00, 0x0C,
0x77, 0x1D, 0xC7, 0x71, 0xDE, 0xFF, 0xBF, 0x6F, 0xDF, 0xF7, 0xBD, 0xCF,
0x33, 0x40, 0x40, 0x63, 0x63, 0xF3, 0xF3, 0xF2, 0xF2, 0xDA, 0xDA, 0xDE,
0xDE, 0xCE, 0xC6, 0x38, 0xF9, 0xB7, 0x7C, 0xF8, 0xF1, 0xE3, 0xC7, 0x8F,
0x37, 0xE7, 0x80, 0x7C, 0xFE, 0x31, 0x31, 0x31, 0x33, 0x37, 0x3E, 0x7C,
0x30, 0x30, 0x30, 0x10, 0x10, 0x3C, 0x7C, 0x66, 0xE6, 0xE6, 0xE6, 0xC6,
0xC6, 0xC6, 0xD4, 0xDC, 0x7C, 0x06, 0x03, 0x7C, 0xFE, 0x62, 0x66, 0xDC,
0xF8, 0xF0, 0xD8, 0xD8, 0xDC, 0xCE, 0xC3, 0x3C, 0x7D, 0xBB, 0x36, 0x4E,
0x0E, 0x0E, 0x0E, 0x8F, 0x9B, 0xF3, 0xC0, 0x03, 0x8F, 0xFF, 0x01, 0x80,
0xC0, 0x60, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0x80, 0xE2, 0xE6,
0xE6, 0xC6, 0xC6, 0xC6, 0xCE, 0xCE, 0xCE, 0xDE, 0xFE, 0x76, 0x00, 0x01,
0xB1, 0xD8, 0xCC, 0x66, 0x33, 0x11, 0x98, 0xEC, 0x34, 0x1E, 0x0F, 0x07,
0x81, 0x80, 0x66, 0xF9, 0xBE, 0x6F, 0x9B, 0xE6, 0xF3, 0xBC, 0xEF, 0x7F,
0xDF, 0xBD, 0xEF, 0x31, 0x80, 0x61, 0xB1, 0xCC, 0xC6, 0xE1, 0xE0, 0xE0,
0x70, 0x78, 0x36, 0x3B, 0x39, 0xCC, 0x60, 0x66, 0x66, 0x66, 0x67, 0x67,
0x76, 0x36, 0x3E, 0x0E, 0x0E, 0xCC, 0x7C, 0x38, 0x7F, 0xBF, 0xC1, 0xC0,
0xC0, 0xE0, 0xE0, 0x60, 0x60, 0x70, 0x30, 0xBF, 0xDF, 0x84, 0x00, 0x79,
0xF6, 0x10, 0x41, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x1E, 0x7C,
0x83, 0x0C, 0x18, 0x60, 0x83, 0x0C, 0x10, 0x61, 0x86, 0x08, 0x30, 0xC0,
0xF9, 0xE0, 0x82, 0x0C, 0x20, 0x82, 0x08, 0x20, 0x82, 0x18, 0x61, 0xBE,
0x78, 0x00, 0x63, 0x9F, 0x4E, 0x30, 0x40, 0xFF, 0xFF, 0xE0, 0xC6, 0x30,
0x79, 0xF3, 0x66, 0xCD, 0xDB, 0xBF, 0x33, 0x43, 0x0C, 0x30, 0xC3, 0x0F,
0xFB, 0xEF, 0x3C, 0xF3, 0xDB, 0xC0, 0x77, 0xB7, 0xBC, 0x67, 0xCE, 0x0C,
0x30, 0xC3, 0x0D, 0xFF, 0xF7, 0xDF, 0x7D, 0xF7, 0xFF, 0xB0, 0x00, 0x73,
0xF7, 0xBF, 0x7B, 0x3F, 0x70, 0x1E, 0x3C, 0xC1, 0x83, 0x1F, 0xBF, 0x38,
0x70, 0xE1, 0xC3, 0x87, 0x06, 0x00, 0x7F, 0xF7, 0xBD, 0xED, 0xE3, 0x18,
0xFC, 0xE0, 0xC3, 0x0C, 0x30, 0xC3, 0x6D, 0xFF, 0xEB, 0xAE, 0xB2, 0xDB,
0x30, 0xF4, 0xBF, 0xFD, 0x0C, 0x70, 0x80, 0x00, 0x61, 0x86, 0x18, 0x61,
0x86, 0x18, 0x6B, 0x3C, 0x00, 0x41, 0x83, 0x06, 0x0C, 0x59, 0xB6, 0x7C,
0xE1, 0xE3, 0xE6, 0xF4, 0x00, 0x6B, 0x6D, 0xB6, 0xDB, 0x64, 0xC0, 0x6D,
0xBF, 0xDD, 0xEE, 0xD7, 0x6B, 0xB6, 0x93, 0xC9, 0xBB, 0xF7, 0xEE, 0xDD,
0xB3, 0x66, 0x77, 0xF7, 0xBC, 0xEF, 0xEE, 0x01, 0x0D, 0xFF, 0xEF, 0x3C,
0xB6, 0xF3, 0x0C, 0x30, 0xC1, 0x00, 0x71, 0xF3, 0x36, 0xE9, 0xD7, 0xBB,
0x16, 0x0C, 0x18, 0x38, 0x60, 0x46, 0xFD, 0xCC, 0x63, 0x18, 0x40, 0x67,
0xB7, 0x86, 0x1A, 0x52, 0xF0, 0x10, 0x30, 0x61, 0xCF, 0xE6, 0x0C, 0x18,
0x30, 0x60, 0xC1, 0x81, 0x00, 0x4F, 0xBC, 0xF7, 0xDF, 0x7F, 0xD9, 0x8E,
0x39, 0xB6, 0xDB, 0xCF, 0x3C, 0x70, 0x80, 0xD3, 0xDB, 0xDA, 0xDA, 0xDE,
0xFE, 0x7E, 0x20, 0x64, 0xFC, 0xE1, 0x87, 0x8F, 0x13, 0x66, 0x04, 0x4E,
0xF7, 0xBD, 0xEF, 0xFD, 0x18, 0xFE, 0xE0, 0x7C, 0xF8, 0x38, 0xE7, 0x0C,
0x30, 0xBF, 0x70, 0x10, 0xF3, 0xCC, 0x30, 0xC3, 0x0C, 0x30, 0xCE, 0x0C,
0x30, 0xC7, 0x1C, 0x30, 0x70, 0x55, 0x7F, 0xFF, 0xF4, 0x61, 0x8C, 0x63,
0x18, 0xC4, 0x31, 0xCC, 0x63, 0x18, 0xC6, 0xE0, 0xE3, 0xFC, 0x38 };
const GFXglyph CaveatBrush_Regular9pt7bGlyphs[] PROGMEM = {
{ 0, 1, 1, 4, 0, 0 }, // 0x20 ' '
{ 1, 3, 15, 4, 0, -13 }, // 0x21 '!'
{ 7, 5, 6, 6, 1, -12 }, // 0x22 '"'
{ 11, 12, 13, 10, -1, -11 }, // 0x23 '#'
{ 31, 6, 15, 8, 1, -12 }, // 0x24 '$'
{ 43, 13, 14, 14, 1, -12 }, // 0x25 '%'
{ 66, 9, 13, 9, 0, -11 }, // 0x26 '&'
{ 81, 2, 6, 3, 1, -12 }, // 0x27 '''
{ 83, 5, 16, 5, 1, -13 }, // 0x28 '('
{ 93, 6, 14, 5, -1, -12 }, // 0x29 ')'
{ 104, 6, 6, 7, 0, -12 }, // 0x2A '*'
{ 109, 8, 8, 9, 1, -8 }, // 0x2B '+'
{ 117, 2, 5, 4, 1, -1 }, // 0x2C ','
{ 119, 6, 2, 7, 1, -4 }, // 0x2D '-'
{ 121, 2, 4, 4, 1, -2 }, // 0x2E '.'
{ 122, 6, 15, 5, 0, -11 }, // 0x2F '/'
{ 134, 8, 12, 8, 0, -11 }, // 0x30 '0'
{ 146, 6, 12, 6, 0, -11 }, // 0x31 '1'
{ 155, 7, 12, 7, 0, -11 }, // 0x32 '2'
{ 166, 7, 13, 8, 0, -11 }, // 0x33 '3'
{ 178, 9, 13, 8, 0, -11 }, // 0x34 '4'
{ 193, 8, 12, 8, 0, -11 }, // 0x35 '5'
{ 205, 8, 13, 8, 0, -11 }, // 0x36 '6'
{ 218, 7, 12, 7, 0, -11 }, // 0x37 '7'
{ 229, 8, 14, 8, 0, -12 }, // 0x38 '8'
{ 243, 8, 13, 8, 0, -11 }, // 0x39 '9'
{ 256, 2, 9, 4, 1, -7 }, // 0x3A ':'
{ 259, 2, 11, 4, 1, -7 }, // 0x3B ';'
{ 262, 7, 8, 9, 1, -8 }, // 0x3C '<'
{ 269, 7, 5, 7, 0, -5 }, // 0x3D '='
{ 274, 7, 8, 9, 1, -8 }, // 0x3E '>'
{ 281, 6, 14, 8, 1, -12 }, // 0x3F '?'
{ 292, 11, 14, 12, 0, -10 }, // 0x40 '@'
{ 312, 8, 12, 8, 0, -11 }, // 0x41 'A'
{ 324, 7, 13, 9, 1, -11 }, // 0x42 'B'
{ 336, 7, 13, 8, 1, -11 }, // 0x43 'C'
{ 348, 8, 13, 10, 1, -11 }, // 0x44 'D'
{ 361, 6, 13, 7, 1, -11 }, // 0x45 'E'
{ 371, 8, 13, 8, 1, -11 }, // 0x46 'F'
{ 384, 8, 13, 9, 1, -10 }, // 0x47 'G'
{ 397, 8, 12, 10, 1, -12 }, // 0x48 'H'
{ 409, 7, 13, 7, 0, -11 }, // 0x49 'I'
{ 421, 7, 13, 7, 0, -12 }, // 0x4A 'J'
{ 433, 8, 13, 9, 1, -11 }, // 0x4B 'K'
{ 446, 5, 12, 7, 1, -11 }, // 0x4C 'L'
{ 454, 10, 13, 12, 1, -11 }, // 0x4D 'M'
{ 471, 8, 12, 10, 1, -11 }, // 0x4E 'N'
{ 483, 7, 13, 9, 1, -11 }, // 0x4F 'O'
{ 495, 8, 14, 8, 0, -12 }, // 0x50 'P'
{ 509, 8, 14, 9, 1, -11 }, // 0x51 'Q'
{ 523, 8, 12, 9, 1, -11 }, // 0x52 'R'
{ 535, 7, 13, 8, 0, -11 }, // 0x53 'S'
{ 547, 9, 13, 9, 0, -12 }, // 0x54 'T'
{ 562, 8, 13, 9, 1, -11 }, // 0x55 'U'
{ 575, 9, 13, 9, 0, -12 }, // 0x56 'V'
{ 590, 10, 12, 12, 1, -10 }, // 0x57 'W'
{ 605, 9, 12, 9, 0, -12 }, // 0x58 'X'
{ 619, 8, 13, 8, 0, -11 }, // 0x59 'Y'
{ 632, 9, 13, 9, 0, -11 }, // 0x5A 'Z'
{ 647, 6, 17, 5, 1, -13 }, // 0x5B '['
{ 660, 6, 15, 5, 0, -11 }, // 0x5C '\'
{ 672, 6, 17, 5, -1, -12 }, // 0x5D ']'
{ 685, 6, 7, 9, 1, -12 }, // 0x5E '^'
{ 691, 10, 2, 12, 1, 2 }, // 0x5F '_'
{ 694, 4, 3, 6, 1, -12 }, // 0x60 '`'
{ 696, 7, 8, 8, 1, -7 }, // 0x61 'a'
{ 703, 6, 14, 8, 1, -12 }, // 0x62 'b'
{ 714, 5, 8, 6, 1, -7 }, // 0x63 'c'
{ 719, 6, 15, 8, 1, -12 }, // 0x64 'd'
{ 731, 5, 9, 7, 1, -7 }, // 0x65 'e'
{ 737, 7, 14, 6, 0, -12 }, // 0x66 'f'
{ 750, 5, 12, 7, 1, -7 }, // 0x67 'g'
{ 758, 6, 14, 8, 1, -12 }, // 0x68 'h'
{ 769, 2, 12, 4, 1, -11 }, // 0x69 'i'
{ 772, 6, 17, 4, -2, -11 }, // 0x6A 'j'
{ 785, 7, 13, 7, 1, -12 }, // 0x6B 'k'
{ 797, 3, 13, 4, 1, -11 }, // 0x6C 'l'
{ 802, 9, 8, 11, 1, -7 }, // 0x6D 'm'
{ 811, 7, 8, 8, 1, -7 }, // 0x6E 'n'
{ 818, 5, 8, 7, 1, -7 }, // 0x6F 'o'
{ 823, 6, 14, 8, 1, -8 }, // 0x70 'p'
{ 834, 7, 12, 8, 1, -7 }, // 0x71 'q'
{ 845, 5, 9, 6, 1, -7 }, // 0x72 'r'
{ 851, 5, 9, 6, 1, -7 }, // 0x73 's'
{ 857, 7, 13, 6, 0, -11 }, // 0x74 't'
{ 869, 6, 8, 8, 1, -7 }, // 0x75 'u'
{ 875, 6, 9, 7, 1, -7 }, // 0x76 'v'
{ 882, 8, 9, 9, 1, -7 }, // 0x77 'w'
{ 891, 7, 9, 7, 0, -7 }, // 0x78 'x'
{ 899, 5, 12, 7, 1, -7 }, // 0x79 'y'
{ 907, 7, 9, 7, 0, -7 }, // 0x7A 'z'
{ 915, 6, 18, 5, 0, -13 }, // 0x7B '{'
{ 929, 2, 15, 5, 1, -11 }, // 0x7C '|'
{ 933, 5, 17, 5, 0, -13 }, // 0x7D '}'
{ 944, 7, 3, 9, 1, -6 } }; // 0x7E '~'
const GFXfont CaveatBrush_Regular9pt7b PROGMEM = {
(uint8_t *)CaveatBrush_Regular9pt7bBitmaps,
(GFXglyph *)CaveatBrush_Regular9pt7bGlyphs,
0x20, 0x7E, 22 };
// Approx. 1619 bytes

View File

@ -1,48 +0,0 @@
#include "constants.h"
#include "congress.h"
int running_text_pos = 21;
void draw_congress(MatrixPanel_I2S_DMA *matrix, enum Mode mode) {
uint16_t grid_color = matrix->color565(25, 11, 47);
matrix->fillScreenRGB888(15, 0, 10);
matrix->drawFastHLine(0, 0, PANEL_WIDTH, grid_color);
matrix->drawFastHLine(0, 7, PANEL_WIDTH, grid_color);
matrix->drawFastHLine(0, 24, PANEL_WIDTH, grid_color);
matrix->drawFastHLine(0, 31, PANEL_WIDTH, grid_color);
matrix->drawFastVLine(0, 0, PANEL_HEIGHT, grid_color);
matrix->drawFastVLine(63, 0, PANEL_HEIGHT, grid_color);
int v_lines = PANEL_WIDTH / 7;
for(int v; v < v_lines; v++) {
matrix->drawFastVLine(v * 7, 0, 7, grid_color);
matrix->drawFastVLine(v * 7, 24, 7, grid_color);
}
matrix->setTextWrap(false);
matrix->setTextColor(matrix->color565(255, 80, 83));
if (mode == Stealth) {
matrix->setCursor(7, 21);
matrix->print("38C3");
} else if (mode == LowVis) {
matrix->setCursor(2, 21);
matrix->print("Panki");
} else if (mode == HighVis) {
matrix->setCursor(running_text_pos, 21);
String message = "38C3 - Panki - DECT - 3389 - 38C3";
matrix->print(message);
if ((running_text_pos == 7) or (running_text_pos == - 70) or (running_text_pos == -146 ) or (running_text_pos == -216) ) {
delay(2000);
}
running_text_pos -= 1;
if (running_text_pos < - 286 ) { // (0 - (13 * message.length()))) {
running_text_pos = 7;
};
matrix->drawFastVLine(0, 0, PANEL_HEIGHT, grid_color);
matrix->drawFastVLine(63, 0, PANEL_HEIGHT, grid_color);
delay(10);
}
delay(10);
}

View File

@ -1,4 +0,0 @@
#include "xtensa/core-macros.h"
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
#include "enums.h"
void draw_congress(MatrixPanel_I2S_DMA *matrix, enum Mode mode);

View File

@ -1,29 +0,0 @@
#define R1 42
#define G1 40
#define BL1 41
#define R2 38
#define G2 37
#define BL2 39
#define CH_A 45
#define CH_B 36
#define CH_C 48
#define CH_D 35
#define CH_E 21
#define CLK 2
#define LAT 47
#define OE 14
#define PIN_E 21
#define PANEL_WIDTH 64
#define PANEL_HEIGHT 32 // Panel height of 64 will required PIN_E to be defined.
#define PANELS_NUMBER 1
#define PANE_WIDTH PANEL_WIDTH * PANELS_NUMBER
#define PANE_HEIGHT PANEL_HEIGHT
#define NUM_LEDS PANE_WIDTH*PANE_HEIGHT
#define ONBOARD_LED 13
#define BACK_BUTTON 6
#define NEXT_BUTTON 7

View File

@ -1,27 +0,0 @@
#include <Arduino.h>
#include "constants.h"
#include "enums.h"
#include "cyber.h"
#include "stalker111pt7b.h"
int default_x = 5;
int default_y = 22;
int offset = 0;
void draw_cyber(MatrixPanel_I2S_DMA *matrix, Mode mode) {
matrix->fillScreenRGB888(255, 255, 0);
matrix->setFont(&stalker111pt7b);
matrix->setTextColor(matrix->color444(0, 0, 1));
if (mode == Stealth) {
matrix->setCursor(default_x, default_y);
} else {
matrix->setCursor(default_x - offset, default_y);
offset++;
}
matrix->print("CYBER CYBER");
if (offset == 59) {
offset = 0;
}
delay(25);
}

View File

@ -1,3 +0,0 @@
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
#include "enums.h"
void draw_cyber(MatrixPanel_I2S_DMA *matrix, Mode mode);

View File

@ -1,21 +0,0 @@
#include "enums.h"
#include "constants.h"
DisplayStyle next_style(DisplayStyle style) {
switch(style) {
case Rain:
return Congress;
break;
case Congress:
return Supercomputer;
break;
case Supercomputer:
return Cyber;
break;
case Cyber:
return Flame;
break;
case Flame:
return Rain;
break;
}
}

View File

@ -1,18 +0,0 @@
#ifndef INCLUDED_ENUMS
#define INCLUDED_ENUMS
enum Mode {
Stealth,
LowVis,
HighVis
};
enum DisplayStyle {
Rain,
Congress,
Supercomputer,
Cyber,
Flame
};
DisplayStyle next_style(DisplayStyle style);
#endif

View File

@ -1,92 +0,0 @@
#include "constants.h"
#include "flame.h"
#include "overlay.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 rand_y = random(-1, 2);
int to = from - PANEL_WIDTH + rand_y;
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;
}
for(int p = 0; p < PANEL_HEIGHT * PANEL_WIDTH; p++) {
if (overlay[p / 8] & (1 << (7 - (p % 8))) and mode != Stealth) {
// offset the text
framebuffer[p + (6 * PANEL_WIDTH)] = FLAME_PALETTE_SIZE - 1;
}
matrix->drawPixel(p % PANEL_WIDTH, p / PANEL_WIDTH, flame_palette[framebuffer[p]]);
}
do_fire();
delay(10);
}

View File

@ -1,4 +0,0 @@
#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);

View File

@ -3,36 +3,73 @@
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
#include "main.h"
#include "constants.h"
#include "congress.h"
#include "rain.h"
#include "supercomputer.h"
#include "cyber.h"
#include "flame.h"
#include "pillowlava8pt7b.h"
#include "caveatbrush9pt7b.h"
#include "overlay.h"
#define CYCLE_TIME_MS 20000
#define R1 42
#define G1 40
#define BL1 41
#define R2 38
#define G2 37
#define BL2 39
#define CH_A 45
#define CH_B 36
#define CH_C 48
#define CH_D 35
#define CH_E 21
#define CLK 2
#define LAT 47
#define OE 14
#define PIN_E 21
#define PANEL_WIDTH 64
#define PANEL_HEIGHT 32 // Panel height of 64 will required PIN_E to be defined.
#define PANELS_NUMBER 1
#define PANE_WIDTH PANEL_WIDTH * PANELS_NUMBER
#define PANE_HEIGHT PANEL_HEIGHT
#define NUM_LEDS PANE_WIDTH*PANE_HEIGHT
#define ONBOARD_LED 13
MatrixPanel_I2S_DMA *matrix = nullptr;
Mode mode = HighVis;
DisplayStyle style = Rain;
int line_pos[PANEL_WIDTH]; // where a rain marker is (y coordinate)
int line_length[PANEL_WIDTH]; // how long a line is for a given x coord
int line_speed[PANEL_WIDTH]; // how fast each line moves
unsigned long line_last_moved[PANEL_WIDTH];
unsigned long last_switch;
bool cycling = true;
typedef struct {
int y;
int length;
int speed;
unsigned long last_moved;
} Raindrop;
Raindrop raindrops[PANEL_WIDTH];
void setup(){
Serial.begin(BAUD_RATE);
pinMode(ONBOARD_LED, OUTPUT);
pinMode(BACK_BUTTON, INPUT_PULLUP);
pinMode(NEXT_BUTTON, INPUT_PULLUP);
// redefine pins in constants.h if required
for (int i = 0; i<PANEL_WIDTH; i++) {
raindrops[i].y = 0 - random(24);
raindrops[i].length = random(20, 28);
raindrops[i].speed = random(25, 100);
raindrops[i].last_moved = millis();
//raindrops[i] = rd;
//line_pos[i] = 0 - random(24);
//line_length[i] = random(20, 28);
//line_speed[i] = random(25, 100);
//line_last_moved[i] = millis();
}
// redefine pins if required
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
@ -44,66 +81,53 @@ void setup(){
matrix = new MatrixPanel_I2S_DMA(mxconfig);
matrix->begin();
matrix->setBrightness8(128);
matrix->setBrightness8(64);
matrix->fillScreenRGB888(0, 0, 0);
matrix->setTextWrap(false);
matrix->setFont(&Pilowlava_Regular8pt7b);
matrix->setFont(&CaveatBrush_Regular9pt7b);
}
void loop() {
matrix ->flipDMABuffer();
matrix->clearScreen();
if (cycling and millis() - last_switch > CYCLE_TIME_MS) {
// next style
style = next_style(style); //DisplayStyle((style + 1) % (NumStyles - 1));
last_switch = millis();
delay(25);
//matrix ->drawBitmap(0, 0, overlay, 64, 32, matrix->color565(64, 0, 0));
unsigned long timestamp = millis();
for (int x = 0; x < PANEL_WIDTH; x++) {
if ((timestamp - raindrops[x].last_moved) > raindrops[x].speed) {
// step down a pixel
raindrops[x].y++;
raindrops[x].last_moved = timestamp;
}
if(!digitalRead(BACK_BUTTON)) {
switch(mode) {
case Stealth:
mode = LowVis;
break;
case LowVis:
mode = HighVis;
break;
case HighVis:
mode = Stealth;
break;
if (raindrops[x].y > PANEL_HEIGHT) {
raindrops[x].y = 0;
}
while(!digitalRead(BACK_BUTTON)); // Wait for release
}
if(!digitalRead(NEXT_BUTTON)) {
unsigned long pressed_at = millis();
while(!digitalRead(NEXT_BUTTON)); // Wait for release
// see if the button was held or tapped
if (millis() - pressed_at > 500) {
// todo
cycling = not cycling;
if (raindrops[x].y >= 0) {
//draw our pixel
matrix->drawPixel(x, raindrops[x].y, matrix->color565(128, 255, 128));
// draw our trail
for (int trail_offset = 1; trail_offset < raindrops[x].length; trail_offset++) {
int trail_y = raindrops[x].y - trail_offset;
if (trail_y >= 0) {
int pixel_num = (trail_y * PANEL_WIDTH) + x;
if (overlay[ pixel_num / 8 ] & (1 << (7 - (pixel_num % 8)) )) {
matrix->drawPixel(x, trail_y, matrix->color565(128, 255, 128));
} else {
style = next_style(style);
matrix->drawPixel(x, trail_y, matrix->color565(0, (255 / raindrops[x].length) * (raindrops[x].length - trail_offset), 0));
}
} else {
int pixel_num = ((PANEL_HEIGHT + trail_y) * PANEL_WIDTH) + x;
if (line_pos[x] >= 0) {
if (overlay[ pixel_num / 8 ] & (1 << (7 - (pixel_num % 8)) )) {
matrix->drawPixel(x, PANEL_HEIGHT + trail_y, matrix->color565(128, 255, 128));
} else {
matrix->drawPixel(x, PANEL_HEIGHT + trail_y, matrix->color565(0,(255 / raindrops[x].length) * (raindrops[x].length - trail_offset), 0));
}
} else {
break;
}
}
}
}
switch(style) {
case Rain:
draw_rain(matrix, mode);
break;
case Congress:
matrix->setFont(&Pilowlava_Regular8pt7b);
draw_congress(matrix, mode);
break;
case Supercomputer:
draw_supercomputer(matrix, mode);
break;
case Cyber:
draw_cyber(matrix, mode);
break;
case Flame:
draw_flame(matrix, mode);
break;
}
}

View File

@ -1,229 +0,0 @@
const uint8_t Pilowlava_Regular8pt7bBitmaps[] PROGMEM = {
0x00, 0x38, 0xE3, 0x8E, 0x30, 0xC2, 0x08, 0x00, 0x8F, 0x3C, 0x00, 0x77,
0x77, 0x66, 0xC4, 0x00, 0x00, 0x0D, 0x80, 0x34, 0x00, 0xD0, 0x1A, 0x80,
0x38, 0xE6, 0x0F, 0xBF, 0x00, 0x00, 0xC0, 0x15, 0xC0, 0x53, 0x03, 0x40,
0x09, 0x00, 0x06, 0x00, 0x60, 0x06, 0x07, 0x47, 0xFF, 0xFF, 0x0F, 0x7C,
0x01, 0xF0, 0x04, 0xC7, 0x42, 0xE4, 0xFE, 0x7F, 0x5D, 0xE2, 0x64, 0x0E,
0x00, 0xE0, 0x06, 0x00, 0x3F, 0xE4, 0x07, 0x4C, 0xE6, 0x9C, 0x29, 0x81,
0x30, 0x06, 0x00, 0x60, 0x0D, 0xE0, 0x92, 0x11, 0x22, 0x1E, 0x3F, 0x01,
0x9E, 0x0F, 0x39, 0x9C, 0x4F, 0x38, 0x78, 0x23, 0x07, 0xD0, 0x38, 0xE0,
0xC1, 0xC2, 0x03, 0x8F, 0xF7, 0x1F, 0x9C, 0x77, 0x6C, 0x01, 0xCC, 0xE6,
0x62, 0x10, 0x84, 0x30, 0x86, 0x38, 0xE2, 0x07, 0x18, 0xE3, 0x08, 0x21,
0x08, 0x46, 0x63, 0x33, 0x88, 0x66, 0x58, 0xA7, 0xC1, 0x66, 0x0C, 0x00,
0x9B, 0xFE, 0xEF, 0xF0, 0x00, 0x3E, 0x76, 0x20, 0x03, 0x6C, 0xD4, 0xD5,
0x33, 0xDF, 0xD0, 0x3C, 0x00, 0x04, 0xA7, 0x80, 0x00, 0x2F, 0xFC, 0x3F,
0xF0, 0x07, 0x76, 0x80, 0x1D, 0xF0, 0x0F, 0x70, 0x04, 0x18, 0x30, 0xC1,
0x82, 0x0C, 0x10, 0x60, 0x81, 0x04, 0x00, 0x1F, 0x0F, 0xF9, 0x1F, 0x60,
0x7C, 0x03, 0x80, 0x78, 0x1F, 0x03, 0xE0, 0xEE, 0x39, 0xCF, 0x1F, 0xC0,
0x7B, 0xDE, 0x43, 0x0C, 0x31, 0xC7, 0x1C, 0xF3, 0xCE, 0x1F, 0x8F, 0x0B,
0xC3, 0x70, 0xF4, 0x7C, 0x1F, 0x8C, 0xF2, 0x03, 0xC0, 0x7E, 0x07, 0xFF,
0x3F, 0xC0, 0xFF, 0xDF, 0xEB, 0xE1, 0x01, 0xC1, 0xF0, 0xFC, 0x1E, 0x3B,
0xBF, 0x09, 0xE0, 0x0F, 0xFF, 0x7F, 0x80, 0x03, 0x80, 0x7C, 0x07, 0xC0,
0xF8, 0x0E, 0x01, 0xC0, 0x11, 0xE2, 0x72, 0x3E, 0x77, 0xC7, 0x78, 0x76,
0x07, 0x7F, 0xDC, 0xF6, 0x1F, 0x80, 0xC1, 0xB1, 0xF9, 0xFD, 0xC1, 0x40,
0x78, 0x3F, 0x3D, 0xFC, 0x07, 0x00, 0xF0, 0x0F, 0x01, 0xE0, 0x3C, 0x07,
0xBE, 0x70, 0xEE, 0x07, 0x80, 0x38, 0x02, 0xFF, 0xE3, 0xF8, 0x7F, 0xDF,
0x9F, 0xE3, 0xB0, 0xE0, 0x38, 0x0C, 0x02, 0x00, 0x40, 0x1C, 0x03, 0x80,
0x70, 0x0E, 0x00, 0x3F, 0x8C, 0x7F, 0xC3, 0xB8, 0x73, 0x98, 0x1C, 0x1E,
0xF7, 0x87, 0xC0, 0x70, 0x07, 0xFF, 0xBF, 0xE0, 0x3F, 0x8F, 0xFF, 0x00,
0xC0, 0x1C, 0x07, 0xE1, 0xDE, 0x70, 0x3C, 0x07, 0x81, 0xE0, 0x78, 0x0E,
0x00, 0xFF, 0x80, 0xFE, 0x00, 0x07, 0x76, 0x00, 0x00, 0x77, 0x68, 0x9B,
0xFE, 0xEF, 0xF0, 0x00, 0x3E, 0x76, 0x20, 0x03, 0x6C, 0xD4, 0xD5, 0x33,
0xDF, 0xD0, 0x3C, 0x00, 0x04, 0xA7, 0x80, 0x00, 0x2F, 0xFC, 0x3F, 0xF0,
0x7F, 0x7C, 0x00, 0x01, 0xEF, 0xF0, 0x9B, 0xFE, 0xEF, 0xF0, 0x00, 0x3E,
0x76, 0x20, 0x03, 0x6C, 0xD4, 0xD5, 0x33, 0xDF, 0xD0, 0x3C, 0x00, 0x04,
0xA7, 0x80, 0x00, 0x2F, 0xFC, 0x3F, 0xF0, 0x3F, 0x9F, 0x3F, 0x8D, 0x87,
0x03, 0xC1, 0xE0, 0xE0, 0x30, 0x10, 0x00, 0x01, 0xC0, 0x70, 0x0F, 0xC0,
0x8F, 0x0C, 0x3C, 0xC6, 0xFE, 0x5B, 0xF6, 0x4F, 0x2F, 0x3B, 0xFD, 0xDC,
0x76, 0x00, 0x13, 0xFC, 0x7F, 0xE0, 0x01, 0xC0, 0x64, 0x0E, 0x61, 0xC6,
0x3C, 0x67, 0x86, 0x78, 0x60, 0x06, 0x3F, 0xF7, 0xEF, 0xFC, 0xF7, 0x0F,
0x1F, 0xE7, 0x8F, 0x70, 0x7F, 0x0E, 0xE1, 0x0C, 0x70, 0x9F, 0xEB, 0xE1,
0x80, 0x17, 0xFF, 0x7F, 0xE1, 0xFC, 0x1F, 0x87, 0x99, 0xE3, 0xF0, 0x78,
0x0F, 0xC1, 0xBE, 0x07, 0xE0, 0xF8, 0xEC, 0x3D, 0x8F, 0x1F, 0xC0, 0x00,
0xFF, 0x8F, 0xFC, 0xF8, 0x22, 0x02, 0x20, 0x76, 0x07, 0x60, 0x76, 0x0F,
0x70, 0xE7, 0x1E, 0x71, 0xC3, 0xF8, 0x7F, 0x91, 0xFD, 0x07, 0xBC, 0x01,
0xF0, 0x1F, 0xB8, 0xF7, 0xFC, 0xF0, 0x10, 0x01, 0xFF, 0x8F, 0xF0, 0x3F,
0xC9, 0xFD, 0x0F, 0xB8, 0x27, 0x80, 0xFC, 0x23, 0xC6, 0x1C, 0xC0, 0x1C,
0x03, 0x80, 0x70, 0x00, 0x1F, 0x83, 0x1E, 0x70, 0xEF, 0x06, 0xF8, 0x0F,
0x82, 0xE0, 0xDC, 0x3B, 0x8F, 0x39, 0xE7, 0x7E, 0x73, 0xC7, 0x30, 0xE7,
0x8F, 0x70, 0x76, 0x06, 0x80, 0x2F, 0xFE, 0xFE, 0x2C, 0x06, 0xC0, 0xEE,
0x1E, 0xE1, 0xEE, 0x1C, 0x3B, 0xFD, 0x83, 0xBD, 0xCC, 0x44, 0x2E, 0xF0,
0x0E, 0x1C, 0x38, 0x70, 0x66, 0xDC, 0xB1, 0xC3, 0x0D, 0xF9, 0xF0, 0x70,
0x77, 0x1F, 0xE3, 0xFC, 0x7C, 0xDC, 0x0A, 0x02, 0x90, 0x2C, 0xC2, 0xE7,
0x2E, 0x3E, 0xF3, 0xEE, 0x1C, 0x30, 0x78, 0x78, 0x70, 0x70, 0xE0, 0xC0,
0xC0, 0x84, 0x8E, 0xBF, 0xFE, 0x78, 0x1E, 0x8C, 0x3A, 0x8C, 0x73, 0x8C,
0x73, 0xCE, 0x73, 0xCE, 0x77, 0xEF, 0x27, 0xE7, 0x27, 0xE7, 0x27, 0xF3,
0xCF, 0xF3, 0xCF, 0x71, 0xCE, 0x70, 0x69, 0x8F, 0x98, 0xF9, 0xC7, 0x9E,
0x7C, 0xE7, 0xCF, 0x2E, 0x7A, 0xE3, 0xAE, 0x3E, 0xF1, 0xEE, 0x0E, 0x1F,
0x0F, 0xF9, 0x1F, 0x60, 0x7C, 0x03, 0x80, 0x78, 0x1F, 0x03, 0xE0, 0xEE,
0x39, 0xCF, 0x1F, 0xC0, 0x7F, 0x9F, 0xBB, 0x83, 0xE0, 0x3B, 0x07, 0x38,
0x63, 0xCE, 0x3F, 0xE3, 0xDE, 0x03, 0xC0, 0x78, 0x00, 0x0F, 0x80, 0xFF,
0x08, 0xF8, 0xC0, 0x66, 0x01, 0x70, 0x0F, 0x80, 0xFC, 0x0F, 0xE1, 0xFF,
0x1F, 0xBD, 0x80, 0xF7, 0x80, 0x1F, 0x00, 0x7C, 0x01, 0xC0, 0x0F, 0xC1,
0xFE, 0x3F, 0xF4, 0x01, 0x40, 0x1D, 0xFE, 0xCF, 0x8E, 0xC0, 0xE4, 0x0E,
0x3E, 0xF1, 0xF7, 0x0E, 0x1F, 0x8F, 0xFB, 0xF8, 0xE0, 0x38, 0x06, 0xF0,
0x87, 0xF6, 0xF9, 0xCC, 0x78, 0x3F, 0x1F, 0x3F, 0x80, 0x3F, 0xF7, 0x5F,
0xF4, 0xFF, 0x46, 0xF6, 0x06, 0x60, 0x07, 0x00, 0x70, 0x07, 0x00, 0x78,
0x07, 0x80, 0x38, 0xE0, 0xF8, 0x3E, 0x0F, 0x99, 0xC7, 0x60, 0xF8, 0x1E,
0x03, 0xE0, 0x7E, 0x17, 0xEC, 0xFE, 0x70, 0x7F, 0x07, 0x60, 0xF4, 0xEE,
0x5C, 0xE7, 0xDC, 0x39, 0x83, 0x98, 0x33, 0x03, 0x20, 0x12, 0x01, 0xC0,
0x1E, 0x03, 0x37, 0x03, 0xD3, 0x9C, 0xEB, 0x8E, 0x7D, 0xCF, 0x1A, 0xCE,
0x84, 0x47, 0x62, 0x27, 0x31, 0x27, 0x39, 0x1F, 0x9F, 0x8F, 0x8F, 0x83,
0x87, 0x80, 0x70, 0x7B, 0x87, 0xBC, 0x7D, 0xC6, 0x4E, 0x40, 0x74, 0x07,
0x80, 0xB0, 0x3A, 0x07, 0x1F, 0x70, 0xF7, 0x07, 0x00, 0x07, 0x07, 0xB8,
0x7B, 0x87, 0xDC, 0x6C, 0xE6, 0x07, 0x40, 0x78, 0x03, 0x80, 0x10, 0x1F,
0x01, 0xE0, 0x1C, 0x00, 0xFF, 0xDF, 0x9F, 0xE7, 0xF1, 0xE0, 0x78, 0x1C,
0x06, 0x01, 0xC0, 0x67, 0x1C, 0x7F, 0x87, 0xF0, 0x70, 0x00, 0xF5, 0xF0,
0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC1, 0x27, 0xC2, 0x81, 0x01, 0x03,
0x02, 0x06, 0x04, 0x0C, 0x18, 0x18, 0x30, 0x60, 0x03, 0xCE, 0x83, 0x0C,
0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0D, 0x2F, 0x90, 0xFF, 0xCF, 0x18, 0x00,
0xE7, 0xFE, 0xE3, 0x80, 0x01, 0xC0, 0x64, 0x0E, 0x61, 0xC6, 0x3C, 0x67,
0x86, 0x78, 0x60, 0x06, 0x3F, 0xF7, 0xEF, 0xFC, 0xF7, 0x0F, 0x1F, 0xE7,
0x8F, 0x70, 0x7F, 0x0E, 0xE1, 0x0C, 0x70, 0x9F, 0xEB, 0xE1, 0x80, 0x17,
0xFF, 0x7F, 0xE1, 0xFC, 0x1F, 0x87, 0x99, 0xE3, 0xF0, 0x78, 0x0F, 0xC1,
0xBE, 0x07, 0xE0, 0xF8, 0xEC, 0x3D, 0x8F, 0x1F, 0xC0, 0x00, 0xFF, 0x8F,
0xFC, 0xF8, 0x22, 0x02, 0x20, 0x76, 0x07, 0x60, 0x76, 0x0F, 0x70, 0xE7,
0x1E, 0x71, 0xC3, 0xF8, 0x7F, 0x91, 0xFD, 0x07, 0xBC, 0x01, 0xF0, 0x1F,
0xB8, 0xF7, 0xFC, 0xF0, 0x10, 0x01, 0xFF, 0x8F, 0xF0, 0x3F, 0xC9, 0xFD,
0x0F, 0xB8, 0x27, 0x80, 0xFC, 0x23, 0xC6, 0x1C, 0xC0, 0x1C, 0x03, 0x80,
0x70, 0x00, 0x1F, 0x83, 0x1E, 0x70, 0xEF, 0x06, 0xF8, 0x0F, 0x82, 0xE0,
0xDC, 0x3B, 0x8F, 0x39, 0xE7, 0x7E, 0x73, 0xC7, 0x30, 0xE7, 0x8F, 0x70,
0x76, 0x06, 0x80, 0x2F, 0xFE, 0xFE, 0x2C, 0x06, 0xC0, 0xEE, 0x1E, 0xE1,
0xEE, 0x1C, 0x3B, 0xFD, 0x83, 0xBD, 0xCC, 0x44, 0x2E, 0xF0, 0x0E, 0x1C,
0x38, 0x70, 0x66, 0xDC, 0xB1, 0xC3, 0x0D, 0xF9, 0xF0, 0x70, 0x77, 0x1F,
0xE3, 0xFC, 0x7C, 0xDC, 0x0A, 0x02, 0x90, 0x2C, 0xC2, 0xE7, 0x2E, 0x3E,
0xF3, 0xEE, 0x1C, 0x30, 0x78, 0x78, 0x70, 0x70, 0xE0, 0xC0, 0xC0, 0x84,
0x8E, 0xBF, 0xFE, 0x78, 0x1E, 0x8C, 0x3A, 0x8C, 0x73, 0x8C, 0x73, 0xCE,
0x73, 0xCE, 0x77, 0xEF, 0x27, 0xE7, 0x27, 0xE7, 0x27, 0xF3, 0xCF, 0xF3,
0xCF, 0x71, 0xCE, 0x70, 0x69, 0x8F, 0x98, 0xF9, 0xC7, 0x9E, 0x7C, 0xE7,
0xCF, 0x2E, 0x7A, 0xE3, 0xAE, 0x3E, 0xF1, 0xEE, 0x0E, 0x1F, 0x0F, 0xF9,
0x1F, 0x60, 0x7C, 0x03, 0x80, 0x78, 0x1F, 0x03, 0xE0, 0xEE, 0x39, 0xCF,
0x1F, 0xC0, 0x7F, 0x9F, 0xBB, 0x83, 0xE0, 0x3B, 0x07, 0x38, 0x63, 0xCE,
0x3F, 0xE3, 0xDE, 0x03, 0xC0, 0x78, 0x00, 0x0F, 0x80, 0xFF, 0x08, 0xF8,
0xC0, 0x66, 0x01, 0x70, 0x0F, 0x80, 0xFC, 0x0F, 0xE1, 0xFF, 0x1F, 0xBD,
0x80, 0xF7, 0x80, 0x1F, 0x00, 0x7C, 0x01, 0xC0, 0x0F, 0xC1, 0xFE, 0x3F,
0xF4, 0x01, 0x40, 0x1D, 0xFE, 0xCF, 0x8E, 0xC0, 0xE4, 0x0E, 0x3E, 0xF1,
0xF7, 0x0E, 0x1F, 0x8F, 0xFB, 0xF8, 0xE0, 0x38, 0x06, 0xF0, 0x87, 0xF6,
0xF9, 0xCC, 0x78, 0x3F, 0x1F, 0x3F, 0x80, 0x3F, 0xF7, 0x5F, 0xF4, 0xFF,
0x46, 0xF6, 0x06, 0x60, 0x07, 0x00, 0x70, 0x07, 0x00, 0x78, 0x07, 0x80,
0x38, 0xE0, 0xF8, 0x3E, 0x0F, 0x99, 0xC7, 0x60, 0xF8, 0x1E, 0x03, 0xE0,
0x7E, 0x17, 0xEC, 0xFE, 0x70, 0x7F, 0x07, 0x60, 0xF4, 0xEE, 0x5C, 0xE7,
0xDC, 0x39, 0x83, 0x98, 0x33, 0x03, 0x20, 0x12, 0x01, 0xC0, 0x1E, 0x03,
0x37, 0x03, 0xD3, 0x9C, 0xEB, 0x8E, 0x7D, 0xCF, 0x1A, 0xCE, 0x84, 0x47,
0x62, 0x27, 0x31, 0x27, 0x39, 0x1F, 0x9F, 0x8F, 0x8F, 0x83, 0x87, 0x80,
0x70, 0x7B, 0x87, 0xBC, 0x7D, 0xC6, 0x4E, 0x40, 0x74, 0x07, 0x80, 0xB0,
0x3A, 0x07, 0x1F, 0x70, 0xF7, 0x07, 0x00, 0x07, 0x07, 0xB8, 0x7B, 0x87,
0xDC, 0x6C, 0xE6, 0x07, 0x40, 0x78, 0x03, 0x80, 0x10, 0x1F, 0x01, 0xE0,
0x1C, 0x00, 0xFF, 0xDF, 0x9F, 0xE7, 0xF1, 0xE0, 0x78, 0x1C, 0x06, 0x01,
0xC0, 0x67, 0x1C, 0x7F, 0x87, 0xF0, 0x70, 0x00, 0x00, 0x30, 0x60, 0x82,
0x04, 0x30, 0xC1, 0x81, 0x81, 0x01, 0x01, 0x03, 0x06, 0x0C, 0x00, 0x9B,
0xFE, 0xEF, 0xF0, 0x00, 0x3E, 0x76, 0x20, 0x03, 0x6C, 0xD4, 0xD5, 0x33,
0xDF, 0xD0, 0x3C, 0x00, 0x04, 0xA7, 0x80, 0x00, 0x2F, 0xFC, 0x3F, 0xF0,
0x00, 0x01, 0xC1, 0x83, 0x02, 0x02, 0x03, 0x06, 0x0C, 0x18, 0x41, 0x02,
0x0C, 0x38, 0x20, 0x00, 0x9B, 0xFE, 0xEF, 0xF0, 0x00, 0x3E, 0x76, 0x20,
0x03, 0x6C, 0xD4, 0xD5, 0x33, 0xDF, 0xD0, 0x3C, 0x00, 0x04, 0xA7, 0x80,
0x00, 0x2F, 0xFC, 0x3F, 0xF0 };
const GFXglyph Pilowlava_Regular8pt7bGlyphs[] PROGMEM = {
{ 0, 1, 1, 6, 0, 0 }, // 0x20 ' '
{ 1, 6, 13, 6, 0, -11 }, // 0x21 '!'
{ 11, 8, 4, 9, 0, -11 }, // 0x22 '"'
{ 15, 14, 13, 14, 0, -12 }, // 0x23 '#'
{ 38, 12, 17, 14, 1, -13 }, // 0x24 '$'
{ 64, 12, 12, 12, 0, -11 }, // 0x25 '%'
{ 82, 14, 12, 15, 1, -11 }, // 0x26 '&'
{ 103, 4, 4, 5, 0, -11 }, // 0x27 '''
{ 105, 5, 16, 6, 1, -13 }, // 0x28 '('
{ 115, 5, 16, 6, 0, -13 }, // 0x29 ')'
{ 125, 7, 7, 9, 1, -11 }, // 0x2A '*'
{ 132, 14, 14, 18, 2, -12 }, // 0x2B '+'
{ 157, 4, 5, 5, 0, -2 }, // 0x2C ','
{ 160, 6, 2, 7, 0, -6 }, // 0x2D '-'
{ 162, 4, 3, 4, 0, -2 }, // 0x2E '.'
{ 164, 7, 12, 7, 0, -11 }, // 0x2F '/'
{ 175, 11, 12, 13, 1, -11 }, // 0x30 '0'
{ 192, 6, 12, 7, 0, -11 }, // 0x31 '1'
{ 201, 11, 12, 13, 1, -11 }, // 0x32 '2'
{ 218, 11, 12, 13, 1, -11 }, // 0x33 '3'
{ 235, 12, 12, 13, 0, -11 }, // 0x34 '4'
{ 253, 10, 12, 12, 1, -11 }, // 0x35 '5'
{ 268, 12, 12, 13, 1, -11 }, // 0x36 '6'
{ 286, 11, 12, 11, 0, -11 }, // 0x37 '7'
{ 303, 11, 12, 13, 1, -11 }, // 0x38 '8'
{ 320, 11, 12, 13, 1, -11 }, // 0x39 '9'
{ 337, 3, 9, 5, 1, -9 }, // 0x3A ':'
{ 341, 4, 12, 5, 0, -9 }, // 0x3B ';'
{ 347, 14, 14, 18, 2, -12 }, // 0x3C '<'
{ 372, 9, 5, 10, 1, -7 }, // 0x3D '='
{ 378, 14, 14, 18, 2, -12 }, // 0x3E '>'
{ 403, 10, 12, 11, 0, -11 }, // 0x3F '?'
{ 418, 13, 12, 15, 1, -11 }, // 0x40 '@'
{ 438, 12, 12, 13, 0, -11 }, // 0x41 'A'
{ 456, 12, 12, 14, 1, -11 }, // 0x42 'B'
{ 474, 11, 13, 13, 1, -11 }, // 0x43 'C'
{ 492, 12, 12, 14, 1, -11 }, // 0x44 'D'
{ 510, 11, 12, 13, 1, -11 }, // 0x45 'E'
{ 527, 11, 12, 12, 1, -11 }, // 0x46 'F'
{ 544, 12, 12, 14, 1, -11 }, // 0x47 'G'
{ 562, 12, 12, 14, 1, -11 }, // 0x48 'H'
{ 580, 5, 12, 7, 1, -11 }, // 0x49 'I'
{ 588, 7, 12, 8, 0, -11 }, // 0x4A 'J'
{ 599, 12, 12, 14, 1, -11 }, // 0x4B 'K'
{ 617, 8, 12, 9, 1, -11 }, // 0x4C 'L'
{ 629, 16, 12, 18, 1, -11 }, // 0x4D 'M'
{ 653, 12, 12, 14, 1, -11 }, // 0x4E 'N'
{ 671, 11, 12, 13, 1, -11 }, // 0x4F 'O'
{ 688, 11, 12, 13, 1, -11 }, // 0x50 'P'
{ 705, 13, 15, 15, 1, -11 }, // 0x51 'Q'
{ 730, 12, 12, 14, 1, -11 }, // 0x52 'R'
{ 748, 11, 12, 13, 1, -11 }, // 0x53 'S'
{ 765, 12, 12, 12, 0, -11 }, // 0x54 'T'
{ 783, 10, 12, 12, 1, -11 }, // 0x55 'U'
{ 798, 12, 12, 12, 0, -11 }, // 0x56 'V'
{ 816, 17, 12, 18, 0, -11 }, // 0x57 'W'
{ 842, 12, 12, 13, 0, -11 }, // 0x58 'X'
{ 860, 12, 13, 12, 0, -12 }, // 0x59 'Y'
{ 880, 11, 12, 13, 1, -11 }, // 0x5A 'Z'
{ 897, 6, 16, 7, 1, -13 }, // 0x5B '['
{ 909, 7, 12, 7, 0, -11 }, // 0x5C '\'
{ 920, 6, 16, 7, 0, -13 }, // 0x5D ']'
{ 932, 7, 3, 9, 1, -11 }, // 0x5E '^'
{ 935, 12, 2, 13, 0, 1 }, // 0x5F '_'
{ 938, 5, 2, 9, 1, -14 }, // 0x60 '`'
{ 940, 12, 12, 13, 0, -11 }, // 0x61 'a'
{ 958, 12, 12, 14, 1, -11 }, // 0x62 'b'
{ 976, 11, 13, 13, 1, -11 }, // 0x63 'c'
{ 994, 12, 12, 14, 1, -11 }, // 0x64 'd'
{ 1012, 11, 12, 13, 1, -11 }, // 0x65 'e'
{ 1029, 11, 12, 12, 1, -11 }, // 0x66 'f'
{ 1046, 12, 12, 14, 1, -11 }, // 0x67 'g'
{ 1064, 12, 12, 14, 1, -11 }, // 0x68 'h'
{ 1082, 5, 12, 7, 1, -11 }, // 0x69 'i'
{ 1090, 7, 12, 8, 0, -11 }, // 0x6A 'j'
{ 1101, 12, 12, 14, 1, -11 }, // 0x6B 'k'
{ 1119, 8, 12, 9, 1, -11 }, // 0x6C 'l'
{ 1131, 16, 12, 18, 1, -11 }, // 0x6D 'm'
{ 1155, 12, 12, 14, 1, -11 }, // 0x6E 'n'
{ 1173, 11, 12, 13, 1, -11 }, // 0x6F 'o'
{ 1190, 11, 12, 13, 1, -11 }, // 0x70 'p'
{ 1207, 13, 15, 15, 1, -11 }, // 0x71 'q'
{ 1232, 12, 12, 14, 1, -11 }, // 0x72 'r'
{ 1250, 11, 12, 13, 1, -11 }, // 0x73 's'
{ 1267, 12, 12, 12, 0, -11 }, // 0x74 't'
{ 1285, 10, 12, 12, 1, -11 }, // 0x75 'u'
{ 1300, 12, 12, 12, 0, -11 }, // 0x76 'v'
{ 1318, 17, 12, 18, 0, -11 }, // 0x77 'w'
{ 1344, 12, 12, 13, 0, -11 }, // 0x78 'x'
{ 1362, 12, 13, 12, 0, -12 }, // 0x79 'y'
{ 1382, 11, 12, 13, 1, -11 }, // 0x7A 'z'
{ 1399, 7, 18, 7, 0, -14 }, // 0x7B '{'
{ 1415, 14, 14, 18, 2, -12 }, // 0x7C '|'
{ 1440, 7, 18, 7, -1, -14 }, // 0x7D '}'
{ 1456, 14, 14, 18, 2, -12 } }; // 0x7E '~'
const GFXfont Pilowlava_Regular8pt7b PROGMEM = {
(uint8_t *)Pilowlava_Regular8pt7bBitmaps,
(GFXglyph *)Pilowlava_Regular8pt7bGlyphs,
0x20, 0x7E, 19 };
// Approx. 2153 bytes

View File

@ -1,68 +0,0 @@
// https://lodev.org/cgtutor/plasma.html
#include <Arduino.h>
#include <FastLED.h>
#include "constants.h"
#include "enums.h"
#include "plasma.h"
#define dist(a, b, c, d) sqrt(double((a - c) * (a - c) + (b - d) * (b - d)))
CRGB palette[256];
int plasma[PANEL_HEIGHT][PANEL_WIDTH];
bool plasma_ready = false;
int palette_shift = 0;
void setup_plasma() {
for(int i = 0; i < 256; i++) {
CHSV hsv_color(i, 255, 255);
hsv2rgb_rainbow(hsv_color, palette[i]);
}
// initial plasma
for(int y = 0; y < PANEL_HEIGHT; y++) {
for(int x = 0; x < PANEL_WIDTH; x++) {
//the plasma buffer is a sum of sines
int color = int
(
128.0 + (128.0 * sin(float(x) / 4.0))
+ 128.0 + (128.0 * sin(float(y) / 2.0))
+ 128.0 + (128.0 * sin(float(x + y) / 4.0))
+ 128.0 + (128.0 * sin(sqrt(x * x + y * y) / 4.0))
) / 4;
plasma[y][x] = color;
}
}
plasma_ready = true;
}
int timer = 0;
void draw_plasma(MatrixPanel_I2S_DMA *matrix, Mode mode) {
//if (!plasma_ready)
// setup_plasma();
//int timer = int(millis() / 25.0);
for (int y = 0; y < PANEL_HEIGHT; y++) {
for (int x = 0; x < PANEL_WIDTH; x++) {
//CRGB color = palette[(plasma[y][x] + palette_shift) % 256];
//double value = sin(dist(x + timer, y, 128.0, 128.0) / 8.0)
// + sin(dist(x, y, 64.0, 64.0) / 8.0)
// + sin(dist(x, y + timer / 7.0, 192.0, 64.0) / 7.0)
// + sin(dist(x, y, 192.0, 100.0) / 8.0);
double value = (
sin(dist(x + timer, y, 128.0, 128.0) * 0.5)
+ sin(dist(x, y, 64.0, 64.0) * 0.5)
+ sin(dist(x, y + timer / 7.0, 192.0, 64.0) * 0.5)
+ sin(dist(x, y, 192.0, 100.0) * 0.5 )
) * 0.25;
CRGB color;
CHSV hsv_color(int(128.0 + (value * 127.0)), 255, 255);
hsv2rgb_rainbow(hsv_color, color);
matrix->drawPixel(x, y, matrix->color565(color.r, color.g, color.b));
//if(Serial)
// Serial.println(value);
//matrix->drawPixel(x, y, matrix->color565(color.r, color.g, color.b));
}
}
timer++;
//palette_shift++;
}

View File

@ -1,3 +0,0 @@
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
#include "enums.h"
void draw_plasma(MatrixPanel_I2S_DMA *matrix, Mode mode);

View File

@ -1,115 +0,0 @@
#include "rain.h"
#include "constants.h"
#include "overlay.h"
#include <vector>
#define COLOR_HIGHLIGHT_R 128
#define COLOR_HIGHLIGHT_G 255
#define COLOR_HIGHLIGHT_B 128
#define COLOR_DEFAULT_R 0
#define COLOR_DEFAULT_G 255
#define COLOR_DEFAULT_B 0
//typedef struct {
struct Raindrop {
//bool reached_bottom = false;
bool reached_bottom;
int x;
int y;
int length;
int speed;
unsigned long last_moved;
} ;
bool rain_initialized = false;
uint16_t color_highlight;
uint16_t color_default;
std::vector<Raindrop> raindrops;
void setup_rain(MatrixPanel_I2S_DMA *matrix) {
color_highlight = matrix->color565(
COLOR_HIGHLIGHT_R,
COLOR_HIGHLIGHT_G,
COLOR_HIGHLIGHT_B
);
color_default = matrix->color565(
COLOR_DEFAULT_R,
COLOR_DEFAULT_B,
COLOR_DEFAULT_G
);
for (int x = 0; x<PANEL_WIDTH; x++) {
raindrops.push_back({
false,
x,
0 - random(24),
random(20, 28),
random(25, 100),
millis()
});
}
}
void draw_rain(MatrixPanel_I2S_DMA *matrix, Mode mode) {
//matrix ->drawBitmap(0, 0, overlay, 64, 32, matrix->color565(64, 0, 0));
if (!rain_initialized) {
setup_rain(matrix);
rain_initialized = true;
}
unsigned long timestamp = millis();
int r = 0;
while(r < raindrops.size()) {
if ((timestamp - raindrops[r].last_moved) > raindrops[r].speed) {
// step down a pixel
raindrops[r].y++;
raindrops[r].last_moved = timestamp;
}
if (raindrops[r].y > PANEL_HEIGHT + raindrops[r].length) {
raindrops.push_back({
false,
raindrops[r].x,
0 - random(4),
random(20, 28),
random(10, 55),
millis()
});
raindrops.erase(raindrops.begin() + r);
continue;
}
if (raindrops[r].y >= 0) {
//draw our pixel
matrix->drawPixel(raindrops[r].x, raindrops[r].y, matrix->color565(128, 255, 128));
// draw our trail
for (int trail_offset = 1; trail_offset < raindrops[r].length; trail_offset++) {
int trail_y = raindrops[r].y - trail_offset;
float brightness = ((raindrops[r].length - trail_offset) / (float)raindrops[r].length);
uint16_t fade_color = matrix->color565(
COLOR_DEFAULT_R * brightness,
COLOR_DEFAULT_G * brightness,
COLOR_DEFAULT_B * brightness
);
if (trail_y < 0) {
break;
}
int pixel_num = (trail_y * PANEL_WIDTH) + raindrops[r].x;
if (overlay[pixel_num / 8] & (1 << (7 - (pixel_num % 8))) and mode != Stealth) {
if (mode == HighVis) {
matrix->drawPixel(raindrops[r].x, trail_y, color_highlight);
} else {
matrix->drawPixel(raindrops[r].x, trail_y, matrix->color565(
COLOR_HIGHLIGHT_R * brightness,
COLOR_HIGHLIGHT_G * brightness,
COLOR_HIGHLIGHT_B * brightness
));
}
} else {
matrix->drawPixel(raindrops[r].x, trail_y, fade_color);
}
}
}
r++;
}
//delay(25);
}

View File

@ -1,4 +0,0 @@
#include "xtensa/core-macros.h"
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
#include "enums.h"
void draw_rain(MatrixPanel_I2S_DMA *matrix, enum Mode mode);

View File

@ -1,210 +0,0 @@
const uint8_t stalker111pt7bBitmaps[] PROGMEM = {
0x00, 0xFF, 0xF6, 0xDB, 0x00, 0x06, 0xC0, 0xFF, 0xFF, 0xF8, 0xFC, 0x76,
0x33, 0x19, 0x84, 0x36, 0x1B, 0x0D, 0x9F, 0xFF, 0xF9, 0xB3, 0xFF, 0xFF,
0x36, 0x1B, 0x0D, 0x86, 0xC0, 0x18, 0x0C, 0x06, 0x1F, 0xFF, 0xFE, 0x03,
0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE1, 0x80, 0xC0, 0x60, 0xF0, 0x78, 0x7C,
0x60, 0x70, 0x70, 0x70, 0x30, 0x30, 0x38, 0x38, 0x18, 0x18, 0xF0, 0x78,
0x3C, 0x00, 0xFE, 0xEE, 0xEC, 0x40, 0x37, 0x6E, 0xCC, 0xCC, 0xCC, 0xE6,
0x33, 0xCC, 0x67, 0x33, 0x33, 0x33, 0x76, 0xCC, 0x0C, 0x26, 0x1B, 0xEF,
0xE3, 0xE0, 0xE0, 0xF9, 0xFF, 0x4D, 0x86, 0x03, 0x00, 0x0C, 0x03, 0x00,
0xC3, 0xFF, 0xFF, 0xC3, 0x00, 0xC0, 0x30, 0xFD, 0xB6, 0xC0, 0xFF, 0xFF,
0xFF, 0xF0, 0x00, 0x80, 0xC0, 0xE0, 0x60, 0x70, 0x30, 0x30, 0x38, 0x18,
0x18, 0x1C, 0x0C, 0x0E, 0x06, 0x00, 0xFF, 0xFF, 0xF0, 0x78, 0x3C, 0x1E,
0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3F, 0xFF, 0xFC, 0xFC, 0x7E,
0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0D, 0x86, 0xC3, 0x61, 0xBF,
0xFF, 0xFC, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xFF, 0xFF, 0xC0,
0x60, 0x30, 0x18, 0x0F, 0xFF, 0xFC, 0xFF, 0xFF, 0xC0, 0x60, 0x30, 0x18,
0x0C, 0xFE, 0x7F, 0x01, 0x80, 0xC0, 0x60, 0x3F, 0xFF, 0xFC, 0xC0, 0xC6,
0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xFF, 0xFF, 0x06, 0x06, 0x06, 0x06, 0x06,
0x3F, 0x9F, 0xCC, 0x06, 0x03, 0x01, 0x80, 0xFE, 0x7F, 0x01, 0x80, 0xC0,
0x60, 0x3F, 0xFB, 0xFC, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
0xFF, 0xFF, 0xE0, 0xF0, 0x78, 0x3F, 0xFF, 0xFC, 0xFF, 0xFF, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60,
0x3E, 0x1F, 0x0D, 0x86, 0xC3, 0x61, 0xB1, 0xFD, 0xFF, 0xC1, 0xE0, 0xF0,
0x78, 0x3F, 0xFB, 0xF8, 0xFF, 0xFF, 0xF0, 0x78, 0x3C, 0x1F, 0xFF, 0xFE,
0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0xFF, 0xF0, 0x00, 0x0F,
0xFF, 0xF7, 0xBC, 0x00, 0x03, 0xFF, 0x18, 0xC6, 0x30, 0x01, 0x83, 0xC3,
0x87, 0x8F, 0x07, 0x03, 0xC0, 0x78, 0x0F, 0x03, 0xC0, 0x60, 0xFF, 0xFF,
0xC0, 0x00, 0x0F, 0xFF, 0xFC, 0xC0, 0x38, 0x0F, 0x01, 0xC0, 0x78, 0x0C,
0x1E, 0x3E, 0x3C, 0x78, 0x30, 0x00, 0x06, 0x07, 0x87, 0x67, 0x3F, 0x3E,
0x38, 0x38, 0x38, 0x30, 0x18, 0x0C, 0x00, 0x03, 0x01, 0x80, 0x7F, 0x7F,
0xF0, 0x60, 0x30, 0x1B, 0xEF, 0xF7, 0x9B, 0xCD, 0xE6, 0xF3, 0x79, 0xBF,
0xFB, 0xB8, 0x08, 0x0E, 0x07, 0x03, 0x81, 0xE1, 0xB0, 0xD8, 0x66, 0x63,
0x3F, 0x9F, 0xDC, 0x3C, 0x1E, 0x0C, 0xFE, 0x7F, 0xB0, 0xF8, 0x3C, 0x1E,
0x1F, 0xFD, 0xFE, 0xC1, 0xE0, 0xF0, 0x78, 0x3F, 0xF7, 0xF8, 0x1F, 0x9F,
0xCC, 0x0C, 0x06, 0x06, 0x03, 0x01, 0x80, 0xE0, 0x30, 0x0C, 0x06, 0x01,
0xF8, 0xFC, 0xFC, 0x7F, 0x0D, 0xC6, 0x63, 0x39, 0x8C, 0xC6, 0x63, 0x31,
0x99, 0x8C, 0xC6, 0xCF, 0xE7, 0xE0, 0xFF, 0xFF, 0xF0, 0x18, 0x0C, 0x06,
0x03, 0xE1, 0xF0, 0xC0, 0x60, 0x30, 0x18, 0x0F, 0xFF, 0xFC, 0xFF, 0xFF,
0xF0, 0x18, 0x0F, 0xE7, 0xF3, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
0x06, 0x00, 0x1F, 0x8F, 0xCC, 0x0C, 0x0E, 0x06, 0x03, 0x01, 0x9F, 0xCF,
0xE0, 0xF0, 0x78, 0x3F, 0xFB, 0xF8, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E,
0x0F, 0xFF, 0xFF, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0C, 0xFF, 0xFF,
0xF0, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0,
0x30, 0xFF, 0xFF, 0xF0, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0xE3, 0xC7,
0x8F, 0x1E, 0x3F, 0xE7, 0x80, 0xC1, 0xE1, 0xF1, 0xD9, 0x8D, 0x87, 0x83,
0x81, 0xE0, 0xF8, 0x6E, 0x33, 0x98, 0xEC, 0x3E, 0x0C, 0xC0, 0x60, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0F, 0xFF,
0xFC, 0xE3, 0xF1, 0xFD, 0xFB, 0xFD, 0xDE, 0x4F, 0x07, 0x83, 0xC1, 0xE0,
0xF0, 0x78, 0x3C, 0x1E, 0x0C, 0xC1, 0xF0, 0xF8, 0x7E, 0x3F, 0x1E, 0xCF,
0x67, 0x9B, 0xCD, 0xE7, 0xF1, 0xF8, 0xFC, 0x3E, 0x1C, 0x1E, 0x1F, 0x0D,
0xCC, 0x66, 0x3E, 0x0F, 0x07, 0x83, 0xE1, 0xB1, 0x9C, 0xC6, 0xC1, 0xE0,
0xE0, 0xFF, 0x7F, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0xFF, 0xFF, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x00, 0x07, 0x07, 0xC7, 0x67, 0x37, 0x1E, 0x0F,
0x07, 0x83, 0xCD, 0xE7, 0xB3, 0x9B, 0xCF, 0xFB, 0x9C, 0xFF, 0x7F, 0xF0,
0x78, 0x3C, 0x1F, 0xFF, 0xFD, 0xB8, 0xCC, 0x67, 0x31, 0xD8, 0x6C, 0x1E,
0x0C, 0x7F, 0x7F, 0xF8, 0x6C, 0x03, 0x01, 0xC0, 0x70, 0x18, 0x06, 0x01,
0x80, 0xF8, 0x3F, 0xFB, 0xF8, 0xFF, 0xFF, 0xF3, 0x61, 0x80, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0xC1, 0xE0, 0xF0,
0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3F, 0xFB,
0xF8, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1F, 0x19, 0x8C, 0xCE, 0x36, 0x1B,
0x0F, 0x03, 0x81, 0xC0, 0x40, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x6F,
0x37, 0x9B, 0xCD, 0xE6, 0xF3, 0x79, 0xBF, 0xFB, 0xB8, 0xC0, 0xB8, 0x66,
0x38, 0xCC, 0x3E, 0x07, 0x81, 0xC0, 0x70, 0x3E, 0x0D, 0xC7, 0x31, 0x86,
0xC1, 0xB0, 0x20, 0xC1, 0xE0, 0xF0, 0x6C, 0x67, 0x71, 0xF0, 0x70, 0x30,
0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0xFF, 0xFF, 0xC0, 0xE0, 0x60,
0x60, 0x30, 0x30, 0x38, 0x18, 0x18, 0x1C, 0x0C, 0x0F, 0xFF, 0xFC, 0xFF,
0xFF, 0xF6, 0x1B, 0x0D, 0x86, 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x36, 0x1B,
0x0F, 0xFF, 0xFC, 0xC0, 0x38, 0x06, 0x00, 0xC0, 0x38, 0x06, 0x00, 0xC0,
0x38, 0x06, 0x00, 0xC0, 0x38, 0x06, 0x00, 0xC0, 0x20, 0xFF, 0xFF, 0xC3,
0x61, 0xB0, 0xD8, 0x6C, 0x36, 0x1B, 0x0D, 0x86, 0xC3, 0x61, 0xBF, 0xFF,
0xFC, 0x08, 0x0E, 0x0F, 0x87, 0xC7, 0x77, 0x1F, 0x07, 0x81, 0xFF, 0xF8,
0xCF, 0x30, 0x3F, 0x1F, 0xC0, 0x60, 0x37, 0xFF, 0xFF, 0x07, 0x83, 0xFF,
0xBF, 0xC0, 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xF7, 0xFF, 0x87, 0x83, 0xC1,
0xE0, 0xF0, 0x7C, 0x3F, 0xFE, 0xF8, 0x1F, 0x9F, 0xD8, 0x18, 0x0C, 0x06,
0x03, 0x80, 0xE0, 0x3F, 0x8F, 0xC0, 0x01, 0x80, 0xC0, 0x60, 0x33, 0xDF,
0xFF, 0x0F, 0x83, 0xC1, 0xE0, 0xF0, 0x7C, 0x77, 0xF9, 0xEC, 0x3E, 0x7F,
0xB0, 0x78, 0x3F, 0xFF, 0xFF, 0x01, 0xC0, 0x7F, 0x9F, 0xC0, 0x1F, 0x3F,
0x30, 0x30, 0xFC, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
0x3D, 0xBF, 0xF0, 0xF8, 0x3C, 0x1E, 0x0F, 0x07, 0x87, 0x7F, 0x9E, 0xC0,
0x60, 0x77, 0xF3, 0xF0, 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xDF, 0xC7,
0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0C, 0x30, 0x30, 0x00, 0x00,
0x00, 0xF8, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x06,
0x0C, 0x00, 0x00, 0x0F, 0xDF, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1,
0x83, 0xC7, 0xFD, 0xF0, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x36, 0x3B, 0x39,
0xB8, 0xF0, 0x7C, 0x33, 0x98, 0xEC, 0x3E, 0x0C, 0xF9, 0xF0, 0x60, 0xC1,
0x83, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xCF, 0xFF, 0xC0, 0xFB, 0xBF, 0xFE,
0xEF, 0x33, 0xCC, 0xF3, 0x3C, 0xCF, 0x33, 0xCC, 0xF3, 0x30, 0xCF, 0x7F,
0xF8, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xC0, 0x7F, 0x7F,
0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xFF, 0x3F, 0x00, 0xDE, 0x7F,
0xB8, 0xFC, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xE3, 0xFF, 0xB7, 0x98, 0x0C,
0x06, 0x03, 0x00, 0x3F, 0xBF, 0xF0, 0xF8, 0x3C, 0x1E, 0x0F, 0x07, 0x87,
0xFF, 0xBE, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x03, 0x67, 0xFC, 0x7C, 0x3C,
0x1E, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x00, 0x7F, 0x7F, 0xF0, 0x1E,
0x03, 0xE0, 0x78, 0x07, 0x03, 0xFF, 0xBF, 0x80, 0x30, 0x18, 0x0C, 0x06,
0x0F, 0xF7, 0xF8, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x33, 0xF8, 0xF8,
0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x0F, 0x8F, 0xFF, 0xBC, 0xC0,
0xC1, 0xE0, 0xF0, 0x6C, 0x66, 0x31, 0xB8, 0xD8, 0x7C, 0x1C, 0x0E, 0x00,
0xC1, 0xB0, 0x6C, 0x1B, 0x36, 0xCD, 0xB3, 0x6D, 0xDB, 0xFE, 0x77, 0x18,
0xC0, 0xC1, 0xF1, 0xDD, 0xC7, 0xC1, 0xC1, 0xE1, 0xD9, 0xCE, 0xC3, 0xC0,
0xC0, 0xC1, 0xE0, 0xF0, 0x78, 0x76, 0x33, 0x18, 0xD8, 0x6C, 0x1E, 0x06,
0x03, 0x03, 0x0F, 0x87, 0xC0, 0x7F, 0xBF, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1,
0xC1, 0xC0, 0xFF, 0xFF, 0xC0, 0x0F, 0xC3, 0xF0, 0xC0, 0x30, 0x0C, 0x03,
0x0F, 0x83, 0xF0, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0F, 0x83, 0xE0, 0xFF,
0xFF, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
0xC3, 0xC3, 0xFF, 0xFF, 0xFC, 0x7E, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x3E,
0x1F, 0x0C, 0x06, 0x03, 0x01, 0x87, 0xC3, 0xE0, 0x00, 0x7F, 0xF7, 0xE0 };
const GFXglyph stalker111pt7bGlyphs[] PROGMEM = {
{ 0, 1, 1, 6, 0, 0 }, // 0x20 ' '
{ 1, 3, 14, 6, 3, -13 }, // 0x21 '!'
{ 7, 9, 7, 11, 2, -13 }, // 0x22 '"'
{ 15, 9, 12, 11, 2, -12 }, // 0x23 '#'
{ 29, 9, 14, 11, 2, -13 }, // 0x24 '$'
{ 45, 9, 14, 11, 2, -13 }, // 0x25 '%'
{ 61, 1, 1, 11, 0, 0 }, // 0x26 '&'
{ 62, 4, 7, 7, 4, -13 }, // 0x27 '''
{ 66, 4, 14, 7, 3, -13 }, // 0x28 '('
{ 73, 4, 14, 7, 3, -13 }, // 0x29 ')'
{ 80, 9, 11, 11, 2, -11 }, // 0x2A '*'
{ 93, 10, 8, 11, 2, -9 }, // 0x2B '+'
{ 103, 3, 6, 8, 4, -3 }, // 0x2C ','
{ 106, 8, 2, 11, 2, -6 }, // 0x2D '-'
{ 108, 3, 4, 7, 3, -4 }, // 0x2E '.'
{ 110, 9, 14, 11, 1, -13 }, // 0x2F '/'
{ 126, 9, 14, 11, 2, -13 }, // 0x30 '0'
{ 142, 9, 14, 11, 2, -13 }, // 0x31 '1'
{ 158, 9, 14, 11, 2, -13 }, // 0x32 '2'
{ 174, 9, 14, 11, 2, -13 }, // 0x33 '3'
{ 190, 8, 14, 11, 2, -13 }, // 0x34 '4'
{ 204, 9, 14, 11, 2, -13 }, // 0x35 '5'
{ 220, 9, 14, 11, 2, -13 }, // 0x36 '6'
{ 236, 9, 14, 11, 2, -13 }, // 0x37 '7'
{ 252, 9, 14, 11, 2, -13 }, // 0x38 '8'
{ 268, 9, 14, 12, 2, -13 }, // 0x39 '9'
{ 284, 4, 10, 7, 3, -10 }, // 0x3A ':'
{ 289, 5, 12, 8, 3, -9 }, // 0x3B ';'
{ 297, 9, 11, 11, 2, -11 }, // 0x3C '<'
{ 310, 9, 6, 11, 2, -9 }, // 0x3D '='
{ 317, 9, 11, 11, 2, -11 }, // 0x3E '>'
{ 330, 9, 14, 10, 1, -13 }, // 0x3F '?'
{ 346, 9, 14, 11, 2, -13 }, // 0x40 '@'
{ 362, 9, 14, 11, 2, -13 }, // 0x41 'A'
{ 378, 9, 14, 11, 2, -13 }, // 0x42 'B'
{ 394, 9, 14, 10, 1, -13 }, // 0x43 'C'
{ 410, 9, 14, 11, 2, -13 }, // 0x44 'D'
{ 426, 9, 14, 10, 2, -13 }, // 0x45 'E'
{ 442, 9, 14, 11, 2, -13 }, // 0x46 'F'
{ 458, 9, 14, 10, 1, -13 }, // 0x47 'G'
{ 474, 9, 14, 11, 2, -13 }, // 0x48 'H'
{ 490, 10, 14, 11, 2, -13 }, // 0x49 'I'
{ 508, 7, 14, 10, 2, -13 }, // 0x4A 'J'
{ 521, 9, 14, 11, 2, -13 }, // 0x4B 'K'
{ 537, 9, 14, 10, 2, -13 }, // 0x4C 'L'
{ 553, 9, 14, 11, 2, -13 }, // 0x4D 'M'
{ 569, 9, 14, 11, 2, -13 }, // 0x4E 'N'
{ 585, 9, 14, 11, 2, -13 }, // 0x4F 'O'
{ 601, 9, 14, 11, 2, -13 }, // 0x50 'P'
{ 617, 9, 14, 11, 2, -13 }, // 0x51 'Q'
{ 633, 9, 14, 11, 2, -13 }, // 0x52 'R'
{ 649, 9, 14, 11, 2, -13 }, // 0x53 'S'
{ 665, 9, 14, 10, 2, -13 }, // 0x54 'T'
{ 681, 9, 14, 11, 2, -13 }, // 0x55 'U'
{ 697, 9, 14, 11, 2, -13 }, // 0x56 'V'
{ 713, 9, 14, 11, 2, -13 }, // 0x57 'W'
{ 729, 10, 14, 11, 2, -13 }, // 0x58 'X'
{ 747, 9, 14, 11, 2, -13 }, // 0x59 'Y'
{ 763, 9, 14, 11, 1, -13 }, // 0x5A 'Z'
{ 779, 9, 14, 10, 2, -13 }, // 0x5B '['
{ 795, 10, 14, 11, 1, -13 }, // 0x5C '\'
{ 813, 9, 14, 11, 1, -13 }, // 0x5D ']'
{ 829, 9, 8, 11, 2, -9 }, // 0x5E '^'
{ 838, 13, 1, 13, 0, 2 }, // 0x5F '_'
{ 840, 4, 3, 7, 2, -13 }, // 0x60 '`'
{ 842, 9, 10, 11, 1, -9 }, // 0x61 'a'
{ 854, 9, 14, 11, 2, -13 }, // 0x62 'b'
{ 870, 9, 10, 10, 1, -9 }, // 0x63 'c'
{ 882, 9, 14, 11, 1, -13 }, // 0x64 'd'
{ 898, 9, 10, 11, 1, -9 }, // 0x65 'e'
{ 910, 8, 14, 10, 2, -13 }, // 0x66 'f'
{ 924, 9, 14, 11, 2, -9 }, // 0x67 'g'
{ 940, 9, 14, 11, 2, -13 }, // 0x68 'h'
{ 956, 8, 15, 10, 2, -14 }, // 0x69 'i'
{ 971, 7, 19, 9, 2, -14 }, // 0x6A 'j'
{ 988, 9, 14, 10, 2, -13 }, // 0x6B 'k'
{ 1004, 7, 14, 9, 2, -13 }, // 0x6C 'l'
{ 1017, 10, 10, 11, 1, -9 }, // 0x6D 'm'
{ 1030, 9, 10, 11, 2, -9 }, // 0x6E 'n'
{ 1042, 9, 10, 11, 2, -9 }, // 0x6F 'o'
{ 1054, 9, 15, 11, 2, -10 }, // 0x70 'p'
{ 1071, 9, 14, 11, 2, -9 }, // 0x71 'q'
{ 1087, 9, 11, 10, 2, -10 }, // 0x72 'r'
{ 1100, 9, 10, 11, 2, -9 }, // 0x73 's'
{ 1112, 9, 14, 10, 1, -13 }, // 0x74 't'
{ 1128, 9, 10, 11, 2, -9 }, // 0x75 'u'
{ 1140, 9, 10, 11, 1, -9 }, // 0x76 'v'
{ 1152, 10, 10, 11, 2, -9 }, // 0x77 'w'
{ 1165, 9, 10, 11, 2, -9 }, // 0x78 'x'
{ 1177, 9, 14, 11, 2, -9 }, // 0x79 'y'
{ 1193, 9, 10, 11, 2, -9 }, // 0x7A 'z'
{ 1205, 10, 14, 10, 1, -13 }, // 0x7B '{'
{ 1223, 8, 17, 11, 1, -16 }, // 0x7C '|'
{ 1240, 9, 14, 11, 2, -13 }, // 0x7D '}'
{ 1256, 9, 3, 12, 2, -8 } }; // 0x7E '~'
const GFXfont stalker111pt7b PROGMEM = {
(uint8_t *)stalker111pt7bBitmaps,
(GFXglyph *)stalker111pt7bGlyphs,
0x20, 0x7E, 23 };
// Approx. 1932 bytes

View File

@ -1,178 +0,0 @@
const uint8_t stalker19pt7bBitmaps[] PROGMEM = {
0x00, 0xFF, 0xAA, 0x0F, 0xFF, 0xCF, 0x1A, 0x34, 0x60, 0x24, 0x48, 0x97,
0xF2, 0x44, 0xBF, 0x92, 0x24, 0x48, 0x10, 0x20, 0x47, 0xF8, 0x1F, 0xC0,
0x81, 0xFE, 0x20, 0x40, 0x80, 0xE0, 0xE0, 0xE2, 0x04, 0x08, 0x18, 0x10,
0x20, 0x40, 0x8E, 0x8E, 0x0E, 0x00, 0xFF, 0xED, 0x80, 0x2D, 0x49, 0x24,
0x99, 0x10, 0x89, 0x12, 0x49, 0x25, 0x40, 0x08, 0x08, 0x6B, 0x7C, 0x38,
0x38, 0x74, 0x92, 0x10, 0x10, 0x20, 0x47, 0xF1, 0x02, 0x04, 0x00, 0xFC,
0x92, 0x40, 0xFF, 0xFC, 0xFF, 0x80, 0x01, 0x02, 0x06, 0x04, 0x08, 0x18,
0x10, 0x20, 0x20, 0x40, 0xC0, 0x80, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60,
0xC1, 0x83, 0x06, 0x0F, 0xF0, 0xF0, 0x20, 0x40, 0x81, 0x02, 0x04, 0x09,
0x12, 0x24, 0x4F, 0xF0, 0xFE, 0x04, 0x08, 0x10, 0x3F, 0xE0, 0x40, 0x81,
0x02, 0x07, 0xF0, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x3E, 0x02, 0x01, 0x01,
0x01, 0x01, 0xFF, 0x81, 0x0A, 0x14, 0x28, 0x50, 0xBF, 0x82, 0x04, 0x08,
0x10, 0x7E, 0x81, 0x02, 0x04, 0x08, 0x1F, 0x81, 0x02, 0x06, 0x0F, 0xF0,
0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFF, 0x81, 0x81, 0x81, 0xFF,
0xFF, 0x04, 0x08, 0x10, 0x20, 0x82, 0x08, 0x10, 0x20, 0x40, 0x80, 0x7C,
0x89, 0x12, 0x24, 0x5F, 0xE0, 0xC1, 0x83, 0x06, 0x0F, 0xF0, 0xFF, 0x81,
0x81, 0x81, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0xFF, 0x81,
0xFF, 0xEE, 0xE0, 0x0F, 0x11, 0x11, 0x02, 0x0C, 0x30, 0x60, 0x80, 0xC0,
0x30, 0x0C, 0x03, 0xFE, 0x00, 0x07, 0xF0, 0xC0, 0x30, 0x18, 0x06, 0x03,
0x02, 0x0C, 0x30, 0xC0, 0x04, 0x0A, 0x33, 0x67, 0xCE, 0x9C, 0x30, 0x20,
0x20, 0x00, 0x00, 0x40, 0x7E, 0xC1, 0x81, 0x01, 0x01, 0x79, 0x89, 0x89,
0x89, 0x89, 0x89, 0x7E, 0x18, 0x18, 0x18, 0x28, 0x24, 0x24, 0x44, 0x44,
0x7E, 0x42, 0x82, 0x81, 0xFE, 0x83, 0x81, 0x81, 0x81, 0x82, 0xFE, 0x83,
0x81, 0x81, 0x83, 0xFE, 0x1F, 0x20, 0x60, 0x40, 0xC0, 0x80, 0x80, 0xC0,
0x40, 0x60, 0x20, 0x1F, 0xF8, 0x24, 0x24, 0x22, 0x22, 0x21, 0x21, 0x22,
0x22, 0x24, 0x24, 0xF8, 0xFF, 0x02, 0x04, 0x08, 0x10, 0x3C, 0x40, 0x81,
0x02, 0x07, 0xF0, 0xFF, 0x02, 0x04, 0x0F, 0xD0, 0x20, 0x40, 0x81, 0x02,
0x04, 0x00, 0x1E, 0x40, 0x82, 0x08, 0x10, 0x20, 0x4F, 0x83, 0x06, 0x0B,
0xE0, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x7F, 0xC1, 0x83, 0x06, 0x0C, 0x10,
0xFE, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, 0x20, 0x47, 0xF0, 0x04,
0x10, 0x41, 0x04, 0x10, 0x61, 0x86, 0x1C, 0xDE, 0x82, 0x84, 0x88, 0xB0,
0xE0, 0x80, 0x80, 0xC0, 0xB0, 0x98, 0x84, 0x83, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFE, 0xC7, 0xE5, 0xE9, 0xB9,
0xB1, 0x91, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xC3, 0x86, 0x8D, 0x19,
0x32, 0x62, 0xC5, 0x87, 0x0E, 0x0C, 0x10, 0x38, 0x24, 0x44, 0x42, 0x82,
0x81, 0x81, 0x82, 0x42, 0x44, 0x24, 0x38, 0xFD, 0x06, 0x0C, 0x18, 0x30,
0x60, 0xFE, 0x81, 0x02, 0x04, 0x00, 0x06, 0x14, 0xCB, 0x1C, 0x30, 0x60,
0xC9, 0x9D, 0x12, 0x67, 0x30, 0xFF, 0x06, 0x0C, 0x1F, 0xF2, 0x22, 0x46,
0x85, 0x0E, 0x0C, 0x10, 0x7F, 0x06, 0x0A, 0x06, 0x04, 0x04, 0x04, 0x0D,
0x0F, 0x0B, 0xF0, 0xFF, 0x26, 0x48, 0x81, 0x02, 0x04, 0x08, 0x10, 0x20,
0x40, 0x80, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0B,
0xE0, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x42, 0x64, 0x24, 0x38, 0x18,
0x10, 0x81, 0x81, 0x81, 0x81, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
0x7E, 0x83, 0x82, 0x44, 0x64, 0x28, 0x18, 0x10, 0x18, 0x2C, 0x24, 0x42,
0x82, 0x83, 0x06, 0x0A, 0x26, 0x87, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
0xFF, 0x04, 0x04, 0x08, 0x08, 0x10, 0x30, 0x20, 0x60, 0x40, 0x80, 0xFF,
0xFF, 0x42, 0x85, 0x0A, 0x14, 0x28, 0x50, 0xA1, 0x42, 0x87, 0xF0, 0x80,
0x80, 0x40, 0x60, 0x20, 0x10, 0x18, 0x08, 0x04, 0x06, 0x02, 0x01, 0xFE,
0x14, 0x28, 0x50, 0xA1, 0x42, 0x85, 0x0A, 0x14, 0x2F, 0xF0, 0x10, 0x38,
0x7C, 0x66, 0xC6, 0x83, 0xFF, 0xE0, 0xC6, 0x30, 0x3C, 0x04, 0x0B, 0xF8,
0x30, 0x61, 0xBD, 0x80, 0x80, 0x80, 0x80, 0xFE, 0xC1, 0x81, 0x81, 0x81,
0x81, 0xC1, 0xBE, 0x3E, 0x40, 0x80, 0x80, 0x80, 0xC0, 0x60, 0x3F, 0x02,
0x04, 0x08, 0x17, 0xF0, 0xE0, 0xC1, 0x83, 0x07, 0x1B, 0xD0, 0x7D, 0x06,
0x0C, 0x1F, 0xF0, 0x20, 0x3F, 0x1E, 0x40, 0x81, 0x0F, 0x84, 0x08, 0x10,
0x20, 0x40, 0x81, 0x00, 0x3D, 0xC3, 0x81, 0x81, 0x81, 0x81, 0x83, 0x7D,
0x01, 0x03, 0x7E, 0x81, 0x02, 0x04, 0x0B, 0xD8, 0x60, 0xC1, 0x83, 0x06,
0x0C, 0x10, 0x61, 0x80, 0x00, 0xF0, 0x41, 0x04, 0x10, 0x41, 0x1F, 0x0C,
0x30, 0x00, 0x7C, 0x10, 0x41, 0x04, 0x10, 0x41, 0x07, 0x17, 0x80, 0x81,
0x02, 0x04, 0x08, 0x53, 0x28, 0x70, 0xF1, 0x32, 0x14, 0x10, 0xF0, 0x41,
0x04, 0x10, 0x41, 0x04, 0x10, 0x41, 0x3F, 0xFF, 0xD9, 0x91, 0x91, 0x91,
0x91, 0x91, 0x91, 0xBD, 0xC6, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x7D, 0x06,
0x0C, 0x18, 0x30, 0x60, 0xBE, 0xBC, 0xE6, 0xC1, 0x81, 0x81, 0x81, 0x81,
0xE2, 0xBC, 0x80, 0x80, 0x80, 0x7F, 0x0E, 0x0C, 0x18, 0x30, 0x61, 0xBD,
0x02, 0x04, 0x08, 0x06, 0xB9, 0xC1, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80,
0xFF, 0x05, 0x80, 0xE0, 0x20, 0x60, 0xFE, 0x20, 0x20, 0x20, 0xFE, 0x20,
0x20, 0x20, 0x20, 0x22, 0x22, 0x1E, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x63,
0xB9, 0x83, 0x06, 0x0A, 0x24, 0x45, 0x8A, 0x0C, 0x81, 0x81, 0x91, 0x91,
0x91, 0x99, 0x7E, 0x66, 0x46, 0xC8, 0xE0, 0xC1, 0x84, 0xB0, 0xC1, 0x83,
0x06, 0x0A, 0x26, 0x44, 0x8E, 0x0C, 0x08, 0x23, 0xC0, 0xFE, 0x02, 0x06,
0x0C, 0x18, 0x30, 0x40, 0xFF, 0x1F, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10,
0x10, 0x10, 0x10, 0x10, 0x1E, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1,
0x83, 0x06, 0x0C, 0x18, 0x3F, 0xC0, 0xF8, 0x08, 0x08, 0x08, 0x08, 0x0F,
0x08, 0x08, 0x08, 0x08, 0x08, 0x78, 0xC2, 0xFE };
const GFXglyph stalker19pt7bGlyphs[] PROGMEM = {
{ 0, 1, 1, 5, 0, 0 }, // 0x20 ' '
{ 1, 2, 12, 5, 3, -11 }, // 0x21 '!'
{ 4, 7, 5, 9, 1, -10 }, // 0x22 '"'
{ 9, 7, 10, 9, 1, -10 }, // 0x23 '#'
{ 18, 7, 12, 9, 2, -11 }, // 0x24 '$'
{ 29, 8, 12, 9, 1, -11 }, // 0x25 '%'
{ 41, 1, 1, 9, 0, 0 }, // 0x26 '&'
{ 42, 3, 6, 6, 3, -10 }, // 0x27 '''
{ 45, 3, 12, 6, 2, -11 }, // 0x28 '('
{ 50, 3, 12, 6, 2, -11 }, // 0x29 ')'
{ 55, 8, 9, 9, 1, -9 }, // 0x2A '*'
{ 64, 7, 7, 9, 1, -7 }, // 0x2B '+'
{ 71, 3, 6, 6, 3, -3 }, // 0x2C ','
{ 74, 7, 2, 9, 1, -5 }, // 0x2D '-'
{ 76, 3, 3, 6, 3, -3 }, // 0x2E '.'
{ 78, 8, 12, 9, 1, -11 }, // 0x2F '/'
{ 90, 7, 12, 9, 1, -11 }, // 0x30 '0'
{ 101, 7, 12, 9, 1, -11 }, // 0x31 '1'
{ 112, 7, 12, 9, 1, -11 }, // 0x32 '2'
{ 123, 8, 12, 9, 1, -11 }, // 0x33 '3'
{ 135, 7, 11, 9, 2, -10 }, // 0x34 '4'
{ 145, 7, 12, 9, 2, -11 }, // 0x35 '5'
{ 156, 8, 12, 9, 1, -11 }, // 0x36 '6'
{ 168, 7, 12, 9, 2, -11 }, // 0x37 '7'
{ 179, 7, 12, 9, 1, -11 }, // 0x38 '8'
{ 190, 8, 12, 9, 1, -11 }, // 0x39 '9'
{ 202, 3, 8, 6, 3, -8 }, // 0x3A ':'
{ 205, 4, 10, 6, 2, -7 }, // 0x3B ';'
{ 210, 8, 9, 9, 1, -9 }, // 0x3C '<'
{ 219, 7, 4, 9, 1, -7 }, // 0x3D '='
{ 223, 8, 9, 9, 1, -9 }, // 0x3E '>'
{ 232, 8, 12, 9, 1, -11 }, // 0x3F '?'
{ 244, 8, 12, 9, 1, -11 }, // 0x40 '@'
{ 256, 8, 12, 9, 1, -11 }, // 0x41 'A'
{ 268, 8, 12, 9, 1, -11 }, // 0x42 'B'
{ 280, 8, 12, 8, 1, -11 }, // 0x43 'C'
{ 292, 8, 12, 9, 1, -11 }, // 0x44 'D'
{ 304, 7, 12, 9, 1, -11 }, // 0x45 'E'
{ 315, 7, 12, 9, 2, -11 }, // 0x46 'F'
{ 326, 7, 12, 9, 1, -11 }, // 0x47 'G'
{ 337, 7, 12, 9, 1, -11 }, // 0x48 'H'
{ 348, 7, 12, 9, 2, -11 }, // 0x49 'I'
{ 359, 6, 12, 8, 2, -11 }, // 0x4A 'J'
{ 368, 8, 12, 9, 1, -11 }, // 0x4B 'K'
{ 380, 8, 12, 9, 1, -11 }, // 0x4C 'L'
{ 392, 8, 12, 9, 1, -11 }, // 0x4D 'M'
{ 404, 7, 12, 9, 1, -11 }, // 0x4E 'N'
{ 415, 8, 12, 9, 1, -11 }, // 0x4F 'O'
{ 427, 7, 12, 9, 1, -11 }, // 0x50 'P'
{ 438, 7, 12, 9, 1, -11 }, // 0x51 'Q'
{ 449, 7, 12, 9, 1, -11 }, // 0x52 'R'
{ 460, 7, 12, 9, 1, -11 }, // 0x53 'S'
{ 471, 7, 12, 8, 1, -11 }, // 0x54 'T'
{ 482, 7, 12, 9, 1, -11 }, // 0x55 'U'
{ 493, 8, 12, 9, 1, -11 }, // 0x56 'V'
{ 505, 8, 12, 9, 1, -11 }, // 0x57 'W'
{ 517, 8, 12, 9, 1, -11 }, // 0x58 'X'
{ 529, 7, 12, 9, 1, -11 }, // 0x59 'Y'
{ 540, 8, 12, 9, 1, -11 }, // 0x5A 'Z'
{ 552, 7, 12, 9, 1, -11 }, // 0x5B '['
{ 563, 8, 12, 9, 1, -11 }, // 0x5C '\'
{ 575, 7, 12, 9, 1, -11 }, // 0x5D ']'
{ 586, 8, 6, 9, 1, -7 }, // 0x5E '^'
{ 592, 11, 1, 11, 0, 2 }, // 0x5F '_'
{ 594, 4, 3, 6, 2, -11 }, // 0x60 '`'
{ 596, 7, 8, 9, 1, -7 }, // 0x61 'a'
{ 603, 8, 12, 9, 1, -11 }, // 0x62 'b'
{ 615, 8, 8, 8, 1, -7 }, // 0x63 'c'
{ 623, 7, 12, 9, 1, -11 }, // 0x64 'd'
{ 634, 7, 8, 9, 1, -7 }, // 0x65 'e'
{ 641, 7, 12, 8, 1, -11 }, // 0x66 'f'
{ 652, 8, 11, 9, 1, -7 }, // 0x67 'g'
{ 663, 7, 12, 9, 1, -11 }, // 0x68 'h'
{ 674, 6, 12, 8, 2, -11 }, // 0x69 'i'
{ 683, 6, 15, 8, 1, -11 }, // 0x6A 'j'
{ 695, 7, 12, 8, 1, -11 }, // 0x6B 'k'
{ 706, 6, 12, 7, 2, -11 }, // 0x6C 'l'
{ 715, 8, 8, 9, 1, -7 }, // 0x6D 'm'
{ 723, 7, 8, 9, 1, -7 }, // 0x6E 'n'
{ 730, 7, 8, 9, 1, -7 }, // 0x6F 'o'
{ 737, 8, 12, 9, 1, -8 }, // 0x70 'p'
{ 749, 7, 11, 9, 1, -7 }, // 0x71 'q'
{ 759, 8, 9, 9, 1, -8 }, // 0x72 'r'
{ 768, 7, 8, 9, 1, -7 }, // 0x73 's'
{ 775, 8, 11, 8, 1, -10 }, // 0x74 't'
{ 786, 7, 8, 9, 1, -7 }, // 0x75 'u'
{ 793, 7, 8, 9, 1, -7 }, // 0x76 'v'
{ 800, 8, 8, 9, 1, -7 }, // 0x77 'w'
{ 808, 7, 8, 9, 1, -7 }, // 0x78 'x'
{ 815, 7, 11, 9, 1, -7 }, // 0x79 'y'
{ 825, 8, 8, 9, 1, -7 }, // 0x7A 'z'
{ 833, 8, 12, 8, 1, -11 }, // 0x7B '{'
{ 845, 7, 14, 9, 1, -13 }, // 0x7C '|'
{ 858, 8, 12, 9, 1, -11 }, // 0x7D '}'
{ 870, 8, 2, 10, 2, -6 } }; // 0x7E '~'
const GFXfont stalker19pt7b PROGMEM = {
(uint8_t *)stalker19pt7bBitmaps,
(GFXglyph *)stalker19pt7bGlyphs,
0x20, 0x7E, 19 };
// Approx. 1544 bytes

View File

@ -1,57 +0,0 @@
#include <Arduino.h>
#include <FastLED.h>
#include "constants.h"
#include "enums.h"
#include "supercomputer.h"
#include "overlay.h"
struct Cell {
float state;
float factor;
};
float cell_value(Cell c) {
return (1.0 + sin(c.state * c.factor)) * 0.5;
}
Cell cells[PANEL_WIDTH * PANEL_HEIGHT];
bool cells_setup = false;
uint8_t rainbow_offset = 0;
void setup_cells() {
for(int i = 0; i < PANEL_WIDTH * PANEL_HEIGHT; i++) {
cells[i].state = random(100, 1000) / 100.0;
cells[i].factor = random(90, 110) / 100.0;
}
}
void draw_supercomputer(MatrixPanel_I2S_DMA *matrix, Mode mode) {
if (!cells_setup) {
setup_cells();
cells_setup = true;
}
for(int i = 0; i < PANEL_WIDTH * PANEL_HEIGHT; i++) {
int x = i % PANEL_WIDTH;
int y = i / PANEL_WIDTH;
cells[i].state += 0.3;
if (mode == Stealth) {
// red only
matrix->drawPixel(x, y, matrix->color565((int)round(255.0 * cell_value(cells[i])), 0, 0));
} else {
// rainbow
float progress = (255.0 / PANEL_WIDTH) * x;
uint8_t hue = ((int)round(progress) + rainbow_offset);
if (overlay[i / 8] & (1 << (7 - (i % 8)))) {
hue -= 128;
} else if (mode == HighVis) {
continue;
}
CHSV hsv_color(hue, 255, 255 * cell_value(cells[i]));
CRGB rgb;
hsv2rgb_rainbow(hsv_color, rgb);
matrix->drawPixel(x, y, matrix->color565(rgb.r, rgb.g, rgb.b));
}
}
rainbow_offset++;
delay(25);
}

View File

@ -1,3 +0,0 @@
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
#include "enums.h"
void draw_supercomputer(MatrixPanel_I2S_DMA *matrix, Mode mode);