diff --git a/g2184.png b/g2184.png new file mode 100644 index 0000000..068b7a6 Binary files /dev/null and b/g2184.png differ diff --git a/logosmall.png b/logosmall.png new file mode 100644 index 0000000..30ecba4 Binary files /dev/null and b/logosmall.png differ diff --git a/logosmallwbg.png b/logosmallwbg.png new file mode 100644 index 0000000..d42f882 Binary files /dev/null and b/logosmallwbg.png differ diff --git a/logoxsmall.png b/logoxsmall.png new file mode 100644 index 0000000..03038c4 Binary files /dev/null and b/logoxsmall.png differ diff --git a/purrChestrion-arduino/font.h b/purrChestrion-arduino/font.h new file mode 100644 index 0000000..60fec38 --- /dev/null +++ b/purrChestrion-arduino/font.h @@ -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 \ No newline at end of file diff --git a/purrChestrion-arduino/gfx.h b/purrChestrion-arduino/gfx.h new file mode 100644 index 0000000..00cd300 --- /dev/null +++ b/purrChestrion-arduino/gfx.h @@ -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 +}; \ No newline at end of file diff --git a/purrChestrion-arduino/midich.bmp b/purrChestrion-arduino/midich.bmp new file mode 100644 index 0000000..4869b09 Binary files /dev/null and b/purrChestrion-arduino/midich.bmp differ diff --git a/purrChestrion-arduino/purrChestrion-arduino.ino b/purrChestrion-arduino/purrChestrion-arduino.ino index ccfd52b..136a407 100644 --- a/purrChestrion-arduino/purrChestrion-arduino.ino +++ b/purrChestrion-arduino/purrChestrion-arduino.ino @@ -1,11 +1,30 @@ +#define FW_VER 1.0 +#define USE_OLED true // LEDC68 (Gotek alphanumeric displays) +#define USE_ENCODER false // include libraries #include #include +#if USE_OLED + #include + #include + #include + #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) { diff --git a/purrChestrion-board/logo.png b/purrChestrion-board/logo.png new file mode 100644 index 0000000..bd35577 Binary files /dev/null and b/purrChestrion-board/logo.png differ diff --git a/purrChestrion-board/logo.svg b/purrChestrion-board/logo.svg index 51c80d3..b0577a6 100644 --- a/purrChestrion-board/logo.svg +++ b/purrChestrion-board/logo.svg @@ -2,19 +2,21 @@ + + + + inkscape:label="Image" + id="g176"> + + + diff --git a/purrChestrion-board/purrChestrion-board/purrChestrion-board-backups/purrChestrion-board-2025-04-11_233155.zip b/purrChestrion-board/purrChestrion-board/purrChestrion-board-backups/purrChestrion-board-2025-04-11_233155.zip deleted file mode 100644 index 1bba66e..0000000 Binary files a/purrChestrion-board/purrChestrion-board/purrChestrion-board-backups/purrChestrion-board-2025-04-11_233155.zip and /dev/null differ diff --git a/purrChestrion-board/purrChestrion-board/purrChestrion-board-backups/purrChestrion-board-2025-06-13_233710.zip b/purrChestrion-board/purrChestrion-board/purrChestrion-board-backups/purrChestrion-board-2025-06-13_233710.zip new file mode 100644 index 0000000..cc44228 Binary files /dev/null and b/purrChestrion-board/purrChestrion-board/purrChestrion-board-backups/purrChestrion-board-2025-06-13_233710.zip differ diff --git a/purrChestrion-board/purrChestrion-board/~purrChestrion-board.kicad_pcb.lck b/purrChestrion-board/purrChestrion-board/~purrChestrion-board.kicad_pcb.lck new file mode 100644 index 0000000..e9832ab --- /dev/null +++ b/purrChestrion-board/purrChestrion-board/~purrChestrion-board.kicad_pcb.lck @@ -0,0 +1 @@ +{"hostname":"Aletheia","username":"sgilissen"} \ No newline at end of file diff --git a/purrChestrion-board/purrChestrion-board/~purrChestrion-board.kicad_sch.lck b/purrChestrion-board/purrChestrion-board/~purrChestrion-board.kicad_sch.lck deleted file mode 100644 index 74f1597..0000000 --- a/purrChestrion-board/purrChestrion-board/~purrChestrion-board.kicad_sch.lck +++ /dev/null @@ -1 +0,0 @@ -{"hostname":"Rhea","username":"sgilissen"} \ No newline at end of file