Compare commits

..

3 Commits

Author SHA1 Message Date
fc9171da08 draw some more frames 2024-12-17 10:29:03 +01:00
Felix Pankratz
f1036a67f3 basic sine grid 2024-12-16 16:36:42 +01:00
Felix Pankratz
357beae051 initial commit 2024-12-16 16:08:38 +01:00
28 changed files with 298 additions and 935 deletions

View File

@ -10,12 +10,10 @@ Displays my name.
Upper button changes visibility level, lower button changes display style.
|Style|Description|Visibility 0|Visibility 1|Visibility 2|
|Style|Description|Visibility 0|Visibility 1|Visibility 1|
|--|--|--|--|--|
|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
@ -28,3 +26,7 @@ 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).
## Ideas:
- CYBER Absperrband

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

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

@ -44,5 +44,4 @@ void draw_congress(MatrixPanel_I2S_DMA *matrix, enum Mode mode) {
matrix->drawFastVLine(63, 0, PANEL_HEIGHT, grid_color);
delay(10);
}
delay(10);
}

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

@ -8,11 +8,6 @@ enum Mode {
enum DisplayStyle {
Rain,
Congress,
Supercomputer,
Cyber,
Flame
Congress
};
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

@ -6,21 +6,13 @@
#include "constants.h"
#include "congress.h"
#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;
unsigned long last_switch;
bool cycling = true;
DisplayStyle style = Congress;
void setup(){
pinMode(ONBOARD_LED, OUTPUT);
@ -31,8 +23,6 @@ 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
@ -44,21 +34,15 @@ 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);
}
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);
if(!digitalRead(BACK_BUTTON)) {
switch(mode) {
@ -76,34 +60,24 @@ void loop() {
}
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;
} else {
style = next_style(style);
switch(style) {
case Rain:
style = Congress;
break;
case Congress:
style = Rain;
break;
}
while(!digitalRead(NEXT_BUTTON)); // Wait for release
}
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,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

@ -57,32 +57,32 @@ void draw_rain(MatrixPanel_I2S_DMA *matrix, Mode mode) {
rain_initialized = true;
}
unsigned long timestamp = millis();
int r = 0;
while(r < raindrops.size()) {
if ((timestamp - raindrops[r].last_moved) > raindrops[r].speed) {
int x = 0;
while(x < raindrops.size()) {
if ((timestamp - raindrops[x].last_moved) > raindrops[x].speed) {
// step down a pixel
raindrops[r].y++;
raindrops[r].last_moved = timestamp;
raindrops[x].y++;
raindrops[x].last_moved = timestamp;
}
if (raindrops[r].y > PANEL_HEIGHT + raindrops[r].length) {
if (raindrops[x].y > PANEL_HEIGHT + raindrops[x].length) {
raindrops.push_back({
false,
raindrops[r].x,
0 - random(4),
raindrops[x].x,
0 - random(8),
random(20, 28),
random(10, 55),
random(0, 76),
millis()
});
raindrops.erase(raindrops.begin() + r);
raindrops.erase(raindrops.begin() + x);
continue;
}
if (raindrops[r].y >= 0) {
if (raindrops[x].y >= 0) {
//draw our pixel
matrix->drawPixel(raindrops[r].x, raindrops[r].y, matrix->color565(128, 255, 128));
matrix->drawPixel(raindrops[x].x, raindrops[x].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);
for (int trail_offset = 1; trail_offset < raindrops[x].length; trail_offset++) {
int trail_y = raindrops[x].y - trail_offset;
float brightness = ((raindrops[x].length - trail_offset) / (float)raindrops[x].length);
uint16_t fade_color = matrix->color565(
COLOR_DEFAULT_R * brightness,
COLOR_DEFAULT_G * brightness,
@ -93,23 +93,22 @@ void draw_rain(MatrixPanel_I2S_DMA *matrix, Mode mode) {
break;
}
int pixel_num = (trail_y * PANEL_WIDTH) + raindrops[r].x;
int pixel_num = (trail_y * PANEL_WIDTH) + raindrops[x].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);
matrix->drawPixel(raindrops[x].x, trail_y, color_highlight);
} else {
matrix->drawPixel(raindrops[r].x, trail_y, matrix->color565(
matrix->drawPixel(raindrops[x].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);
matrix->drawPixel(raindrops[x].x, trail_y, fade_color);
}
}
}
r++;
x++;
}
//delay(25);
}

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);

8
simulator/color.py Normal file
View File

@ -0,0 +1,8 @@
#!/usr/bin/env python3
class Color:
def __init__(self, r: int, g: int, b: int) -> None:
self.r = r
self.g = g
self.b = b

34
simulator/matrix.py Normal file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env python3
from color import Color
import time
WIDTH = 64
HEIGHT = 32
PIXEL = '\033[38;2;{};{};{}m██'
class Matrix:
def __init__(self) -> None:
self.buffer = [ [Color(0, 0, 0) for _ in range(WIDTH)] for __ in range(HEIGHT) ]
def drawPixel(self, x: int, y: int, c: Color):
self.buffer[y][x] = c
def clear(self) -> None:
self.__init__()
def show(self) -> None:
# clear
print("\033[H\033[J", end="")
for line in self.buffer:
output = ''.join(PIXEL.format(px.r, px.g, px.b) for px in line)
print(output)
def main() -> None:
m = Matrix()
for i in range(32):
m.drawPixel(i, i, Color(255, 0, 4*i))
for i in range(32):
m.drawPixel(32 + i, 31 - i, Color(255, 0, (4*i)))
m.show()
if __name__ == '__main__':
main()

34
simulator/sine_grid.py Normal file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env python3
import math
from color import Color
from matrix import Matrix
import time
import random
class Cell:
def __init__(self) -> None:
self.state: float = random.uniform(0, 10)
self.increment: float = random.uniform(0.1, 0.5)
self.factor: float = random.uniform(0.9, 1.1)
def get_value(self) -> float:
return 1 + (math.sin(self.state) * self.factor)
def main():
m = Matrix()
cells = [Cell() for _ in range(2048)]
for i in range(255):
for index, cell in enumerate(cells):
cell.state += 0.2
m.drawPixel(index % 64, index // 64, Color(
round(cell.get_value()*255),
0,
0
))
m.show()
time.sleep(0.3)
if __name__ == '__main__':
main()