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
20 changed files with 298 additions and 735 deletions

View File

@ -10,12 +10,10 @@ Displays my name.
Upper button changes visibility level, lower button changes display style. 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| |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| |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 ### 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. 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). 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

@ -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); matrix->drawFastVLine(63, 0, PANEL_HEIGHT, grid_color);
delay(10); 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 { enum DisplayStyle {
Rain, Rain,
Congress, Congress
Supercomputer,
Cyber,
Flame
}; };
DisplayStyle next_style(DisplayStyle style);
#endif #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 "constants.h"
#include "congress.h" #include "congress.h"
#include "rain.h" #include "rain.h"
#include "supercomputer.h"
#include "cyber.h"
#include "flame.h"
#include "pillowlava8pt7b.h" #include "pillowlava8pt7b.h"
#define CYCLE_TIME_MS 20000
MatrixPanel_I2S_DMA *matrix = nullptr; MatrixPanel_I2S_DMA *matrix = nullptr;
Mode mode = HighVis; Mode mode = HighVis;
DisplayStyle style = Rain; DisplayStyle style = Congress;
unsigned long last_switch;
bool cycling = true;
void setup(){ void setup(){
pinMode(ONBOARD_LED, OUTPUT); 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::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); HUB75_I2S_CFG mxconfig(PANEL_WIDTH, PANEL_HEIGHT, PANELS_NUMBER, _pins);
last_switch = millis();
mxconfig.gpio.e = PIN_E; mxconfig.gpio.e = PIN_E;
mxconfig.driver = HUB75_I2S_CFG::FM6126A; // for panels using FM6126A chips mxconfig.driver = HUB75_I2S_CFG::FM6126A; // for panels using FM6126A chips
@ -44,21 +34,15 @@ void setup(){
matrix = new MatrixPanel_I2S_DMA(mxconfig); matrix = new MatrixPanel_I2S_DMA(mxconfig);
matrix->begin(); matrix->begin();
matrix->setBrightness8(128); matrix->setBrightness8(64);
matrix->fillScreenRGB888(0, 0, 0); matrix->fillScreenRGB888(0, 0, 0);
matrix->setTextWrap(false);
matrix->setFont(&Pilowlava_Regular8pt7b); matrix->setFont(&Pilowlava_Regular8pt7b);
} }
void loop() { void loop() {
matrix ->flipDMABuffer(); matrix ->flipDMABuffer();
matrix->clearScreen(); matrix->clearScreen();
delay(25);
if (cycling and millis() - last_switch > CYCLE_TIME_MS) {
// next style
style = next_style(style); //DisplayStyle((style + 1) % (NumStyles - 1));
last_switch = millis();
}
if(!digitalRead(BACK_BUTTON)) { if(!digitalRead(BACK_BUTTON)) {
switch(mode) { switch(mode) {
@ -76,15 +60,15 @@ void loop() {
} }
if(!digitalRead(NEXT_BUTTON)) { if(!digitalRead(NEXT_BUTTON)) {
unsigned long pressed_at = millis(); switch(style) {
while(!digitalRead(NEXT_BUTTON)); // Wait for release case Rain:
// see if the button was held or tapped style = Congress;
if (millis() - pressed_at > 500) { break;
// todo case Congress:
cycling = not cycling; style = Rain;
} else { break;
style = next_style(style);
} }
while(!digitalRead(NEXT_BUTTON)); // Wait for release
} }
switch(style) { switch(style) {
@ -92,18 +76,8 @@ void loop() {
draw_rain(matrix, mode); draw_rain(matrix, mode);
break; break;
case Congress: case Congress:
matrix->setFont(&Pilowlava_Regular8pt7b);
draw_congress(matrix, mode); draw_congress(matrix, mode);
break; 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; rain_initialized = true;
} }
unsigned long timestamp = millis(); unsigned long timestamp = millis();
int r = 0; int x = 0;
while(r < raindrops.size()) { while(x < raindrops.size()) {
if ((timestamp - raindrops[r].last_moved) > raindrops[r].speed) { if ((timestamp - raindrops[x].last_moved) > raindrops[x].speed) {
// step down a pixel // step down a pixel
raindrops[r].y++; raindrops[x].y++;
raindrops[r].last_moved = timestamp; 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({ raindrops.push_back({
false, false,
raindrops[r].x, raindrops[x].x,
0 - random(4), 0 - random(8),
random(20, 28), random(20, 28),
random(10, 55), random(0, 76),
millis() millis()
}); });
raindrops.erase(raindrops.begin() + r); raindrops.erase(raindrops.begin() + x);
continue; continue;
} }
if (raindrops[r].y >= 0) { if (raindrops[x].y >= 0) {
//draw our pixel //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 // draw our trail
for (int trail_offset = 1; trail_offset < raindrops[r].length; trail_offset++) { for (int trail_offset = 1; trail_offset < raindrops[x].length; trail_offset++) {
int trail_y = raindrops[r].y - trail_offset; int trail_y = raindrops[x].y - trail_offset;
float brightness = ((raindrops[r].length - trail_offset) / (float)raindrops[r].length); float brightness = ((raindrops[x].length - trail_offset) / (float)raindrops[x].length);
uint16_t fade_color = matrix->color565( uint16_t fade_color = matrix->color565(
COLOR_DEFAULT_R * brightness, COLOR_DEFAULT_R * brightness,
COLOR_DEFAULT_G * brightness, COLOR_DEFAULT_G * brightness,
@ -93,23 +93,22 @@ void draw_rain(MatrixPanel_I2S_DMA *matrix, Mode mode) {
break; 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 (overlay[pixel_num / 8] & (1 << (7 - (pixel_num % 8))) and mode != Stealth) {
if (mode == HighVis) { if (mode == HighVis) {
matrix->drawPixel(raindrops[r].x, trail_y, color_highlight); matrix->drawPixel(raindrops[x].x, trail_y, color_highlight);
} else { } 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_R * brightness,
COLOR_HIGHLIGHT_G * brightness, COLOR_HIGHLIGHT_G * brightness,
COLOR_HIGHLIGHT_B * brightness COLOR_HIGHLIGHT_B * brightness
)); ));
} }
} else { } 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()