Add OLED support

This commit is contained in:
2025-06-14 00:05:03 +02:00
parent 5788c9639d
commit b406c574c2
14 changed files with 378 additions and 83 deletions
+240
View File
@@ -0,0 +1,240 @@
const uint8_t UiFontBitmaps[] PROGMEM = {
0x00, 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xF8, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7,
0x26, 0x26, 0x38, 0xF0, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xE3,
0xC3, 0x8F, 0x0E, 0x3C, 0x38, 0xF0, 0xE3, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFC, 0xE3, 0xC3, 0x8F, 0x00, 0x1E, 0x07, 0x83, 0xFC, 0xFF, 0xFF, 0xF7,
0x8D, 0xE3, 0xFC, 0xFF, 0x0F, 0xF1, 0xEC, 0x7B, 0xFF, 0xFF, 0xFF, 0xF0,
0x78, 0x1E, 0x00, 0xF8, 0x3F, 0x60, 0xFD, 0x8F, 0xFE, 0x7C, 0xF9, 0xF0,
0x1F, 0x00, 0x7C, 0x07, 0xC0, 0x3E, 0xFC, 0xFB, 0xFF, 0x8C, 0xFE, 0x33,
0xE0, 0xFC, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0xFF, 0xFF, 0xFF, 0xFC, 0x78,
0x1E, 0x07, 0x81, 0xE0, 0xFF, 0xFF, 0xFF, 0x90, 0x80, 0x01, 0xC0, 0x70,
0x7C, 0x7C, 0x1F, 0x0F, 0x83, 0xE3, 0xE0, 0x3E, 0x0F, 0x81, 0xF0, 0x7C,
0x07, 0xC0, 0x70, 0x1C, 0xE0, 0x3E, 0x0F, 0x80, 0xF8, 0x3E, 0x07, 0xC1,
0xF0, 0x1F, 0x1F, 0x07, 0xC3, 0xE0, 0xF8, 0xF8, 0x38, 0x0E, 0x00, 0x20,
0xC2, 0x0C, 0xF9, 0xFF, 0x9F, 0x3F, 0xC3, 0xFC, 0x1F, 0x03, 0xFC, 0x3F,
0xCF, 0x9F, 0xF9, 0xF2, 0x0C, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0xFF, 0xFF,
0xFF, 0xFC, 0x78, 0x1E, 0x07, 0x80, 0x39, 0xCF, 0xCE, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFE, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x03, 0xE0, 0x01, 0xF0,
0x03, 0xE0, 0x01, 0xF3, 0x83, 0xF1, 0xF3, 0xE0, 0xF9, 0xF0, 0x1F, 0xE0,
0x0F, 0xF0, 0x03, 0xE0, 0x00, 0x60, 0x00, 0x30, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87,
0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0x3F,
0xFF, 0xFC, 0x07, 0x01, 0xCF, 0xF3, 0xFF, 0xFC, 0xE0, 0x38, 0x0E, 0x03,
0x80, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x3F, 0xFF, 0xFC, 0x07, 0x01, 0xFF,
0xCF, 0xF3, 0xFF, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0xFF, 0xFF, 0xCF, 0xF0,
0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xC0,
0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
0xE0, 0x3F, 0xCF, 0xF3, 0xFF, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0xFF, 0xFF,
0xCF, 0xF0, 0x3F, 0xCF, 0xFF, 0xFF, 0x80, 0xE0, 0x3F, 0xCF, 0xF3, 0xFF,
0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xFF, 0xCF, 0xC3, 0xF0, 0xFF, 0xFF, 0xFF,
0xFC, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07,
0x01, 0xC0, 0x70, 0x1C, 0x3F, 0x0F, 0xFF, 0xFF, 0x87, 0xE1, 0xCF, 0xC3,
0xF3, 0xFF, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xFF, 0xCF, 0xC3, 0xF0, 0x3F,
0x0F, 0xFF, 0xFF, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xFF, 0x3F, 0xCF, 0xF0,
0x1C, 0x07, 0x3F, 0xCF, 0xC3, 0xF0, 0xFF, 0xFE, 0x07, 0xFF, 0xF0, 0x39,
0xCE, 0x73, 0x80, 0x07, 0x39, 0xCE, 0x7E, 0x70, 0x01, 0x01, 0x07, 0x1F,
0x1F, 0x3F, 0x3F, 0xFF, 0x3F, 0x3F, 0x1F, 0x1F, 0x07, 0x01, 0x01, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x80,
0xE0, 0xE0, 0xF8, 0xF8, 0xFC, 0xFC, 0xFF, 0xFC, 0xFC, 0xF8, 0xF8, 0xE0,
0x80, 0x80, 0x3F, 0x0F, 0xFF, 0xFF, 0x87, 0xE1, 0xC0, 0x70, 0x1C, 0x7F,
0x1F, 0x07, 0xC0, 0x00, 0x00, 0x1E, 0x07, 0x81, 0xE0, 0x00, 0xFF, 0xFD,
0xFF, 0xF8, 0xFF, 0xF7, 0xFF, 0xEF, 0xFC, 0x3E, 0xF8, 0x7D, 0xF3, 0xE0,
0xE7, 0x3D, 0xCE, 0x7B, 0x80, 0xF7, 0x01, 0xEF, 0xFF, 0xDF, 0xFF, 0xBF,
0xFF, 0x00, 0x3F, 0x0F, 0xFF, 0xFF, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xFF,
0xFF, 0xFF, 0xFE, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1C, 0xFF, 0x3F, 0xFF,
0xFF, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xFC, 0xE1, 0xF8, 0x7E, 0x1F, 0x87,
0xFF, 0xFF, 0xCF, 0xF0, 0x3F, 0xCF, 0xFF, 0xFF, 0x80, 0xE0, 0x38, 0x0E,
0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xFF, 0xCF, 0xF3, 0xFC, 0xFF,
0x3F, 0xFF, 0xFF, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E,
0x1F, 0x87, 0xFF, 0xFF, 0xCF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xE0,
0x3F, 0xCF, 0xF3, 0xFC, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xFF, 0xFF, 0xFF,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0xFC, 0xFF,
0x3F, 0xCE, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x00, 0x3F, 0xCF, 0xFF, 0xFF,
0x80, 0xE0, 0x38, 0x0E, 0x03, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xFF,
0xCF, 0xF3, 0xFC, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xFF, 0xFF, 0xFF,
0xFF, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1C, 0xFF, 0xFF,
0xF9, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xCF, 0xFF, 0xFF, 0x80,
0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0xE1, 0xF8,
0x7E, 0x1F, 0x87, 0xFF, 0xCF, 0xC3, 0xF0, 0xE3, 0xF8, 0xFE, 0x3F, 0x9F,
0xE7, 0xFF, 0xCF, 0xF3, 0xFC, 0xE7, 0xF9, 0xFE, 0x3F, 0x8F, 0xE3, 0xF8,
0xFE, 0x3C, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80,
0xE0, 0x38, 0x0E, 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFC, 0xE0, 0x3F, 0xE0,
0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xCF, 0xE0,
0x3F, 0x80, 0xFE, 0x03, 0xF8, 0x0F, 0xE0, 0x3F, 0x80, 0xFE, 0x03, 0xC0,
0xE1, 0xFE, 0x7F, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xE1, 0xF8,
0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1C, 0x3F, 0x0F, 0xFF, 0xFF, 0x87,
0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xFF, 0xCF,
0xC3, 0xF0, 0xFF, 0x3F, 0xFF, 0xFF, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xFF,
0xFF, 0x3F, 0xCE, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x00, 0x3F, 0x0F, 0xFF,
0xFF, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87,
0xFF, 0x0F, 0xF3, 0xFC, 0x07, 0x01, 0xC0, 0xFF, 0x3F, 0xFF, 0xFF, 0x87,
0xE1, 0xF8, 0x7E, 0x1F, 0xFF, 0xFF, 0x3F, 0xCE, 0x1F, 0x87, 0xE1, 0xF8,
0x7E, 0x1C, 0x3F, 0xCF, 0xFF, 0xFF, 0x80, 0xE0, 0x3F, 0xCF, 0xF0, 0xFF,
0x01, 0xC0, 0x70, 0x1C, 0x07, 0xFF, 0xFF, 0xCF, 0xF0, 0xFF, 0xFF, 0xFF,
0xFC, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78,
0x1E, 0x07, 0x81, 0xE0, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E,
0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xFF, 0xCF, 0xC3, 0xF0, 0xE1,
0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E,
0x7F, 0x9F, 0xFF, 0x3F, 0x8F, 0xE0, 0xE0, 0x3F, 0x80, 0xFE, 0x03, 0xF8,
0x0F, 0xE0, 0x3F, 0x9C, 0xFE, 0x73, 0xF9, 0xCF, 0xE7, 0x3F, 0x9C, 0xFE,
0x73, 0xF9, 0xCF, 0xFF, 0xFF, 0xE3, 0xFF, 0x8F, 0xC0, 0xE1, 0xF8, 0x7E,
0x1F, 0x87, 0xE1, 0xFF, 0xFF, 0xFC, 0xFC, 0xFF, 0xFF, 0xFE, 0x1F, 0x87,
0xE1, 0xF8, 0x7E, 0x1C, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xFF, 0xFF,
0xFC, 0xFC, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0xFF,
0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0x01, 0xF0, 0x7C, 0x07, 0xC1, 0xF0, 0x3E,
0x03, 0xE0, 0xF8, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF,
0xFF, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0F, 0xFF, 0xFF, 0x80,
0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x1F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0x00, 0x3E, 0x00, 0x7C,
0x00, 0xF8, 0x01, 0xF0, 0x00, 0xFF, 0xFF, 0xF8, 0xF1, 0xE3, 0xC7, 0x8F,
0x1E, 0x3C, 0x78, 0xFF, 0xFF, 0xFF, 0x80, 0x1E, 0x07, 0xC3, 0xF3, 0xFF,
0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xF8, 0x03,
0xFF, 0xC0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xF8, 0xFF, 0xFF, 0xC7, 0xFF,
0xFE, 0x3F, 0xFE, 0x07, 0xFF, 0xF0, 0x3F, 0xFF, 0x83, 0xE3, 0xFC, 0x1F,
0x1F, 0xE3, 0xE0, 0x3F, 0x1C, 0x18, 0x78, 0xE0, 0xC3, 0xC0, 0x0E, 0x1E,
0x00, 0x70, 0xF0, 0x03, 0x87, 0xFF, 0xFC, 0x3F, 0xFF, 0xE1, 0xFF, 0xFF,
0x0F, 0xFF, 0xF8, 0x00, 0x3F, 0x0F, 0xCF, 0xFF, 0xFF, 0x01, 0xCF, 0xF3,
0xFF, 0x87, 0xE1, 0xFF, 0xF3, 0xFC, 0xFF, 0xE0, 0x38, 0x0E, 0x03, 0xFC,
0xFF, 0x3F, 0xFF, 0xFF, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xFF, 0xFF,
0xCF, 0xF0, 0x3F, 0xCF, 0xFF, 0xFF, 0xFF, 0xE0, 0x38, 0x0E, 0x03, 0x80,
0xE0, 0x3F, 0xF3, 0xFC, 0xFF, 0x01, 0xC0, 0x70, 0x1C, 0xFF, 0x3F, 0xFF,
0xFF, 0xFF, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xFF, 0xCF, 0xF3, 0xFC,
0x3F, 0x0F, 0xCF, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0x80, 0xE0, 0x3F,
0xF3, 0xF0, 0xFC, 0x0F, 0x87, 0xCF, 0xE7, 0x03, 0x87, 0xFF, 0xFF, 0xFF,
0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x3F, 0x0F, 0xCF, 0xFF,
0xFF, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xFF, 0xF3, 0xFC, 0xFF, 0x01,
0xC0, 0x73, 0xFC, 0xFC, 0x3F, 0x00, 0xE0, 0x38, 0x0E, 0x03, 0xFC, 0xFF,
0x3F, 0xFF, 0xFF, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E,
0x1C, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xF8, 0x1E, 0x3C, 0x00, 0xF1, 0xE3,
0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0xFF, 0xFF, 0xF0, 0xE0,
0x38, 0x0E, 0x03, 0x87, 0xE1, 0xF9, 0xFE, 0x7F, 0xFC, 0xFF, 0x3F, 0xCE,
0x7F, 0x9F, 0xE1, 0xF8, 0x7E, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
0xFF, 0xF3, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xE7, 0x3F, 0x9C, 0xFE, 0x73,
0xF9, 0xCF, 0xE7, 0x3F, 0x9C, 0xFE, 0x73, 0xF9, 0xCF, 0xFF, 0x3F, 0xCF,
0xFF, 0xFF, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87,
0x3F, 0x0F, 0xCF, 0xFF, 0xFF, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xFF,
0xF3, 0xF0, 0xFC, 0xFF, 0x3F, 0xCF, 0xFF, 0xFF, 0xE1, 0xF8, 0x7E, 0x1F,
0x87, 0xE1, 0xFF, 0xFF, 0xF3, 0xFC, 0xE0, 0x38, 0x0E, 0x00, 0x3F, 0xCF,
0xFF, 0xFF, 0xFF, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xFF, 0xF3, 0xFC,
0xFF, 0x01, 0xC0, 0x70, 0x1C, 0x3F, 0xCF, 0xFF, 0xFF, 0xFF, 0xE0, 0x38,
0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0x3F, 0xCF, 0xFF, 0xFF,
0xFF, 0xE0, 0x0F, 0xC3, 0xF0, 0x07, 0x01, 0xFF, 0xFF, 0xF3, 0xFC, 0x38,
0x38, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3F,
0x1F, 0x1F, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87,
0xE1, 0xFF, 0xF3, 0xFC, 0xFF, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8,
0x7E, 0x1F, 0x9F, 0xE7, 0xFF, 0xCF, 0xE3, 0xF8, 0xE7, 0x3F, 0x9C, 0xFE,
0x73, 0xF9, 0xCF, 0xE7, 0x3F, 0x9C, 0xFE, 0x73, 0xF9, 0xCF, 0xE7, 0x3F,
0xFF, 0xF3, 0xFF, 0x0F, 0xFC, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xFF, 0xCF,
0xC3, 0xF3, 0xFF, 0xFF, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F,
0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xFF, 0xF3, 0xFC, 0xFF, 0x01,
0xC0, 0x7F, 0xFF, 0xFC, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x07, 0xC1, 0xF0, 0x1F, 0x03, 0xE0, 0x3E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
0x01, 0x00, 0x02, 0x00, 0x1F, 0x00, 0x3E, 0x01, 0xFF, 0x07, 0xFF, 0x8F,
0xFF, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x80, 0xFF, 0xFE, 0x7F, 0xF8, 0xFF, 0xF0, 0xFF, 0x81, 0xFF, 0x00, 0xF8,
0x00, 0x40, 0x00, 0x80, 0x3E, 0x3E, 0x1F, 0x1F, 0x38, 0x7C, 0x78, 0xF8,
0xFC, 0x7C, 0x79, 0xF1, 0xF0, 0xF8, 0xF8 };
const GFXglyph UiFontGlyphs[] PROGMEM = {
{ 0, 1, 1, 8, 0, 0 }, // 0x20 ' '
{ 1, 3, 15, 5, 0, -14 }, // 0x21 '!'
{ 7, 8, 7, 10, 0, -14 }, // 0x22 '"'
{ 14, 14, 15, 15, 0, -14 }, // 0x23 '#'
{ 41, 10, 17, 12, 0, -16 }, // 0x24 '$'
{ 63, 14, 13, 15, 0, -14 }, // 0x25 '%'
{ 86, 10, 11, 12, 0, -13 }, // 0x26 '&'
{ 100, 5, 7, 7, 0, -16 }, // 0x27 '''
{ 105, 10, 15, 12, 0, -14 }, // 0x28 '('
{ 124, 10, 15, 12, 0, -14 }, // 0x29 ')'
{ 143, 12, 12, 14, 0, -13 }, // 0x2A '*'
{ 161, 10, 10, 12, 0, -11 }, // 0x2B '+'
{ 174, 5, 5, 7, 0, -2 }, // 0x2C ','
{ 178, 8, 3, 10, 0, -7 }, // 0x2D '-'
{ 181, 3, 5, 5, 0, -4 }, // 0x2E '.'
{ 183, 17, 14, 19, 0, -13 }, // 0x2F '/'
{ 213, 10, 15, 12, 0, -14 }, // 0x30 '0'
{ 232, 3, 15, 5, 0, -14 }, // 0x31 '1'
{ 238, 10, 15, 12, 0, -14 }, // 0x32 '2'
{ 257, 10, 15, 12, 0, -14 }, // 0x33 '3'
{ 276, 10, 15, 12, 0, -14 }, // 0x34 '4'
{ 295, 10, 15, 12, 0, -14 }, // 0x35 '5'
{ 314, 10, 15, 12, 0, -14 }, // 0x36 '6'
{ 333, 10, 15, 12, 0, -14 }, // 0x37 '7'
{ 352, 10, 15, 12, 0, -14 }, // 0x38 '8'
{ 371, 10, 15, 12, 0, -14 }, // 0x39 '9'
{ 390, 3, 12, 5, 0, -11 }, // 0x3A ':'
{ 395, 5, 14, 7, 0, -11 }, // 0x3B ';'
{ 404, 8, 15, 10, 0, -14 }, // 0x3C '<'
{ 419, 10, 9, 12, 0, -11 }, // 0x3D '='
{ 431, 8, 15, 12, 2, -14 }, // 0x3E '>'
{ 446, 10, 15, 12, 0, -14 }, // 0x3F '?'
{ 465, 15, 15, 17, 0, -14 }, // 0x40 '@'
{ 494, 10, 15, 12, 0, -14 }, // 0x41 'A'
{ 513, 10, 15, 12, 0, -14 }, // 0x42 'B'
{ 532, 10, 15, 12, 0, -14 }, // 0x43 'C'
{ 551, 10, 15, 12, 0, -14 }, // 0x44 'D'
{ 570, 10, 15, 12, 0, -14 }, // 0x45 'E'
{ 589, 10, 15, 12, 0, -14 }, // 0x46 'F'
{ 608, 10, 15, 12, 0, -14 }, // 0x47 'G'
{ 627, 10, 15, 12, 0, -14 }, // 0x48 'H'
{ 646, 7, 15, 8, 0, -14 }, // 0x49 'I'
{ 660, 10, 15, 12, 0, -14 }, // 0x4A 'J'
{ 679, 10, 15, 14, 2, -14 }, // 0x4B 'K'
{ 698, 10, 15, 12, 0, -14 }, // 0x4C 'L'
{ 717, 14, 15, 15, 0, -14 }, // 0x4D 'M'
{ 744, 10, 15, 12, 0, -14 }, // 0x4E 'N'
{ 763, 10, 15, 12, 0, -14 }, // 0x4F 'O'
{ 782, 10, 15, 12, 0, -14 }, // 0x50 'P'
{ 801, 10, 17, 12, 0, -14 }, // 0x51 'Q'
{ 823, 10, 15, 12, 0, -14 }, // 0x52 'R'
{ 842, 10, 15, 12, 0, -14 }, // 0x53 'S'
{ 861, 10, 15, 12, 0, -14 }, // 0x54 'T'
{ 880, 10, 15, 12, 0, -14 }, // 0x55 'U'
{ 899, 10, 15, 12, 0, -14 }, // 0x56 'V'
{ 918, 14, 15, 15, 0, -14 }, // 0x57 'W'
{ 945, 10, 15, 12, 0, -14 }, // 0x58 'X'
{ 964, 10, 15, 12, 0, -14 }, // 0x59 'Y'
{ 983, 12, 15, 14, 0, -14 }, // 0x5A 'Z'
{ 1006, 7, 15, 8, 0, -14 }, // 0x5B '['
{ 1020, 15, 15, 17, 0, -14 }, // 0x5C '\'
{ 1049, 7, 15, 8, 0, -14 }, // 0x5D ']'
{ 1063, 10, 5, 12, 0, -14 }, // 0x5E '^'
{ 1070, 14, 3, 15, 0, 3 }, // 0x5F '_'
{ 1076, 21, 21, 20, -2, -18 }, // 0x60 '`'
{ 1132, 10, 12, 12, 0, -11 }, // 0x61 'a'
{ 1147, 10, 15, 12, 0, -14 }, // 0x62 'b'
{ 1166, 10, 12, 12, 0, -11 }, // 0x63 'c'
{ 1181, 10, 15, 12, 0, -14 }, // 0x64 'd'
{ 1200, 10, 12, 12, 0, -11 }, // 0x65 'e'
{ 1215, 9, 15, 8, -2, -14 }, // 0x66 'f'
{ 1232, 10, 17, 12, 0, -11 }, // 0x67 'g'
{ 1254, 10, 15, 12, 0, -14 }, // 0x68 'h'
{ 1273, 3, 15, 5, 0, -14 }, // 0x69 'i'
{ 1279, 7, 18, 8, 0, -14 }, // 0x6A 'j'
{ 1295, 10, 15, 12, 0, -14 }, // 0x6B 'k'
{ 1314, 3, 15, 5, 0, -14 }, // 0x6C 'l'
{ 1320, 14, 12, 15, 0, -11 }, // 0x6D 'm'
{ 1341, 10, 12, 12, 0, -11 }, // 0x6E 'n'
{ 1356, 10, 12, 12, 0, -11 }, // 0x6F 'o'
{ 1371, 10, 15, 12, 0, -11 }, // 0x70 'p'
{ 1390, 10, 15, 12, 0, -11 }, // 0x71 'q'
{ 1409, 10, 12, 12, 0, -11 }, // 0x72 'r'
{ 1424, 10, 12, 12, 0, -11 }, // 0x73 's'
{ 1439, 8, 15, 10, 0, -14 }, // 0x74 't'
{ 1454, 10, 12, 12, 0, -11 }, // 0x75 'u'
{ 1469, 10, 12, 12, 0, -11 }, // 0x76 'v'
{ 1484, 14, 12, 15, 0, -11 }, // 0x77 'w'
{ 1505, 10, 12, 12, 0, -11 }, // 0x78 'x'
{ 1520, 10, 17, 12, 0, -11 }, // 0x79 'y'
{ 1542, 12, 12, 14, 0, -11 }, // 0x7A 'z'
{ 1560, 15, 9, 17, 0, -11 }, // 0x7B '{'
{ 1577, 3, 19, 5, 0, -16 }, // 0x7C '|'
{ 1585, 15, 8, 17, 0, -7 }, // 0x7D '}'
{ 1600, 17, 7, 19, 0, -9 } }; // 0x7E '~'
const GFXfont UiFont PROGMEM = {
(uint8_t *)UiFontBitmaps,
(GFXglyph *)UiFontGlyphs,
0x20, 0x7E, 28 };
// Approx. 2287 bytes
+56
View File
@@ -0,0 +1,56 @@
// bootup logo
#define BOOTLOGO_WIDTH 128
#define BOOTLOGO_HEIGHT 32
const unsigned char bootuplogo [] PROGMEM = {
0x00, 0x00, 0x00, 0x10, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x78, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x01, 0xc8, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x13, 0x80, 0x03, 0x08, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0xe0, 0x06, 0x68, 0x10, 0x80, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00,
0x10, 0x3f, 0xfc, 0xec, 0xf0, 0x80, 0x00, 0x00, 0x01, 0xf6, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00,
0x17, 0x18, 0x00, 0xad, 0xe3, 0x80, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x14, 0x80, 0x00, 0xed, 0xc7, 0x1f, 0x19, 0x8e, 0x76, 0x07, 0xc3, 0xc7, 0xbe, 0x76, 0x3c, 0x7c,
0x14, 0x80, 0x00, 0x64, 0x07, 0x19, 0x99, 0x98, 0xc6, 0x06, 0x66, 0x6c, 0x18, 0xc6, 0x66, 0x66,
0x17, 0x00, 0x00, 0x04, 0x00, 0x19, 0x99, 0x98, 0xc6, 0x06, 0x67, 0xef, 0x18, 0xc6, 0x66, 0x66,
0x16, 0x00, 0x00, 0x04, 0x00, 0x19, 0x99, 0x98, 0xc6, 0x06, 0x66, 0x07, 0x98, 0xc6, 0x66, 0x66,
0x10, 0x00, 0x00, 0x04, 0x00, 0x19, 0x99, 0x98, 0xc3, 0x06, 0x66, 0x01, 0x98, 0xc6, 0x66, 0x66,
0x10, 0x00, 0x00, 0x06, 0x03, 0x1f, 0x0f, 0x18, 0xc1, 0xf6, 0x63, 0xef, 0x1e, 0xc6, 0x3c, 0x66,
0x10, 0x00, 0x00, 0x22, 0x03, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x02, 0x03, 0x23, 0x03, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0x22, 0x39, 0xe1, 0x02, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x3e, 0x3c, 0xc1, 0x02, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x0c, 0x18, 0x0f, 0xc2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0x00, 0x18, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xf1, 0x80, 0x3c, 0x0d, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x3c, 0x07, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x23, 0x80, 0x7e, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x7e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x70, 0x00, 0x4e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x46, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x00, 0x6c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x3c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x80, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// MIDI CHANNEL logo
#define MIDICH_WIDTH 75
#define MIDICH_HEIGHT 20
const unsigned char midich [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc3, 0xc7, 0xff, 0xe1,
0xe0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xe3, 0xc7, 0xff, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x7f, 0xff,
0xe3, 0xc7, 0xff, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xe3, 0xc7, 0xff, 0xf1, 0xe0, 0x00,
0x00, 0x00, 0x78, 0xf1, 0xe3, 0xc0, 0x00, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x78, 0xf1, 0xe3, 0xc0,
0x00, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x78, 0xf1, 0xe3, 0xc7, 0x80, 0xf1, 0xe0, 0x00, 0x00, 0x00,
0x78, 0xf1, 0xe3, 0xc7, 0x80, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x78, 0xf1, 0xe3, 0xc7, 0x80, 0xf1,
0xe0, 0x3f, 0x98, 0x00, 0x78, 0xf1, 0xe3, 0xc7, 0x80, 0xf1, 0xe0, 0x7f, 0x98, 0x00, 0x78, 0xf1,
0xe3, 0xc7, 0x80, 0xf1, 0xe0, 0x60, 0x18, 0x00, 0x78, 0xf1, 0xe3, 0xc7, 0x80, 0xf1, 0xe0, 0x60,
0x18, 0x00, 0x78, 0xf1, 0xe3, 0xc7, 0x80, 0xf1, 0xe0, 0x60, 0x1f, 0xc0, 0x78, 0xf1, 0xe3, 0xc7,
0x80, 0xf1, 0xe0, 0x60, 0x1f, 0xe0, 0x78, 0xf1, 0xe3, 0xc7, 0xff, 0xf1, 0xe0, 0x60, 0x18, 0x60,
0x78, 0xf1, 0xe3, 0xc7, 0xff, 0xf1, 0xe0, 0x60, 0x18, 0x60, 0x78, 0xf1, 0xe3, 0xc7, 0xff, 0xf1,
0xe0, 0x7f, 0x98, 0x66, 0x78, 0xf1, 0xe3, 0xc7, 0xff, 0xe1, 0xe0, 0x3f, 0x98, 0x66, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

+58 -12
View File
@@ -1,11 +1,30 @@
#define FW_VER 1.0
#define USE_OLED true // LEDC68 (Gotek alphanumeric displays)
#define USE_ENCODER false
// include libraries
#include <Adafruit_MCP23X17.h>
#include <MIDI.h>
#if USE_OLED
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "font.h"
#include "gfx.h"
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
Adafruit_SSD1306 oled(SCREEN_WIDTH,SCREEN_HEIGHT,&Wire,-1);
#endif
#if USE_ENCODER
#endif
// Instantiate libraries
Adafruit_MCP23X17 mcp1; // First MCP23017
Adafruit_MCP23X17 mcp2; // Second MCP23017
// Default hardware MIDI. SoftwareSerial is too slow...
MIDI_CREATE_DEFAULT_INSTANCE();
// A7 A6 A5 A4 A3 A2 A1 A0 <-- GPIO A
@@ -17,7 +36,7 @@ MIDI_CREATE_DEFAULT_INSTANCE();
// B0 B1 B2 B3 B4 B5 B6 B7 <-- GPIO B
// Default MIDI channel
byte currentMidiChannel = 8; // Default MIDI channel
byte currentMidiChannel = MIDI_CHANNEL_OMNI; //8; // Default MIDI channel
// Struct for 2 MCP chips.
struct MCPOutput {
@@ -71,15 +90,46 @@ MCPOutput noteToMCP[32] = {
};
void updateOLED() {
#if USE_OLED
oled.clearDisplay();
oled.drawBitmap(0, 0, midich, MIDICH_WIDTH, MIDICH_HEIGHT, 1);
oled.setCursor(88, 18);
oled.setTextColor(SSD1306_WHITE);
oled.setTextSize(1);
if (currentMidiChannel == MIDI_CHANNEL_OMNI) {
oled.print("ALL");
} else {
oled.print(currentMidiChannel);
}
oled.display();
#endif
}
void setup() {
// LED debug
#if USE_OLED
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // I2C addr 0x3C
// Don't halt if missing, just skip display
} else {
oled.clearDisplay();
oled.drawBitmap(0, 0, bootuplogo, BOOTLOGO_WIDTH, BOOTLOGO_HEIGHT, 1);
oled.setCursor(62, 18);
oled.setTextColor(SSD1306_WHITE);
oled.print("FW ver. " + String(FW_VER));
oled.display();
delay(2500);
oled.setFont(&UiFont);
}
#endif
// Midi Activity LED on Pin 13 (aka LED_BUILTIN)
pinMode(LED_BUILTIN, OUTPUT);
// Initialize MCP23017s
mcp1.begin_I2C(0x20);
mcp2.begin_I2C(0x21);
// Initialize MIDI
MIDI.begin(MIDI_CHANNEL_OMNI);
MIDI.begin(currentMidiChannel);
MIDI.setHandleNoteOn(handleNoteOn);
MIDI.setHandleNoteOff(handleNoteOff);
@@ -90,6 +140,7 @@ void setup() {
mcp2.pinMode(i, OUTPUT);
mcp2.digitalWrite(i, LOW);
}
updateOLED();
}
void loop() {
@@ -100,16 +151,11 @@ void loop() {
digitalWrite(LED_BUILTIN, LOW);
ledActive = false;
}
// if (MIDI.read()) {
// digitalWrite(LED_BUILTIN, HIGH);
// delay(50);
// digitalWrite(LED_BUILTIN, LOW);
// }
}
void handleNoteOn(byte channel, byte pitch, byte velocity) {
if (channel == currentMidiChannel) {
if (currentMidiChannel == MIDI_CHANNEL_OMNI || channel == currentMidiChannel) {
if (pitch >= 57 && pitch <= 88) {
MCPOutput out = noteToMCP[pitch - 57];
@@ -121,14 +167,14 @@ void handleNoteOn(byte channel, byte pitch, byte velocity) {
}
}
// Flash LED on any valid Note On
// Flash LED on Note On
digitalWrite(LED_BUILTIN, HIGH);
ledOnTime = millis();
ledActive = true;
}
void handleNoteOff(byte channel, byte pitch, byte velocity) {
if (channel == currentMidiChannel) {
if (currentMidiChannel == MIDI_CHANNEL_OMNI || channel == currentMidiChannel) {
if (pitch >= 57 && pitch <= 88) {
MCPOutput out = noteToMCP[pitch - 57];
if (out.chip == 0) {