From 9ebee4264d888dda1f2acaa1b7bce907cfe2c258 Mon Sep 17 00:00:00 2001 From: 2EEEB <192235@vutbr.cz> Date: Sat, 20 Jun 2020 21:20:16 +0200 Subject: [PATCH] add custom font files, changes to the init procedure, add status infos, improved time sync reliability --- FreeSans22pt7b.h | 638 +++++++++++++++++++++++++++++++++++++++++++ FreeSansBold11pt7b.h | 252 +++++++++++++++++ fw_mega.ino | 459 +++++++++++++++++++------------ 3 files changed, 1168 insertions(+), 181 deletions(-) create mode 100644 FreeSans22pt7b.h create mode 100644 FreeSansBold11pt7b.h diff --git a/FreeSans22pt7b.h b/FreeSans22pt7b.h new file mode 100644 index 0000000..9627cf8 --- /dev/null +++ b/FreeSans22pt7b.h @@ -0,0 +1,638 @@ +const uint8_t FreeSans22pt7bBitmaps[] PROGMEM = { + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x77, 0x76, 0x66, + 0x66, 0x00, 0x0F, 0xFF, 0xF0, 0xF1, 0xFE, 0x3F, 0xC7, 0xF8, 0xFF, 0x1F, + 0xE3, 0xB8, 0x77, 0x0E, 0xE1, 0xCC, 0x19, 0x82, 0x00, 0x00, 0xE0, 0xF0, + 0x03, 0x83, 0xC0, 0x1E, 0x0E, 0x00, 0x78, 0x38, 0x01, 0xC0, 0xE0, 0x07, + 0x03, 0x80, 0x1C, 0x1E, 0x00, 0x70, 0x70, 0x7F, 0xFF, 0xFD, 0xFF, 0xFF, + 0xF7, 0xFF, 0xFF, 0xC0, 0xE0, 0xF0, 0x03, 0x83, 0xC0, 0x1E, 0x0E, 0x00, + 0x78, 0x38, 0x01, 0xC0, 0xE0, 0x07, 0x03, 0x80, 0x1C, 0x1E, 0x00, 0x70, + 0x78, 0x3F, 0xFF, 0xFE, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xE0, 0xE0, 0xF0, + 0x03, 0x83, 0xC0, 0x1E, 0x0E, 0x00, 0x78, 0x38, 0x01, 0xC0, 0xE0, 0x07, + 0x03, 0x80, 0x1C, 0x1E, 0x00, 0x70, 0x78, 0x03, 0xC1, 0xC0, 0x00, 0x00, + 0x70, 0x00, 0x03, 0x80, 0x00, 0x7F, 0x80, 0x0F, 0xFF, 0x01, 0xFF, 0xFC, + 0x1F, 0xB9, 0xF0, 0xF1, 0xC7, 0x8F, 0x0E, 0x1E, 0x78, 0x70, 0x73, 0x83, + 0x83, 0x9C, 0x1C, 0x1C, 0xF0, 0xE0, 0x07, 0x87, 0x00, 0x3E, 0x38, 0x00, + 0xF9, 0xC0, 0x07, 0xFE, 0x00, 0x1F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x7F, + 0xF0, 0x00, 0xFF, 0xE0, 0x07, 0x3F, 0x00, 0x38, 0x7C, 0x01, 0xC1, 0xE0, + 0x0E, 0x07, 0xF0, 0x70, 0x3F, 0x83, 0x81, 0xDC, 0x1C, 0x0E, 0xE0, 0xE0, + 0xF7, 0x87, 0x07, 0xBE, 0x38, 0x78, 0xF9, 0xCF, 0xC3, 0xFF, 0xFC, 0x0F, + 0xFF, 0x80, 0x0F, 0xF0, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x7C, 0x00, 0x0E, 0x00, + 0x1F, 0xF0, 0x00, 0xE0, 0x03, 0xFF, 0x80, 0x1C, 0x00, 0x7C, 0x3C, 0x01, + 0xC0, 0x07, 0x01, 0xC0, 0x38, 0x00, 0xF0, 0x1E, 0x03, 0x80, 0x0E, 0x00, + 0xE0, 0x70, 0x00, 0xE0, 0x0E, 0x07, 0x00, 0x0E, 0x00, 0xE0, 0xE0, 0x00, + 0xF0, 0x1E, 0x0C, 0x00, 0x07, 0x01, 0xC1, 0xC0, 0x00, 0x7C, 0x3C, 0x18, + 0x00, 0x03, 0xFF, 0x83, 0x80, 0x00, 0x1F, 0xF0, 0x30, 0x00, 0x00, 0x7C, + 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x0E, 0x03, 0xE0, + 0x00, 0x01, 0xC0, 0xFF, 0x80, 0x00, 0x1C, 0x1F, 0xFC, 0x00, 0x03, 0x83, + 0xE1, 0xE0, 0x00, 0x38, 0x38, 0x0E, 0x00, 0x07, 0x03, 0x80, 0x70, 0x00, + 0x70, 0x70, 0x07, 0x00, 0x0E, 0x07, 0x00, 0x70, 0x00, 0xE0, 0x70, 0x07, + 0x00, 0x1C, 0x03, 0x80, 0x70, 0x01, 0x80, 0x38, 0x0E, 0x00, 0x38, 0x03, + 0xE1, 0xE0, 0x03, 0x00, 0x1F, 0xFC, 0x00, 0x70, 0x00, 0xFF, 0x80, 0x0E, + 0x00, 0x03, 0xE0, 0x00, 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0xE0, + 0x00, 0xF0, 0xF0, 0x00, 0xF0, 0x3C, 0x00, 0x70, 0x1E, 0x00, 0x38, 0x07, + 0x00, 0x1C, 0x03, 0x80, 0x0F, 0x03, 0xC0, 0x07, 0x81, 0xE0, 0x01, 0xE3, + 0xE0, 0x00, 0xFB, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xE0, 0x00, 0x0F, + 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xFC, 0x1E, 0x1F, 0x1F, 0x0F, 0x0F, + 0x07, 0x87, 0x0F, 0x01, 0xE3, 0x87, 0x00, 0x7B, 0xC7, 0x80, 0x3F, 0xE3, + 0xC0, 0x0F, 0xE1, 0xE0, 0x03, 0xF0, 0xF0, 0x00, 0xF0, 0x78, 0x00, 0xFC, + 0x1E, 0x00, 0xFF, 0x0F, 0x80, 0xFF, 0xC3, 0xF9, 0xF9, 0xE0, 0xFF, 0xF8, + 0x78, 0x3F, 0xF8, 0x3E, 0x07, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0x77, 0x76, + 0x60, 0x01, 0x80, 0xE0, 0x70, 0x1C, 0x0E, 0x03, 0x81, 0xC0, 0x70, 0x3C, + 0x0E, 0x03, 0x81, 0xE0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0xF0, 0x3C, 0x0F, + 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x1C, 0x07, 0x01, 0xC0, + 0x78, 0x0E, 0x03, 0x80, 0xE0, 0x1C, 0x07, 0x01, 0xC0, 0x38, 0x06, 0x01, + 0xC0, 0x30, 0x0E, 0x01, 0xC0, 0xC0, 0x70, 0x1C, 0x06, 0x03, 0x81, 0xC0, + 0x70, 0x38, 0x0E, 0x07, 0x03, 0x81, 0xE0, 0x70, 0x38, 0x1C, 0x0F, 0x07, + 0x83, 0xC1, 0xE0, 0xF0, 0x38, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xC0, + 0xE0, 0x70, 0x78, 0x38, 0x1C, 0x1C, 0x0E, 0x07, 0x07, 0x03, 0x83, 0x81, + 0x81, 0xC0, 0xC0, 0x00, 0x07, 0x00, 0x38, 0x01, 0x81, 0x0C, 0x2F, 0x6F, + 0x7F, 0xFC, 0xFF, 0x01, 0xE0, 0x1F, 0x81, 0xEE, 0x0E, 0x38, 0x61, 0x80, + 0x00, 0x70, 0x00, 0x03, 0x80, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x00, 0x07, + 0x00, 0x00, 0x38, 0x00, 0x01, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0x70, 0x07, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0x00, 0x00, 0x38, + 0x00, 0x01, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0x70, 0x00, 0x03, 0x80, 0x00, + 0x1C, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0x33, 0x33, + 0x7E, 0x80, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF0, 0x00, 0x30, 0x07, + 0x00, 0x60, 0x06, 0x00, 0xE0, 0x0C, 0x00, 0xC0, 0x1C, 0x01, 0xC0, 0x18, + 0x01, 0x80, 0x38, 0x03, 0x00, 0x30, 0x07, 0x00, 0x60, 0x06, 0x00, 0xE0, + 0x0C, 0x00, 0xC0, 0x1C, 0x01, 0x80, 0x18, 0x03, 0x80, 0x30, 0x03, 0x00, + 0x70, 0x06, 0x00, 0x60, 0x0E, 0x00, 0xC0, 0x0C, 0x00, 0x01, 0xF8, 0x00, + 0x7F, 0xE0, 0x0F, 0xFF, 0x01, 0xF9, 0xF8, 0x3E, 0x07, 0xC3, 0xC0, 0x3C, + 0x78, 0x03, 0xC7, 0x80, 0x1E, 0x78, 0x01, 0xEF, 0x00, 0x1E, 0xF0, 0x00, + 0xEF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0E, 0xF0, 0x01, 0xE7, 0x00, 0x1E, 0x78, 0x01, 0xE7, + 0x80, 0x3C, 0x3C, 0x03, 0xC3, 0xC0, 0x7C, 0x1F, 0x0F, 0x80, 0xFF, 0xF0, + 0x07, 0xFE, 0x00, 0x1F, 0x80, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0xF0, 0x3E, + 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, + 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, + 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, + 0x01, 0xFE, 0x00, 0x3F, 0xFC, 0x03, 0xFF, 0xF0, 0x3F, 0x9F, 0xC1, 0xE0, + 0x1F, 0x1E, 0x00, 0x78, 0xF0, 0x03, 0xEF, 0x00, 0x0F, 0x78, 0x00, 0x7B, + 0xC0, 0x03, 0xDE, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x1F, 0x80, 0x03, 0xF8, 0x00, + 0x7F, 0x80, 0x07, 0xF0, 0x00, 0x7E, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, + 0x07, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xFF, + 0xFF, 0xF7, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x01, 0xFC, + 0x00, 0x3F, 0xF8, 0x03, 0xFF, 0xF0, 0x3F, 0x1F, 0x83, 0xE0, 0x3E, 0x1E, + 0x00, 0xF1, 0xE0, 0x03, 0xCF, 0x00, 0x1E, 0x78, 0x00, 0xF3, 0xC0, 0x07, + 0x80, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x07, 0xE0, 0x01, + 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0x00, 0x00, 0x7C, + 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x3F, 0xC0, 0x01, 0xFE, 0x00, + 0x0F, 0x78, 0x00, 0x7B, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0x78, 0x03, 0xC3, + 0xFD, 0xFE, 0x0F, 0xFF, 0xE0, 0x3F, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x03, + 0x80, 0x00, 0x3C, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x01, 0xF8, 0x00, + 0x1F, 0xC0, 0x01, 0xFE, 0x00, 0x0E, 0xF0, 0x00, 0xF7, 0x80, 0x0F, 0x3C, + 0x00, 0x71, 0xE0, 0x07, 0x8F, 0x00, 0x78, 0x78, 0x07, 0x83, 0xC0, 0x38, + 0x1E, 0x03, 0xC0, 0xF0, 0x3C, 0x07, 0x81, 0xC0, 0x3C, 0x1E, 0x01, 0xE1, + 0xE0, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, + 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, + 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x0F, 0xFF, 0xF0, 0x7F, + 0xFF, 0x87, 0xFF, 0xFC, 0x3F, 0xFF, 0xE1, 0xE0, 0x00, 0x0F, 0x00, 0x00, + 0x70, 0x00, 0x03, 0x80, 0x00, 0x1C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, + 0x00, 0x7B, 0xFC, 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xE0, 0xFC, 0x1F, 0x87, + 0x80, 0x3E, 0x38, 0x00, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x1E, 0x00, 0x00, + 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xFE, 0x00, 0x0F, 0x78, + 0x00, 0x7B, 0xC0, 0x07, 0x9F, 0x00, 0x3C, 0x7C, 0x07, 0xC3, 0xFC, 0xFE, + 0x0F, 0xFF, 0xE0, 0x1F, 0xFC, 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00, 0x7F, + 0xF0, 0x0F, 0xFF, 0x81, 0xFD, 0xFC, 0x3E, 0x03, 0xC3, 0xC0, 0x1E, 0x78, + 0x01, 0xE7, 0x80, 0x0E, 0x78, 0x00, 0x07, 0x00, 0x00, 0xF0, 0x00, 0x0F, + 0x00, 0x00, 0xF1, 0xFE, 0x0F, 0x7F, 0xF0, 0xFF, 0xFF, 0xCF, 0xF0, 0x7C, + 0xFC, 0x03, 0xEF, 0x80, 0x1E, 0xF8, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, + 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0x70, 0x00, 0xF7, 0x80, + 0x1E, 0x7C, 0x01, 0xE3, 0xE0, 0x3C, 0x1F, 0x9F, 0xC1, 0xFF, 0xF8, 0x07, + 0xFF, 0x00, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xC0, 0x00, 0x38, + 0x00, 0x07, 0x80, 0x00, 0x70, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x1C, + 0x00, 0x03, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x80, 0x00, 0x70, 0x00, 0x0F, + 0x00, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1C, 0x00, 0x03, + 0xC0, 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, + 0x78, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0x03, 0xF8, + 0x00, 0xFF, 0xE0, 0x1F, 0xFF, 0x83, 0xF9, 0xFC, 0x7C, 0x07, 0xC7, 0x80, + 0x3E, 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x78, + 0x01, 0xE7, 0xC0, 0x3C, 0x3E, 0x0F, 0x81, 0xFF, 0xF0, 0x07, 0xFE, 0x01, + 0xFF, 0xF8, 0x3F, 0x0F, 0xC7, 0xC0, 0x3E, 0xF8, 0x01, 0xEF, 0x00, 0x0F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xE0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, + 0xFF, 0x00, 0x1F, 0xF8, 0x01, 0xE7, 0xC0, 0x3E, 0x3F, 0x9F, 0xC1, 0xFF, + 0xF8, 0x0F, 0xFF, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0xFF, 0xE0, 0x1F, + 0xFF, 0x03, 0xF1, 0xF8, 0x7C, 0x07, 0xC7, 0x80, 0x3C, 0xF0, 0x01, 0xEF, + 0x00, 0x1E, 0xF0, 0x00, 0xEF, 0x00, 0x0E, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x01, 0xFF, 0x00, 0x1F, 0xF8, 0x01, 0xF7, 0x80, 0x3F, 0x7E, 0x0F, + 0xF3, 0xFF, 0xFF, 0x1F, 0xFC, 0xF0, 0x7F, 0x8F, 0x00, 0x00, 0xF0, 0x00, + 0x0E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0xF0, 0x01, 0xE7, 0x80, 0x3C, 0x78, + 0x03, 0xC7, 0xC0, 0x78, 0x3F, 0x3F, 0x81, 0xFF, 0xF0, 0x0F, 0xFC, 0x00, + 0x3F, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xE3, 0x18, 0xCE, 0x6F, 0x40, + 0x00, 0x00, 0x08, 0x00, 0x01, 0xC0, 0x00, 0x3E, 0x00, 0x0F, 0xF0, 0x01, + 0xFE, 0x00, 0x7F, 0x80, 0x0F, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x80, 0x07, + 0xF0, 0x00, 0x3C, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xF0, + 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xC0, + 0x00, 0x7E, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x80, + 0x00, 0x07, 0x00, 0x00, 0x3F, 0x00, 0x01, 0xFE, 0x00, 0x03, 0xFC, 0x00, + 0x03, 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, + 0x1F, 0xC0, 0x00, 0x1E, 0x00, 0x03, 0xF0, 0x00, 0x7F, 0x00, 0x1F, 0xE0, + 0x03, 0xFC, 0x00, 0xFF, 0x00, 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0x3F, 0x00, + 0x01, 0xE0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x01, 0xFF, 0xC0, + 0x7F, 0xFE, 0x1F, 0x9F, 0xE7, 0xC0, 0x7C, 0xF0, 0x07, 0x9C, 0x00, 0x7F, + 0x80, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x01, 0xE0, + 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, + 0x1F, 0x00, 0x03, 0xC0, 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x00, + 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xFF, + 0xFE, 0x00, 0x00, 0x3F, 0xE1, 0xFF, 0x80, 0x00, 0x7E, 0x00, 0x1F, 0xC0, + 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x03, 0xE0, 0x00, 0x01, 0xF0, 0x07, 0xC0, + 0x00, 0x00, 0xF8, 0x07, 0x80, 0x00, 0x00, 0x7C, 0x0F, 0x00, 0x1E, 0x00, + 0x3C, 0x1E, 0x00, 0x7F, 0x8E, 0x1E, 0x1E, 0x01, 0xFF, 0xDE, 0x1E, 0x3C, + 0x03, 0xE1, 0xDC, 0x1F, 0x3C, 0x07, 0xC0, 0xFC, 0x0F, 0x78, 0x0F, 0x80, + 0x7C, 0x0F, 0x78, 0x0F, 0x00, 0x78, 0x0F, 0x78, 0x1E, 0x00, 0x78, 0x0F, + 0x70, 0x1E, 0x00, 0x78, 0x0F, 0x70, 0x1E, 0x00, 0x78, 0x0F, 0xF0, 0x3C, + 0x00, 0x70, 0x0F, 0xF0, 0x3C, 0x00, 0xF0, 0x1E, 0xF0, 0x3C, 0x00, 0xF0, + 0x1E, 0x70, 0x3C, 0x01, 0xE0, 0x3C, 0x78, 0x1E, 0x01, 0xE0, 0x3C, 0x78, + 0x1E, 0x03, 0xE0, 0x78, 0x78, 0x1F, 0x07, 0xE1, 0xF8, 0x3C, 0x0F, 0xFE, + 0xFF, 0xF0, 0x3C, 0x07, 0xFC, 0xFF, 0xC0, 0x1E, 0x01, 0xF0, 0x7F, 0x00, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x07, 0xC0, + 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x08, + 0x00, 0x00, 0xFF, 0xC3, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, + 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0x00, + 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x07, + 0xFC, 0x00, 0x00, 0xF7, 0x80, 0x00, 0x3E, 0xF0, 0x00, 0x07, 0x9F, 0x00, + 0x00, 0xF1, 0xE0, 0x00, 0x3E, 0x3C, 0x00, 0x07, 0x87, 0xC0, 0x00, 0xF0, + 0x78, 0x00, 0x3C, 0x0F, 0x00, 0x07, 0x81, 0xF0, 0x00, 0xF0, 0x1E, 0x00, + 0x3C, 0x03, 0xE0, 0x07, 0x80, 0x7C, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x00, + 0xF8, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFE, 0x07, + 0x80, 0x07, 0xC1, 0xF0, 0x00, 0x78, 0x3C, 0x00, 0x0F, 0x87, 0x80, 0x00, + 0xF1, 0xF0, 0x00, 0x1E, 0x3C, 0x00, 0x03, 0xE7, 0x80, 0x00, 0x3D, 0xE0, + 0x00, 0x07, 0xFC, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xE0, + 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xF8, 0xF0, 0x00, 0x7C, 0xF0, 0x00, 0x3C, + 0xF0, 0x00, 0x3C, 0xF0, 0x00, 0x3C, 0xF0, 0x00, 0x3C, 0xF0, 0x00, 0x3C, + 0xF0, 0x00, 0x3C, 0xF0, 0x00, 0x3C, 0xF0, 0x00, 0x78, 0xFF, 0xFF, 0xF0, + 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xF8, 0xF0, 0x00, 0x7C, + 0xF0, 0x00, 0x3E, 0xF0, 0x00, 0x1E, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x0F, + 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xF0, 0x00, 0x1E, + 0xF0, 0x00, 0x3E, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xF0, + 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xFF, 0x00, 0x0F, 0xFF, + 0xF0, 0x07, 0xFF, 0xFF, 0x00, 0xF8, 0x03, 0xF0, 0x3E, 0x00, 0x1F, 0x0F, + 0x80, 0x01, 0xE1, 0xE0, 0x00, 0x3C, 0x78, 0x00, 0x03, 0xCF, 0x00, 0x00, + 0x79, 0xE0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, + 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, + 0x00, 0x01, 0xE0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x1E, + 0x78, 0x00, 0x03, 0xC7, 0x80, 0x00, 0xF8, 0xF8, 0x00, 0x3E, 0x0F, 0x80, + 0x07, 0xC1, 0xFC, 0x03, 0xF0, 0x1F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0x00, + 0x0F, 0xFF, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, + 0xF0, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x0F, 0x00, 0x0F, 0xC7, 0x80, + 0x01, 0xF3, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x1E, 0xF0, 0x00, 0x0F, 0x78, + 0x00, 0x07, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, + 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, + 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x7F, 0x80, 0x00, 0x7F, 0xC0, 0x00, 0x3D, 0xE0, 0x00, 0x1E, 0xF0, 0x00, + 0x1E, 0x78, 0x00, 0x1F, 0x3C, 0x00, 0x3F, 0x1F, 0xFF, 0xFF, 0x0F, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0x03, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFD, 0xFF, + 0xFF, 0xFB, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x1E, 0x00, + 0x00, 0x3C, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, + 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x1F, 0xFF, 0xFF, + 0xBF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFE, 0xFF, 0xFF, 0xFD, 0xE0, 0x00, 0x03, + 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x3C, + 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x03, 0xC0, + 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, + 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, + 0x00, 0x03, 0xFF, 0xFF, 0x8F, 0xFF, 0xFE, 0x3F, 0xFF, 0xF8, 0xFF, 0xFF, + 0xE3, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, + 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, + 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xFF, 0xC0, 0x03, + 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xF8, 0x0F, 0xC0, 0x1F, 0x81, 0xF0, 0x00, + 0x7C, 0x3E, 0x00, 0x03, 0xE3, 0xC0, 0x00, 0x1E, 0x7C, 0x00, 0x01, 0xF7, + 0x80, 0x00, 0x0F, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00, + 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, 0x1F, 0xFF, + 0xF0, 0x01, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x00, + 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, + 0xF7, 0x80, 0x00, 0x0F, 0x7C, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x1F, 0x3E, + 0x00, 0x03, 0xF1, 0xF0, 0x00, 0x7F, 0x0F, 0xC0, 0x1F, 0x70, 0x7F, 0xFF, + 0xE7, 0x03, 0xFF, 0xFC, 0x70, 0x0F, 0xFF, 0x03, 0x00, 0x3F, 0xC0, 0x00, + 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, + 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, + 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, + 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, + 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, + 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, + 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, + 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, + 0x00, 0x0F, 0x00, 0x03, 0xFE, 0x00, 0xFF, 0x80, 0x3F, 0xE0, 0x0F, 0x78, + 0x03, 0xDE, 0x00, 0xF7, 0x80, 0x7D, 0xF0, 0x1E, 0x3F, 0x9F, 0x87, 0xFF, + 0xC0, 0xFF, 0xE0, 0x0F, 0xE0, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x0F, 0xBC, + 0x00, 0x0F, 0x9E, 0x00, 0x0F, 0x8F, 0x00, 0x0F, 0x87, 0x80, 0x0F, 0x83, + 0xC0, 0x0F, 0x81, 0xE0, 0x0F, 0x80, 0xF0, 0x0F, 0x80, 0x78, 0x0F, 0x80, + 0x3C, 0x0F, 0x80, 0x1E, 0x0F, 0x80, 0x0F, 0x0F, 0x80, 0x07, 0x8F, 0xC0, + 0x03, 0xCF, 0xF0, 0x01, 0xEF, 0x78, 0x00, 0xFF, 0x1E, 0x00, 0x7F, 0x0F, + 0x80, 0x3F, 0x03, 0xE0, 0x1F, 0x00, 0xF0, 0x0F, 0x00, 0x7C, 0x07, 0x80, + 0x1F, 0x03, 0xC0, 0x07, 0x81, 0xE0, 0x03, 0xE0, 0xF0, 0x00, 0xF8, 0x78, + 0x00, 0x3E, 0x3C, 0x00, 0x1F, 0x1E, 0x00, 0x07, 0xCF, 0x00, 0x01, 0xF7, + 0x80, 0x00, 0x7B, 0xC0, 0x00, 0x3E, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, + 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, + 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, + 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, + 0xFC, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, + 0x80, 0x00, 0x7F, 0xFF, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0x70, + 0x00, 0x3F, 0xFD, 0xE0, 0x00, 0xEF, 0xF7, 0x80, 0x03, 0xBF, 0xCE, 0x00, + 0x1E, 0xFF, 0x3C, 0x00, 0x73, 0xFC, 0xF0, 0x01, 0xCF, 0xF1, 0xC0, 0x0F, + 0x3F, 0xC7, 0x80, 0x38, 0xFF, 0x1E, 0x00, 0xE3, 0xFC, 0x38, 0x07, 0x8F, + 0xF0, 0xF0, 0x1C, 0x3F, 0xC3, 0xC0, 0x70, 0xFF, 0x07, 0x03, 0xC3, 0xFC, + 0x1E, 0x0E, 0x0F, 0xF0, 0x38, 0x78, 0x3F, 0xC0, 0xE1, 0xE0, 0xFF, 0x03, + 0xC7, 0x03, 0xFC, 0x07, 0x3C, 0x0F, 0xF0, 0x1C, 0xF0, 0x3F, 0xC0, 0x7B, + 0x80, 0xFF, 0x00, 0xFE, 0x03, 0xFC, 0x03, 0xF8, 0x0F, 0xF0, 0x0F, 0xC0, + 0x3F, 0xC0, 0x1F, 0x00, 0xFF, 0x00, 0x7C, 0x03, 0xC0, 0xF8, 0x00, 0x07, + 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xF0, 0x00, + 0x7F, 0xF8, 0x00, 0x3F, 0xDE, 0x00, 0x1F, 0xEF, 0x80, 0x0F, 0xF3, 0xC0, + 0x07, 0xF8, 0xF0, 0x03, 0xFC, 0x7C, 0x01, 0xFE, 0x1E, 0x00, 0xFF, 0x07, + 0x80, 0x7F, 0x83, 0xE0, 0x3F, 0xC0, 0xF0, 0x1F, 0xE0, 0x7C, 0x0F, 0xF0, + 0x1E, 0x07, 0xF8, 0x07, 0x83, 0xFC, 0x03, 0xE1, 0xFE, 0x00, 0xF0, 0xFF, + 0x00, 0x3C, 0x7F, 0x80, 0x1F, 0x3F, 0xC0, 0x07, 0x9F, 0xE0, 0x01, 0xEF, + 0xF0, 0x00, 0xFF, 0xF8, 0x00, 0x3F, 0xFC, 0x00, 0x0F, 0xFE, 0x00, 0x07, + 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x3E, 0x00, 0x1F, + 0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, + 0xE0, 0x0F, 0xC0, 0x1F, 0xC0, 0x7E, 0x00, 0x1F, 0x83, 0xE0, 0x00, 0x3E, + 0x0F, 0x00, 0x00, 0x7C, 0x7C, 0x00, 0x00, 0xF1, 0xE0, 0x00, 0x03, 0xE7, + 0x80, 0x00, 0x07, 0xBC, 0x00, 0x00, 0x1E, 0xF0, 0x00, 0x00, 0x3F, 0xC0, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xF0, 0x00, + 0x00, 0x3F, 0xC0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, + 0x0F, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, 0xE7, 0x80, 0x00, 0x07, + 0x9E, 0x00, 0x00, 0x1E, 0x7C, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x07, 0xC3, + 0xE0, 0x00, 0x3E, 0x07, 0xE0, 0x01, 0xF8, 0x0F, 0xC0, 0x1F, 0xC0, 0x1F, + 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x1F, + 0xE0, 0x00, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xE7, 0xFF, + 0xFF, 0xCF, 0x00, 0x07, 0xDE, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00, + 0x0F, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x01, + 0xFF, 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xBF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFC, + 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, + 0x00, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, + 0x00, 0x01, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, + 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, + 0x03, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xE0, 0x0F, + 0xC0, 0x1F, 0xC0, 0x7E, 0x00, 0x1F, 0x83, 0xE0, 0x00, 0x3E, 0x0F, 0x00, + 0x00, 0x7C, 0x7C, 0x00, 0x00, 0xF1, 0xE0, 0x00, 0x01, 0xE7, 0x80, 0x00, + 0x07, 0xBC, 0x00, 0x00, 0x1E, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x3F, + 0xC0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xF0, + 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, 0xE7, 0x80, 0x00, 0x07, 0x9E, 0x00, + 0x00, 0x3E, 0x7C, 0x00, 0x30, 0xF0, 0xF0, 0x01, 0xF7, 0xC3, 0xE0, 0x03, + 0xFE, 0x07, 0xC0, 0x07, 0xF8, 0x0F, 0xC0, 0x1F, 0xC0, 0x1F, 0xFF, 0xFF, + 0x80, 0x3F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0x3E, 0x00, 0x1F, 0xE0, 0x78, + 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x3F, + 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0xF0, 0x00, 0x3F, + 0x3C, 0x00, 0x07, 0xCF, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x3C, 0xF0, 0x00, + 0x0F, 0x3C, 0x00, 0x03, 0xCF, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x3C, 0xF0, + 0x00, 0x1E, 0x3C, 0x00, 0x1F, 0x8F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xC0, + 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0x0F, 0x00, 0x03, 0xE3, 0xC0, 0x00, + 0x78, 0xF0, 0x00, 0x0F, 0x3C, 0x00, 0x03, 0xCF, 0x00, 0x00, 0xF3, 0xC0, + 0x00, 0x3C, 0xF0, 0x00, 0x0F, 0x3C, 0x00, 0x03, 0xCF, 0x00, 0x00, 0xF3, + 0xC0, 0x00, 0x3C, 0xF0, 0x00, 0x0F, 0x3C, 0x00, 0x03, 0xEF, 0x00, 0x00, + 0x7C, 0x00, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x03, 0xFF, 0xFE, 0x03, 0xFC, + 0xFF, 0x83, 0xE0, 0x07, 0xC1, 0xE0, 0x01, 0xF1, 0xF0, 0x00, 0x78, 0xF0, + 0x00, 0x3C, 0x78, 0x00, 0x0F, 0x3C, 0x00, 0x07, 0x9E, 0x00, 0x00, 0x0F, + 0x80, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x7F, 0xF0, 0x00, + 0x1F, 0xFF, 0x80, 0x01, 0xFF, 0xF8, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0xFF, + 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, + 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x07, 0x9E, 0x00, + 0x03, 0xCF, 0x80, 0x03, 0xE3, 0xF0, 0x03, 0xE0, 0xFF, 0xFF, 0xE0, 0x3F, + 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xE0, + 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1E, + 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0xC0, 0x00, 0x01, + 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0xC0, 0x00, + 0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, 0x00, + 0x00, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0xC0, + 0x00, 0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, + 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, + 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F, + 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1E, 0xF0, 0x00, + 0x1E, 0x78, 0x00, 0x0F, 0x3C, 0x00, 0x0F, 0x9F, 0x00, 0x07, 0x87, 0xE0, + 0x0F, 0xC1, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, 0x01, + 0xFF, 0x00, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xF7, 0x80, 0x00, 0x79, + 0xE0, 0x00, 0x1E, 0x7C, 0x00, 0x0F, 0x8F, 0x00, 0x03, 0xC3, 0xC0, 0x00, + 0xF0, 0xF8, 0x00, 0x78, 0x1E, 0x00, 0x1E, 0x07, 0x80, 0x07, 0x81, 0xF0, + 0x03, 0xC0, 0x3C, 0x00, 0xF0, 0x0F, 0x00, 0x3C, 0x01, 0xE0, 0x1E, 0x00, + 0x78, 0x07, 0x80, 0x1E, 0x01, 0xE0, 0x03, 0xC0, 0xF0, 0x00, 0xF0, 0x3C, + 0x00, 0x3C, 0x0F, 0x00, 0x07, 0x87, 0x80, 0x01, 0xE1, 0xE0, 0x00, 0x7C, + 0x78, 0x00, 0x0F, 0x3C, 0x00, 0x03, 0xCF, 0x00, 0x00, 0x7B, 0xC0, 0x00, + 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, + 0x00, 0x0F, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3F, + 0xE0, 0x00, 0xF8, 0x00, 0x7B, 0xE0, 0x03, 0xF0, 0x00, 0xF3, 0xC0, 0x07, + 0xE0, 0x03, 0xE7, 0x80, 0x0F, 0xE0, 0x07, 0xCF, 0x00, 0x3F, 0xC0, 0x0F, + 0x1F, 0x00, 0x7F, 0x80, 0x1E, 0x1E, 0x00, 0xF7, 0x00, 0x3C, 0x3C, 0x01, + 0xCF, 0x00, 0xF8, 0x78, 0x07, 0x9E, 0x01, 0xE0, 0xF8, 0x0F, 0x1C, 0x03, + 0xC0, 0xF0, 0x1C, 0x3C, 0x07, 0x81, 0xE0, 0x38, 0x78, 0x1E, 0x03, 0xC0, + 0xF0, 0xF0, 0x3C, 0x07, 0xC1, 0xE0, 0xE0, 0x78, 0x07, 0x83, 0x81, 0xE0, + 0xF0, 0x0F, 0x0F, 0x03, 0xC3, 0xC0, 0x1E, 0x1E, 0x07, 0x87, 0x80, 0x3C, + 0x3C, 0x07, 0x8F, 0x00, 0x3C, 0x70, 0x0F, 0x1E, 0x00, 0x79, 0xE0, 0x1E, + 0x38, 0x00, 0xF3, 0xC0, 0x1C, 0xF0, 0x01, 0xE7, 0x00, 0x3D, 0xE0, 0x01, + 0xFE, 0x00, 0x7B, 0xC0, 0x03, 0xFC, 0x00, 0xF7, 0x00, 0x07, 0xF8, 0x00, + 0xFE, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, 0x0F, 0xC0, 0x03, 0xF8, 0x00, + 0x1F, 0x80, 0x03, 0xE0, 0x00, 0x3F, 0x00, 0x07, 0xC0, 0x00, 0x3C, 0x00, + 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x07, 0xCF, 0x80, 0x01, 0xF0, 0xF8, 0x00, + 0x3C, 0x0F, 0x80, 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x1F, 0x00, 0x78, 0x01, + 0xF0, 0x1F, 0x00, 0x3E, 0x07, 0xC0, 0x03, 0xE0, 0xF0, 0x00, 0x3E, 0x3C, + 0x00, 0x03, 0xCF, 0x80, 0x00, 0x7D, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x80, + 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x79, 0xF0, 0x00, 0x1F, + 0x1E, 0x00, 0x07, 0xC3, 0xE0, 0x00, 0xF0, 0x3E, 0x00, 0x3E, 0x03, 0xC0, + 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x07, 0xC0, 0x78, 0x00, 0x7C, 0x1F, 0x00, + 0x0F, 0x87, 0xC0, 0x00, 0xF8, 0xF0, 0x00, 0x0F, 0xBE, 0x00, 0x01, 0xF0, + 0xF8, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0x3E, 0x7C, 0x00, 0x07, 0xC3, 0xE0, + 0x00, 0x78, 0x1E, 0x00, 0x0F, 0x81, 0xF0, 0x00, 0xF0, 0x0F, 0x80, 0x1E, + 0x00, 0xF8, 0x03, 0xE0, 0x07, 0xC0, 0x3C, 0x00, 0x3C, 0x07, 0xC0, 0x03, + 0xE0, 0x78, 0x00, 0x1F, 0x0F, 0x00, 0x00, 0xF1, 0xF0, 0x00, 0x0F, 0x9E, + 0x00, 0x00, 0x7B, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, + 0x01, 0xF8, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, + 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00, + 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0xF0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, + 0x00, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, + 0xFF, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, + 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x03, 0xE0, 0x00, 0x07, + 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x3E, + 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x01, 0xF0, + 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, + 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, + 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, + 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, + 0xFF, 0xFF, 0xC0, 0x0E, 0x00, 0xE0, 0x06, 0x00, 0x60, 0x07, 0x00, 0x30, + 0x03, 0x00, 0x38, 0x01, 0x80, 0x18, 0x01, 0xC0, 0x0C, 0x00, 0xC0, 0x0E, + 0x00, 0x60, 0x06, 0x00, 0x70, 0x03, 0x00, 0x30, 0x03, 0x80, 0x38, 0x01, + 0x80, 0x1C, 0x01, 0xC0, 0x0C, 0x00, 0xC0, 0x0E, 0x00, 0x60, 0x06, 0x00, + 0x70, 0x03, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, + 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0x03, 0xC0, 0x07, 0xE0, + 0x07, 0xE0, 0x07, 0xE0, 0x0E, 0x70, 0x0E, 0x70, 0x1C, 0x38, 0x1C, 0x38, + 0x1C, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x07, + 0xE0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF8, 0x3E, 0x0F, + 0x03, 0xC0, 0xF0, 0x38, 0x03, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, + 0x0F, 0xE3, 0xF0, 0x3C, 0x03, 0xE0, 0xE0, 0x07, 0x87, 0x80, 0x1E, 0x1E, + 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x01, 0xFE, 0x01, 0xFF, + 0xF8, 0x1F, 0xFF, 0xE0, 0xFF, 0x87, 0x87, 0xE0, 0x1E, 0x1E, 0x00, 0x78, + 0xF0, 0x01, 0xE3, 0xC0, 0x07, 0x8F, 0x00, 0x1E, 0x3C, 0x00, 0xF8, 0x78, + 0x07, 0xE1, 0xF0, 0x7F, 0x83, 0xFF, 0xDF, 0xC7, 0xFE, 0x3F, 0x07, 0xE0, + 0x7C, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, + 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x1F, 0x80, 0xE7, 0xFE, 0x0E, + 0xFF, 0xF0, 0xFF, 0x1F, 0x8F, 0xC0, 0x7C, 0xF8, 0x03, 0xCF, 0x00, 0x1E, + 0xF0, 0x01, 0xEF, 0x00, 0x1E, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, + 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFF, 0x00, + 0x1E, 0xF0, 0x01, 0xEF, 0x00, 0x1E, 0xF8, 0x03, 0xCF, 0xC0, 0x7C, 0xFF, + 0x1F, 0x8E, 0xFF, 0xF0, 0xE7, 0xFE, 0x00, 0x1F, 0x80, 0x01, 0xFC, 0x00, + 0x7F, 0xF0, 0x0F, 0xFF, 0x81, 0xF9, 0xFC, 0x3E, 0x03, 0xC3, 0xC0, 0x1E, + 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x78, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0x70, 0x00, 0xE7, 0x80, 0x0E, 0x78, 0x01, 0xE3, 0xC0, 0x1E, 0x3E, + 0x03, 0xC1, 0xF9, 0xFC, 0x0F, 0xFF, 0x80, 0x7F, 0xF0, 0x01, 0xFC, 0x00, + 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, + 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x1F, 0x87, 0x07, 0xFE, 0x70, 0xFF, + 0xF7, 0x1F, 0xCF, 0xF3, 0xE0, 0x3F, 0x3C, 0x01, 0xF7, 0x80, 0x0F, 0x78, + 0x00, 0xF7, 0x80, 0x0F, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F, + 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x77, 0x80, 0x0F, + 0x78, 0x00, 0xF7, 0x80, 0x0F, 0x3C, 0x01, 0xF3, 0xE0, 0x3F, 0x1F, 0x8F, + 0xF0, 0xFF, 0xF7, 0x07, 0xFE, 0x70, 0x1F, 0x80, 0x01, 0xFC, 0x00, 0x3F, + 0xF8, 0x03, 0xFF, 0xE0, 0x3F, 0x1F, 0x83, 0xE0, 0x3E, 0x1E, 0x00, 0xF1, + 0xE0, 0x03, 0xCF, 0x00, 0x1E, 0x78, 0x00, 0xF3, 0x80, 0x03, 0xBC, 0x00, + 0x1D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x1E, + 0x00, 0x00, 0x70, 0x00, 0x03, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0x78, 0x03, + 0xC3, 0xE0, 0x3E, 0x0F, 0xC7, 0xE0, 0x3F, 0xFE, 0x00, 0xFF, 0xE0, 0x01, + 0xFC, 0x00, 0x03, 0xC3, 0xF1, 0xFC, 0x7C, 0x1E, 0x07, 0x01, 0xC0, 0x70, + 0x1C, 0x3F, 0xFF, 0xFF, 0xFF, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, + 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, + 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x01, 0xF8, 0x00, 0x7F, 0xCF, 0x0F, + 0xFE, 0x71, 0xF8, 0xF7, 0x3E, 0x03, 0xF3, 0xC0, 0x1F, 0x78, 0x01, 0xF7, + 0x80, 0x0F, 0x78, 0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0x70, 0x00, + 0xF7, 0x80, 0x0F, 0x78, 0x01, 0xF3, 0xC0, 0x1F, 0x3E, 0x03, 0xF1, 0xF8, + 0xFF, 0x0F, 0xFE, 0xF0, 0x7F, 0xCF, 0x01, 0xF0, 0xF0, 0x00, 0x0F, 0x78, + 0x00, 0xF7, 0x80, 0x1E, 0x7C, 0x01, 0xE3, 0xE0, 0x7C, 0x1F, 0xFF, 0x80, + 0xFF, 0xF0, 0x03, 0xFC, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, + 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x87, 0xF0, 0xE7, + 0xFE, 0x3B, 0xFF, 0xCF, 0xE1, 0xFB, 0xF0, 0x1E, 0xF8, 0x07, 0xBC, 0x00, + 0xFF, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, + 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, + 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, + 0xFE, 0x00, 0x3C, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF8, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x00, 0x00, 0x0E, 0x1C, + 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, + 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x71, 0xFF, + 0xFF, 0x7C, 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, + 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x0F, 0x9C, + 0x03, 0xE3, 0x80, 0xF8, 0x70, 0x3E, 0x0E, 0x0F, 0x81, 0xC3, 0xE0, 0x38, + 0xF8, 0x07, 0x3E, 0x00, 0xEF, 0xC0, 0x1F, 0xF8, 0x03, 0xFF, 0x80, 0x7E, + 0xF8, 0x0F, 0x8F, 0x01, 0xE1, 0xF0, 0x38, 0x1F, 0x07, 0x01, 0xE0, 0xE0, + 0x3E, 0x1C, 0x03, 0xC3, 0x80, 0x7C, 0x70, 0x07, 0xCE, 0x00, 0x79, 0xC0, + 0x0F, 0xB8, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xF8, 0x0F, 0xC7, 0x3F, 0xE1, 0xFF, 0xBB, + 0xFF, 0x9F, 0xFD, 0xFC, 0x7F, 0xE3, 0xFF, 0x80, 0xFC, 0x07, 0xF8, 0x07, + 0xC0, 0x3F, 0xC0, 0x1E, 0x00, 0xFC, 0x00, 0xF0, 0x07, 0xE0, 0x07, 0x00, + 0x3F, 0x00, 0x38, 0x01, 0xF8, 0x01, 0xC0, 0x0F, 0xC0, 0x0E, 0x00, 0x7E, + 0x00, 0x70, 0x03, 0xF0, 0x03, 0x80, 0x1F, 0x80, 0x1C, 0x00, 0xFC, 0x00, + 0xE0, 0x07, 0xE0, 0x07, 0x00, 0x3F, 0x00, 0x38, 0x01, 0xF8, 0x01, 0xC0, + 0x0F, 0xC0, 0x0E, 0x00, 0x7E, 0x00, 0x70, 0x03, 0xF0, 0x03, 0x80, 0x1F, + 0x80, 0x1C, 0x00, 0xFC, 0x00, 0xE0, 0x07, 0x00, 0xF8, 0x38, 0xFF, 0x8E, + 0x7F, 0xF3, 0xB8, 0x7E, 0xFC, 0x07, 0xBE, 0x01, 0xFF, 0x00, 0x3F, 0xC0, + 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, + 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, + 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, + 0x0F, 0x01, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0xFF, 0xE0, 0x3F, 0x1F, 0x83, + 0xE0, 0x3E, 0x1E, 0x00, 0xF1, 0xE0, 0x03, 0xCF, 0x00, 0x1E, 0x78, 0x00, + 0xF7, 0x80, 0x03, 0xBC, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0x07, 0xF8, + 0x00, 0x3F, 0xC0, 0x01, 0xFE, 0x00, 0x0F, 0x78, 0x00, 0xF3, 0xC0, 0x07, + 0x9E, 0x00, 0x3C, 0x78, 0x03, 0xC3, 0xE0, 0x3E, 0x0F, 0xC7, 0xE0, 0x3F, + 0xFE, 0x00, 0xFF, 0xE0, 0x01, 0xFC, 0x00, 0x00, 0xF8, 0x0E, 0x3F, 0xE0, + 0xEF, 0xFF, 0x0E, 0xF1, 0xF8, 0xFC, 0x07, 0xCF, 0x80, 0x3C, 0xF8, 0x01, + 0xEF, 0x00, 0x1E, 0xF0, 0x01, 0xEE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, + 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xF0, + 0x01, 0xEF, 0x00, 0x1E, 0xF0, 0x01, 0xEF, 0x80, 0x3C, 0xFC, 0x07, 0xCF, + 0xF1, 0xF8, 0xEF, 0xFF, 0x0E, 0x7F, 0xE0, 0xE1, 0xF8, 0x0E, 0x00, 0x00, + 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, + 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x7F, 0xE7, 0x0F, + 0xFF, 0x71, 0xFC, 0xFF, 0x3E, 0x03, 0xF3, 0xC0, 0x1F, 0x78, 0x00, 0xF7, + 0x80, 0x0F, 0x78, 0x00, 0xF7, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, + 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0x78, 0x00, + 0xF7, 0x80, 0x0F, 0x78, 0x00, 0xF3, 0xC0, 0x1F, 0x3E, 0x03, 0xF1, 0xF8, + 0xFF, 0x0F, 0xFF, 0x70, 0x7F, 0xE7, 0x01, 0xF8, 0x70, 0x00, 0x07, 0x00, + 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, + 0x00, 0x07, 0x00, 0x00, 0x70, 0x01, 0xF9, 0xFE, 0xFF, 0xBF, 0xFE, 0x3E, + 0x0F, 0x03, 0xC0, 0xF0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, + 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0x03, + 0xF8, 0x01, 0xFF, 0xC0, 0x7F, 0xFC, 0x1F, 0x8F, 0xC7, 0xC0, 0x78, 0xF0, + 0x07, 0x9E, 0x00, 0xF3, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0xC0, 0x00, 0xFF, + 0x00, 0x0F, 0xFE, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0x00, 0x07, 0xF0, 0x00, + 0x1E, 0x00, 0x01, 0xFE, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0xC0, + 0x3C, 0xFE, 0x3F, 0x8F, 0xFF, 0xE0, 0xFF, 0xF8, 0x03, 0xF8, 0x00, 0x1C, + 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x0F, 0xFF, 0xFF, 0xFF, 0xC7, 0x01, + 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, + 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x81, 0xE0, 0x7F, 0x1F, 0xC1, + 0xF0, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, + 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, + 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, + 0x0F, 0xE0, 0x07, 0xF8, 0x01, 0xFF, 0x00, 0xFF, 0xC0, 0x7F, 0xFC, 0x3F, + 0xDF, 0xFE, 0xF3, 0xFF, 0x3C, 0x3F, 0x00, 0x78, 0x00, 0x7B, 0xC0, 0x07, + 0x9E, 0x00, 0x3C, 0x78, 0x01, 0xE3, 0xC0, 0x1E, 0x1E, 0x00, 0xF0, 0x78, + 0x07, 0x03, 0xC0, 0x78, 0x1E, 0x03, 0xC0, 0x78, 0x1C, 0x03, 0xC1, 0xE0, + 0x1E, 0x0F, 0x00, 0x78, 0x70, 0x03, 0xC7, 0x80, 0x1E, 0x38, 0x00, 0x71, + 0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xE0, 0x00, 0x77, 0x00, 0x03, 0xF8, 0x00, + 0x1F, 0x80, 0x00, 0x7C, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x07, 0xC0, 0x3E, + 0xF0, 0x0F, 0x80, 0x79, 0xE0, 0x1F, 0x00, 0xF3, 0xC0, 0x7F, 0x01, 0xE3, + 0xC0, 0xFE, 0x07, 0x87, 0x81, 0xDC, 0x0F, 0x0F, 0x03, 0xB8, 0x1E, 0x0E, + 0x0F, 0x78, 0x38, 0x1E, 0x1E, 0xF0, 0xF0, 0x3C, 0x38, 0xE1, 0xE0, 0x78, + 0x71, 0xC3, 0xC0, 0x70, 0xE3, 0xC7, 0x00, 0xF3, 0xC7, 0x9E, 0x01, 0xE7, + 0x07, 0x3C, 0x01, 0xCE, 0x0E, 0x70, 0x03, 0x9C, 0x1E, 0xE0, 0x07, 0xF8, + 0x3F, 0xC0, 0x0F, 0xE0, 0x3F, 0x80, 0x0F, 0xC0, 0x7E, 0x00, 0x1F, 0x80, + 0xFC, 0x00, 0x3F, 0x01, 0xF8, 0x00, 0x3C, 0x01, 0xE0, 0x00, 0x78, 0x03, + 0xC0, 0x00, 0x78, 0x01, 0xF3, 0xC0, 0x1E, 0x1E, 0x03, 0xC1, 0xE0, 0x38, + 0x0F, 0x07, 0x80, 0x78, 0xF0, 0x07, 0x8E, 0x00, 0x3D, 0xE0, 0x01, 0xFC, + 0x00, 0x1F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x1F, + 0xC0, 0x03, 0xFE, 0x00, 0x39, 0xE0, 0x07, 0x8F, 0x00, 0xF0, 0xF0, 0x1E, + 0x07, 0x81, 0xE0, 0x3C, 0x3C, 0x03, 0xC7, 0x80, 0x1E, 0x78, 0x00, 0xF0, + 0x70, 0x00, 0xF7, 0x80, 0x0F, 0x78, 0x01, 0xE3, 0x80, 0x1E, 0x3C, 0x01, + 0xE3, 0xC0, 0x3C, 0x1C, 0x03, 0xC1, 0xE0, 0x38, 0x1E, 0x07, 0x80, 0xE0, + 0x78, 0x0F, 0x07, 0x00, 0xF0, 0xF0, 0x07, 0x0F, 0x00, 0x78, 0xE0, 0x07, + 0x9E, 0x00, 0x39, 0xE0, 0x03, 0xDC, 0x00, 0x3F, 0xC0, 0x01, 0xF8, 0x00, + 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x03, 0xC0, + 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x03, 0xF0, 0x00, 0x08, 0x00, 0x00, 0x7F, + 0xFF, 0xCF, 0xFF, 0xF9, 0xFF, 0xFF, 0x00, 0x03, 0xE0, 0x00, 0x78, 0x00, + 0x1E, 0x00, 0x07, 0x80, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x0F, 0x00, 0x03, + 0xC0, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x01, 0xE0, 0x00, 0x78, + 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x03, 0xC3, 0xF0, 0xFC, 0x78, 0x1E, + 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, + 0xC0, 0x70, 0x1C, 0x0F, 0x07, 0xC3, 0xE0, 0xE0, 0x3E, 0x07, 0x80, 0xF0, + 0x1C, 0x07, 0x01, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, + 0x81, 0xE0, 0x78, 0x1E, 0x03, 0xF0, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, + 0xF8, 0x3F, 0x0F, 0xE0, 0x78, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, + 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0F, 0x01, 0xC0, 0x78, + 0x0F, 0x01, 0xC0, 0xF0, 0x78, 0x3C, 0x0F, 0x03, 0x80, 0xE0, 0x38, 0x0E, + 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x1E, 0x3F, 0x8F, + 0xC3, 0xE0, 0x1E, 0x00, 0x07, 0xF0, 0x0D, 0xFF, 0x81, 0xB8, 0xF8, 0x76, + 0x07, 0xFF, 0xC0, 0x7F, 0x80, 0x03, 0xE0 }; + +const GFXglyph FreeSans22pt7bGlyphs[] PROGMEM = { + { 0, 1, 1, 11, 0, 0 }, // 0x20 ' ' + { 1, 4, 31, 14, 5, -30 }, // 0x21 '!' + { 17, 11, 11, 14, 2, -30 }, // 0x22 '"' + { 33, 22, 31, 24, 1, -29 }, // 0x23 '#' + { 119, 21, 38, 24, 1, -32 }, // 0x24 '$' + { 219, 36, 32, 38, 1, -30 }, // 0x25 '%' + { 363, 25, 32, 29, 2, -30 }, // 0x26 '&' + { 463, 4, 11, 9, 2, -30 }, // 0x27 ''' + { 469, 10, 41, 14, 3, -30 }, // 0x28 '(' + { 521, 9, 41, 14, 2, -30 }, // 0x29 ')' + { 568, 13, 12, 17, 2, -30 }, // 0x2A '*' + { 588, 21, 21, 25, 2, -19 }, // 0x2B '+' + { 644, 4, 11, 12, 4, -3 }, // 0x2C ',' + { 650, 10, 3, 14, 2, -12 }, // 0x2D '-' + { 654, 5, 4, 11, 3, -3 }, // 0x2E '.' + { 657, 12, 32, 12, 0, -30 }, // 0x2F '/' + { 705, 20, 32, 24, 2, -30 }, // 0x30 '0' + { 785, 11, 31, 24, 4, -30 }, // 0x31 '1' + { 828, 21, 31, 24, 1, -30 }, // 0x32 '2' + { 910, 21, 32, 24, 1, -30 }, // 0x33 '3' + { 994, 21, 31, 24, 1, -30 }, // 0x34 '4' + { 1076, 21, 32, 24, 1, -30 }, // 0x35 '5' + { 1160, 20, 32, 24, 2, -30 }, // 0x36 '6' + { 1240, 20, 31, 24, 2, -30 }, // 0x37 '7' + { 1318, 20, 32, 24, 2, -30 }, // 0x38 '8' + { 1398, 20, 32, 24, 2, -30 }, // 0x39 '9' + { 1478, 5, 23, 11, 3, -22 }, // 0x3A ':' + { 1493, 5, 30, 11, 3, -22 }, // 0x3B ';' + { 1512, 21, 21, 25, 2, -19 }, // 0x3C '<' + { 1568, 21, 10, 25, 2, -14 }, // 0x3D '=' + { 1595, 21, 21, 25, 2, -19 }, // 0x3E '>' + { 1651, 19, 32, 24, 3, -31 }, // 0x3F '?' + { 1727, 40, 38, 44, 1, -31 }, // 0x40 '@' + { 1917, 27, 31, 29, 1, -30 }, // 0x41 'A' + { 2022, 24, 31, 29, 3, -30 }, // 0x42 'B' + { 2115, 27, 33, 31, 2, -31 }, // 0x43 'C' + { 2227, 25, 31, 30, 3, -30 }, // 0x44 'D' + { 2324, 23, 31, 27, 3, -30 }, // 0x45 'E' + { 2414, 22, 31, 26, 3, -30 }, // 0x46 'F' + { 2500, 28, 33, 33, 2, -31 }, // 0x47 'G' + { 2616, 25, 31, 31, 3, -30 }, // 0x48 'H' + { 2713, 4, 31, 12, 4, -30 }, // 0x49 'I' + { 2729, 18, 32, 23, 1, -30 }, // 0x4A 'J' + { 2801, 25, 31, 29, 3, -30 }, // 0x4B 'K' + { 2898, 20, 31, 24, 3, -30 }, // 0x4C 'L' + { 2976, 30, 31, 36, 3, -30 }, // 0x4D 'M' + { 3093, 25, 31, 31, 3, -30 }, // 0x4E 'N' + { 3190, 30, 33, 34, 2, -31 }, // 0x4F 'O' + { 3314, 23, 31, 28, 3, -30 }, // 0x50 'P' + { 3404, 30, 35, 34, 2, -31 }, // 0x51 'Q' + { 3536, 26, 31, 31, 3, -30 }, // 0x52 'R' + { 3637, 25, 33, 29, 2, -31 }, // 0x53 'S' + { 3741, 25, 31, 27, 1, -30 }, // 0x54 'T' + { 3838, 25, 32, 31, 3, -30 }, // 0x55 'U' + { 3938, 26, 31, 28, 1, -30 }, // 0x56 'V' + { 4039, 39, 31, 40, 1, -30 }, // 0x57 'W' + { 4191, 27, 31, 28, 1, -30 }, // 0x58 'X' + { 4296, 28, 31, 29, 1, -30 }, // 0x59 'Y' + { 4405, 24, 31, 27, 1, -30 }, // 0x5A 'Z' + { 4498, 8, 40, 12, 3, -30 }, // 0x5B '[' + { 4538, 12, 32, 12, 0, -30 }, // 0x5C '\' + { 4586, 8, 40, 12, 1, -30 }, // 0x5D ']' + { 4626, 16, 16, 20, 2, -30 }, // 0x5E '^' + { 4658, 26, 2, 24, -1, 7 }, // 0x5F '_' + { 4665, 9, 6, 11, 1, -31 }, // 0x60 '`' + { 4672, 22, 25, 23, 1, -23 }, // 0x61 'a' + { 4741, 20, 32, 24, 3, -30 }, // 0x62 'b' + { 4821, 20, 25, 22, 1, -23 }, // 0x63 'c' + { 4884, 20, 32, 24, 1, -30 }, // 0x64 'd' + { 4964, 21, 25, 23, 1, -23 }, // 0x65 'e' + { 5030, 10, 32, 12, 1, -31 }, // 0x66 'f' + { 5070, 20, 33, 24, 1, -23 }, // 0x67 'g' + { 5153, 18, 31, 23, 3, -30 }, // 0x68 'h' + { 5223, 3, 31, 10, 3, -30 }, // 0x69 'i' + { 5235, 7, 40, 10, 0, -30 }, // 0x6A 'j' + { 5270, 19, 31, 22, 3, -30 }, // 0x6B 'k' + { 5344, 3, 31, 9, 3, -30 }, // 0x6C 'l' + { 5356, 29, 24, 35, 3, -23 }, // 0x6D 'm' + { 5443, 18, 24, 23, 3, -23 }, // 0x6E 'n' + { 5497, 21, 25, 23, 1, -23 }, // 0x6F 'o' + { 5563, 20, 33, 24, 3, -23 }, // 0x70 'p' + { 5646, 20, 33, 24, 1, -23 }, // 0x71 'q' + { 5729, 10, 24, 14, 3, -23 }, // 0x72 'r' + { 5759, 19, 25, 21, 1, -23 }, // 0x73 's' + { 5819, 10, 30, 12, 1, -28 }, // 0x74 't' + { 5857, 18, 24, 23, 3, -22 }, // 0x75 'u' + { 5911, 21, 23, 21, 0, -22 }, // 0x76 'v' + { 5972, 31, 23, 31, 0, -22 }, // 0x77 'w' + { 6062, 20, 23, 21, 0, -22 }, // 0x78 'x' + { 6120, 20, 33, 21, 0, -22 }, // 0x79 'y' + { 6203, 19, 23, 21, 1, -22 }, // 0x7A 'z' + { 6258, 10, 40, 14, 2, -30 }, // 0x7B '{' + { 6308, 3, 41, 11, 4, -30 }, // 0x7C '|' + { 6324, 10, 40, 14, 2, -30 }, // 0x7D '}' + { 6374, 19, 7, 22, 1, -18 } }; // 0x7E '~' + +const GFXfont FreeSans22pt7b PROGMEM = { + (uint8_t *)FreeSans22pt7bBitmaps, + (GFXglyph *)FreeSans22pt7bGlyphs, + 0x20, 0x7E, 52 }; + +// Approx. 7063 bytes diff --git a/FreeSansBold11pt7b.h b/FreeSansBold11pt7b.h new file mode 100644 index 0000000..865e24d --- /dev/null +++ b/FreeSansBold11pt7b.h @@ -0,0 +1,252 @@ +const uint8_t FreeSansBold11pt7bBitmaps[] PROGMEM = { + 0x00, 0xFF, 0xFF, 0xF7, 0x66, 0x66, 0x66, 0x0F, 0xFF, 0xE7, 0xE7, 0xE7, + 0xE7, 0x43, 0x42, 0x0C, 0xE0, 0xCC, 0x1C, 0xC1, 0xCC, 0x7F, 0xF7, 0xFF, + 0x19, 0x83, 0x98, 0x39, 0x8F, 0xFE, 0xFF, 0xE3, 0x30, 0x73, 0x07, 0x30, + 0x63, 0x06, 0x70, 0x06, 0x03, 0xF0, 0xFF, 0x3B, 0x77, 0x6E, 0xED, 0xDD, + 0x83, 0xF0, 0x3F, 0x81, 0xF8, 0x1F, 0x83, 0x7E, 0x6E, 0xED, 0xDF, 0xF9, + 0xFE, 0x1F, 0x80, 0xC0, 0x18, 0x00, 0x1C, 0x04, 0x0F, 0xE1, 0x81, 0x9C, + 0x20, 0x31, 0x8C, 0x0E, 0x31, 0x00, 0xC6, 0x60, 0x1F, 0xC8, 0x01, 0xF3, + 0x00, 0x00, 0x47, 0x80, 0x19, 0xF8, 0x06, 0x73, 0x00, 0xCC, 0x70, 0x31, + 0x8E, 0x06, 0x39, 0x81, 0x83, 0xF0, 0x20, 0x3C, 0x0F, 0x00, 0x7E, 0x03, + 0x9C, 0x0E, 0x70, 0x39, 0xC0, 0xFE, 0x01, 0xF0, 0x07, 0x80, 0x7F, 0x39, + 0xDE, 0xEE, 0x3F, 0x38, 0x7C, 0xF0, 0xE1, 0xEF, 0xC7, 0xFB, 0x87, 0xCF, + 0xFF, 0xF6, 0x80, 0x18, 0xE3, 0x1C, 0x61, 0x8E, 0x38, 0xE3, 0x8E, 0x38, + 0xE3, 0x86, 0x18, 0x70, 0xC3, 0x86, 0x61, 0xC3, 0x0E, 0x18, 0x61, 0xC7, + 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0x86, 0x38, 0xC7, 0x18, 0x18, 0x18, 0x7E, + 0x7E, 0x3C, 0x3C, 0x24, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0xFF, 0xFF, 0xFF, + 0xFC, 0x38, 0x0E, 0x03, 0x80, 0xFF, 0x92, 0xF0, 0xFF, 0xFE, 0xFF, 0x80, + 0x0C, 0x30, 0x86, 0x18, 0x41, 0x0C, 0x30, 0x82, 0x18, 0x41, 0x0C, 0x30, + 0x3E, 0x1F, 0xE7, 0x7B, 0x8F, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, + 0x7E, 0x1F, 0x87, 0xE3, 0xDF, 0xE7, 0xF8, 0x78, 0x06, 0x1C, 0x7F, 0xFF, + 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x3E, 0x1F, + 0xEF, 0xFF, 0x87, 0xE1, 0xF8, 0x70, 0x1C, 0x0E, 0x07, 0x83, 0xC3, 0xC1, + 0xE0, 0x70, 0x3F, 0xFF, 0xFF, 0xFF, 0x3E, 0x1F, 0xEF, 0x7B, 0x8F, 0xE1, + 0xC0, 0xE0, 0x38, 0x3C, 0x0F, 0x80, 0xF0, 0x1F, 0x87, 0xE1, 0xFF, 0xF7, + 0xF8, 0xF8, 0x07, 0x83, 0xE0, 0xF8, 0x6E, 0x1B, 0x8C, 0xE7, 0x39, 0x8E, + 0xE3, 0xB0, 0xEF, 0xFF, 0xFF, 0x03, 0xC0, 0xE0, 0x38, 0x0E, 0x7F, 0xDF, + 0xF7, 0xFD, 0x80, 0x60, 0x3F, 0xCF, 0xFB, 0xDE, 0xE1, 0xC0, 0x70, 0x1F, + 0x87, 0xE1, 0xFF, 0xE7, 0xF8, 0xF8, 0x1F, 0x0F, 0xE7, 0xBF, 0x87, 0xE0, + 0x38, 0x0F, 0xF3, 0xFE, 0xF3, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xDF, 0xE7, + 0xF8, 0x78, 0xFF, 0xFF, 0xFF, 0xFC, 0x07, 0x03, 0x81, 0xC0, 0x70, 0x38, + 0x0E, 0x07, 0x01, 0xC0, 0x70, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x1F, 0x07, + 0xF9, 0xE7, 0x38, 0x77, 0x0E, 0xE1, 0x8F, 0xE1, 0xFE, 0x71, 0xEE, 0x1F, + 0x83, 0xF8, 0x77, 0x0E, 0xFF, 0xCF, 0xF0, 0xF8, 0x3E, 0x1F, 0xCF, 0x7B, + 0x87, 0xE1, 0xF0, 0x7E, 0x1F, 0x8F, 0xFF, 0xDF, 0xF0, 0x1C, 0x07, 0xE3, + 0xBF, 0xE7, 0xF0, 0xF8, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0xFF, 0x80, 0x00, + 0xFF, 0x92, 0xF0, 0x00, 0xC1, 0xF1, 0xFB, 0xF0, 0xE0, 0x3C, 0x07, 0xE0, + 0x3F, 0x03, 0xC0, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, + 0xFF, 0xFF, 0xFF, 0xC0, 0x3E, 0x07, 0xF0, 0x3F, 0x01, 0xC0, 0xF1, 0xFB, + 0xF8, 0xF0, 0x20, 0x00, 0x1F, 0x07, 0xF9, 0xFF, 0x38, 0xFE, 0x0F, 0xC1, + 0xC0, 0x78, 0x1E, 0x07, 0x80, 0xE0, 0x38, 0x07, 0x00, 0x00, 0x1C, 0x03, + 0x80, 0x70, 0x01, 0xFC, 0x00, 0xFF, 0xE0, 0x78, 0x1E, 0x1C, 0x00, 0xE3, + 0x00, 0x0C, 0xC1, 0xEC, 0xF8, 0x7F, 0x1E, 0x18, 0x63, 0xC6, 0x0C, 0x78, + 0xC1, 0x8F, 0x18, 0x61, 0xE3, 0x0C, 0x7C, 0x63, 0x9D, 0xCF, 0xFF, 0x18, + 0x73, 0xC3, 0x80, 0x00, 0x3C, 0x04, 0x01, 0xFF, 0x80, 0x0F, 0xE0, 0x00, + 0x03, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3F, 0x00, 0xEE, 0x01, 0xDC, 0x03, + 0xBC, 0x0E, 0x38, 0x1C, 0x70, 0x78, 0xF0, 0xFF, 0xE1, 0xFF, 0xC7, 0xFF, + 0xCE, 0x03, 0x9C, 0x07, 0x78, 0x0F, 0xFF, 0x8F, 0xFE, 0xFF, 0xEE, 0x0F, + 0xE0, 0x7E, 0x0F, 0xFF, 0xEF, 0xFC, 0xFF, 0xEE, 0x07, 0xE0, 0x7E, 0x07, + 0xE0, 0x7F, 0xFF, 0xFF, 0xEF, 0xFC, 0x0F, 0xC0, 0x7F, 0xC3, 0xFF, 0x9E, + 0x1E, 0xF0, 0x3B, 0x80, 0x0E, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x0E, + 0x03, 0xFC, 0x0E, 0x78, 0x78, 0xFF, 0xE3, 0xFF, 0x03, 0xF0, 0xFF, 0x87, + 0xFF, 0x3F, 0xF9, 0xC1, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xFC, 0x0F, 0xE0, + 0x7F, 0x03, 0xF8, 0x1D, 0xC0, 0xEE, 0x0F, 0x7F, 0xF3, 0xFF, 0x9F, 0xF0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0E, 0x01, 0xC0, 0x3F, 0xF7, 0xFE, 0xFF, + 0xDC, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF0, 0x0E, 0x01, 0xC0, 0x3F, 0xF7, 0xFE, 0xFF, 0xDC, 0x03, + 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0x07, 0xC0, 0x7F, 0xC3, + 0xFF, 0x9E, 0x0F, 0x70, 0x1F, 0x80, 0x0E, 0x00, 0x38, 0x3F, 0xE0, 0xFF, + 0x83, 0xFF, 0x01, 0xDC, 0x07, 0x78, 0x3C, 0xFF, 0xF1, 0xFE, 0xC1, 0xF3, + 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFE, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, + 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xFE, 0x3F, 0x8F, 0xE3, 0xFF, 0xE7, + 0xF8, 0xF8, 0xE0, 0x73, 0x83, 0xCE, 0x1E, 0x38, 0xF0, 0xE7, 0x83, 0xBC, + 0x0F, 0xE0, 0x3F, 0x80, 0xFF, 0x03, 0xDE, 0x0E, 0x38, 0x38, 0xF0, 0xE1, + 0xE3, 0x83, 0xCE, 0x07, 0x38, 0x1E, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, + 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x3F, 0xFF, + 0xFF, 0xFF, 0xF8, 0x3F, 0xF0, 0x7F, 0xE0, 0xFF, 0xC3, 0xFF, 0xC7, 0xFF, + 0x8D, 0xFB, 0x1B, 0xF6, 0x37, 0xEC, 0xEF, 0xDD, 0x9F, 0x9B, 0x3F, 0x36, + 0x7E, 0x7C, 0xFC, 0xF9, 0xF9, 0xE3, 0xF1, 0xC7, 0xE0, 0x7F, 0x83, 0xFC, + 0x1F, 0xF0, 0xFF, 0xC7, 0xFE, 0x3F, 0xB9, 0xFD, 0xCF, 0xE7, 0x7F, 0x1B, + 0xF8, 0xFF, 0xC3, 0xFE, 0x1F, 0xF0, 0x7F, 0x83, 0xFC, 0x0F, 0x07, 0xC0, + 0x3F, 0xE0, 0xFF, 0xE3, 0xC1, 0xE7, 0x01, 0xDE, 0x03, 0xF8, 0x03, 0xF0, + 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0xC0, 0x7B, 0x80, 0xE7, 0x83, 0xC7, 0xFF, + 0x07, 0xFC, 0x03, 0xE0, 0xFF, 0x8F, 0xFE, 0xFF, 0xEE, 0x0F, 0xE0, 0xFE, + 0x0F, 0xE0, 0xFF, 0xFE, 0xFF, 0xEF, 0xF8, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, + 0x00, 0xE0, 0x0E, 0x00, 0x07, 0xC0, 0x3F, 0xE0, 0xFF, 0xE3, 0xC1, 0xE7, + 0x01, 0xDE, 0x03, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0xC3, + 0x7B, 0x87, 0xE7, 0x87, 0xC7, 0xFF, 0x07, 0xFF, 0x83, 0xE6, 0x00, 0x04, + 0xFF, 0xC7, 0xFF, 0xBF, 0xFD, 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDF, + 0xFC, 0xFF, 0xC7, 0xFF, 0x38, 0x3D, 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x81, + 0xDC, 0x0F, 0x1F, 0x83, 0xFF, 0x1F, 0xFD, 0xE0, 0xEE, 0x07, 0x78, 0x03, + 0xF8, 0x0F, 0xFC, 0x1F, 0xF0, 0x07, 0xC0, 0x1F, 0xC0, 0x7F, 0x07, 0xBF, + 0xF9, 0xFF, 0x83, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0x0F, 0x00, + 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, + 0xF0, 0x0F, 0x00, 0xF0, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, + 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xF0, 0xFF, + 0xFE, 0x7F, 0xE1, 0xF8, 0x70, 0x3D, 0xC0, 0xE7, 0x03, 0x8E, 0x0E, 0x38, + 0x70, 0xE1, 0xC1, 0xC7, 0x07, 0x38, 0x1C, 0xE0, 0x33, 0x80, 0xEC, 0x03, + 0xF0, 0x07, 0xC0, 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x70, 0x70, 0x77, 0x0F, + 0x07, 0x70, 0xF0, 0xF7, 0x8F, 0x8E, 0x38, 0xD8, 0xE3, 0x8D, 0x8E, 0x39, + 0xD8, 0xC1, 0x9D, 0x9C, 0x1D, 0x9D, 0xC1, 0xD8, 0xDC, 0x1D, 0x8D, 0x80, + 0xF8, 0xD8, 0x0F, 0x0F, 0x80, 0xF0, 0xF8, 0x0F, 0x07, 0x00, 0x70, 0x70, + 0x78, 0x3C, 0xE1, 0xE3, 0xC7, 0x07, 0x3C, 0x1E, 0xE0, 0x3F, 0x00, 0x7C, + 0x01, 0xE0, 0x07, 0x80, 0x3F, 0x00, 0xFE, 0x07, 0xB8, 0x1C, 0xF0, 0xF1, + 0xE7, 0x87, 0x9C, 0x0F, 0xF0, 0x39, 0xC1, 0xE7, 0x87, 0x0E, 0x1C, 0x1C, + 0xE0, 0x73, 0x80, 0xFC, 0x03, 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, + 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, + 0x80, 0xF0, 0x3C, 0x07, 0x01, 0xE0, 0x78, 0x1E, 0x03, 0x80, 0xF0, 0x3C, + 0x0F, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x38, 0xE3, 0x8E, 0x38, + 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0x8F, 0xFF, 0x83, 0x04, 0x10, + 0x61, 0x82, 0x0C, 0x30, 0x41, 0x06, 0x08, 0x20, 0xC1, 0xFF, 0xF1, 0xC7, + 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x7F, 0xFF, + 0x0E, 0x07, 0x81, 0xF0, 0x6C, 0x3B, 0x0C, 0xE7, 0x19, 0x87, 0x60, 0xC0, + 0xFF, 0xFF, 0xFF, 0x61, 0x84, 0x3F, 0x0F, 0xF3, 0xCF, 0x70, 0xE0, 0x3C, + 0x7F, 0x9F, 0x77, 0x0E, 0xE1, 0xDE, 0xFB, 0xFF, 0x3C, 0xE0, 0x00, 0xE0, + 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE7, 0x8E, 0xFC, 0xFF, 0xEF, 0x0E, 0xF0, + 0xEE, 0x0E, 0xE0, 0xFF, 0x0E, 0xF0, 0xEF, 0xFE, 0xFF, 0xCE, 0xF8, 0x1F, + 0x1F, 0xE7, 0xBF, 0x87, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE1, 0xDE, 0xF7, + 0xF8, 0x7C, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x71, 0xEE, 0x7F, 0xDF, 0xFF, + 0x8F, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7F, 0x1E, 0xFF, 0xDF, 0xF9, 0xF7, + 0x00, 0x00, 0x1F, 0x0F, 0xF1, 0xCF, 0x70, 0xEE, 0x1F, 0xFF, 0xFF, 0xFF, + 0x00, 0xE0, 0xEE, 0x79, 0xFE, 0x0F, 0x80, 0x1E, 0x7C, 0xE1, 0xCF, 0xFF, + 0xCE, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x1E, 0xEF, 0xFD, + 0xFF, 0xF8, 0xFE, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xF1, 0xEF, 0xFD, 0xFF, + 0x8F, 0x70, 0x0F, 0xC1, 0xFC, 0x73, 0xFE, 0x3F, 0x00, 0xE0, 0x1C, 0x03, + 0x80, 0x70, 0x0E, 0x79, 0xDF, 0xBF, 0xF7, 0x8F, 0xE0, 0xFC, 0x1F, 0x83, + 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7B, 0xDE, 0x07, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, + 0xEF, 0x7B, 0xDF, 0xEF, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x1D, + 0xC7, 0x39, 0xC7, 0x78, 0xEE, 0x1F, 0xC3, 0xFC, 0x7B, 0x8E, 0x39, 0xC7, + 0xB8, 0x77, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x9E, 0x77, + 0xFF, 0xBF, 0xFF, 0xFE, 0x38, 0x7E, 0x1C, 0x3F, 0x0E, 0x1F, 0x87, 0x0F, + 0xC3, 0x87, 0xE1, 0xC3, 0xF0, 0xE1, 0xF8, 0x70, 0xFC, 0x38, 0x70, 0xE7, + 0x9D, 0xFB, 0xFF, 0xF8, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, + 0x1F, 0x83, 0xF0, 0x70, 0x1F, 0x07, 0xF9, 0xEF, 0x78, 0x7E, 0x0F, 0xC1, + 0xF8, 0x3F, 0x07, 0xF0, 0xEF, 0x78, 0xFF, 0x0F, 0x80, 0xE7, 0x8E, 0xFC, + 0xFF, 0xEF, 0x0E, 0xF0, 0xEE, 0x0F, 0xE0, 0xEF, 0x0E, 0xF0, 0xEF, 0xFE, + 0xEF, 0xCE, 0x78, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x00, 0x1E, + 0xEF, 0xFD, 0xFF, 0xF8, 0xFE, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xF1, 0xEF, + 0xFD, 0xFF, 0x8F, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0xE7, + 0xDF, 0xFF, 0x8F, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x00, 0x3F, 0x1F, + 0xEF, 0x3F, 0x87, 0xF8, 0x1F, 0xC3, 0xFC, 0x0F, 0xE1, 0xFC, 0xFF, 0xF8, + 0xFC, 0x38, 0x70, 0xE7, 0xFF, 0xE7, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, + 0x87, 0xC7, 0x80, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, + 0x3F, 0x07, 0xF1, 0xEF, 0xFD, 0xFF, 0x9E, 0x70, 0xF0, 0xEE, 0x1D, 0xC3, + 0xB8, 0xE3, 0x9C, 0x73, 0x8E, 0x60, 0xFC, 0x1F, 0x83, 0xE0, 0x3C, 0x07, + 0x80, 0xE1, 0xC7, 0x38, 0xE3, 0x9C, 0xF1, 0xCE, 0x7C, 0xE7, 0x36, 0x61, + 0xDB, 0x70, 0xED, 0xB8, 0x7E, 0xFC, 0x1E, 0x7C, 0x0F, 0x1E, 0x07, 0x8F, + 0x03, 0xC7, 0x00, 0x70, 0xE7, 0x9C, 0x39, 0xC1, 0xF8, 0x1F, 0x80, 0xF0, + 0x0F, 0x01, 0xF8, 0x1F, 0x83, 0x9C, 0x79, 0xE7, 0x0E, 0xF0, 0xE7, 0x0E, + 0x70, 0xE7, 0x8C, 0x39, 0xC3, 0x9C, 0x39, 0x81, 0xF8, 0x1F, 0x81, 0xF0, + 0x0F, 0x00, 0xF0, 0x0E, 0x00, 0xE0, 0x0E, 0x03, 0xC0, 0x38, 0x00, 0xFF, + 0xFF, 0xC1, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0x70, 0x70, 0x3F, 0xFF, + 0xF0, 0x1C, 0xF3, 0x0C, 0x30, 0xC3, 0x0C, 0x73, 0x8E, 0x1C, 0x30, 0xC3, + 0x0C, 0x30, 0xC3, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xC7, 0x1C, + 0x71, 0xC7, 0x1C, 0x70, 0xF3, 0xDC, 0x71, 0xC7, 0x1C, 0x71, 0xCF, 0x38, + 0x38, 0x1F, 0x14, 0x7C, 0x0E }; + +const GFXglyph FreeSansBold11pt7bGlyphs[] PROGMEM = { + { 0, 1, 1, 6, 0, 0 }, // 0x20 ' ' + { 1, 4, 16, 7, 2, -15 }, // 0x21 '!' + { 9, 8, 6, 10, 1, -15 }, // 0x22 '"' + { 15, 12, 16, 12, 0, -14 }, // 0x23 '#' + { 39, 11, 19, 12, 0, -16 }, // 0x24 '$' + { 66, 19, 16, 19, 0, -15 }, // 0x25 '%' + { 104, 14, 16, 16, 1, -15 }, // 0x26 '&' + { 132, 3, 6, 5, 1, -15 }, // 0x27 ''' + { 135, 6, 20, 7, 1, -15 }, // 0x28 '(' + { 150, 6, 20, 7, 0, -15 }, // 0x29 ')' + { 165, 8, 7, 8, 0, -15 }, // 0x2A '*' + { 172, 10, 10, 13, 1, -9 }, // 0x2B '+' + { 185, 3, 7, 5, 1, -2 }, // 0x2C ',' + { 188, 5, 3, 7, 1, -6 }, // 0x2D '-' + { 190, 3, 3, 5, 1, -2 }, // 0x2E '.' + { 192, 6, 16, 6, 0, -15 }, // 0x2F '/' + { 204, 10, 16, 12, 1, -15 }, // 0x30 '0' + { 224, 7, 16, 12, 1, -15 }, // 0x31 '1' + { 238, 10, 16, 12, 1, -15 }, // 0x32 '2' + { 258, 10, 16, 12, 1, -15 }, // 0x33 '3' + { 278, 10, 16, 12, 1, -15 }, // 0x34 '4' + { 298, 10, 16, 12, 1, -15 }, // 0x35 '5' + { 318, 10, 16, 12, 1, -15 }, // 0x36 '6' + { 338, 10, 16, 12, 1, -15 }, // 0x37 '7' + { 358, 11, 16, 12, 0, -15 }, // 0x38 '8' + { 380, 10, 16, 12, 1, -15 }, // 0x39 '9' + { 400, 3, 11, 5, 1, -10 }, // 0x3A ':' + { 405, 3, 15, 5, 1, -10 }, // 0x3B ';' + { 411, 10, 10, 13, 1, -9 }, // 0x3C '<' + { 424, 11, 8, 13, 1, -8 }, // 0x3D '=' + { 435, 10, 10, 13, 1, -9 }, // 0x3E '>' + { 448, 11, 16, 13, 1, -15 }, // 0x3F '?' + { 470, 19, 19, 21, 1, -15 }, // 0x40 '@' + { 516, 15, 16, 15, 0, -15 }, // 0x41 'A' + { 546, 12, 16, 15, 2, -15 }, // 0x42 'B' + { 570, 14, 16, 16, 1, -15 }, // 0x43 'C' + { 598, 13, 16, 16, 2, -15 }, // 0x44 'D' + { 624, 11, 16, 14, 2, -15 }, // 0x45 'E' + { 646, 11, 16, 14, 2, -15 }, // 0x46 'F' + { 668, 14, 16, 17, 1, -15 }, // 0x47 'G' + { 696, 12, 16, 16, 2, -15 }, // 0x48 'H' + { 720, 3, 16, 7, 2, -15 }, // 0x49 'I' + { 726, 10, 16, 12, 1, -15 }, // 0x4A 'J' + { 746, 14, 16, 16, 2, -15 }, // 0x4B 'K' + { 774, 10, 16, 13, 2, -15 }, // 0x4C 'L' + { 794, 15, 16, 19, 2, -15 }, // 0x4D 'M' + { 824, 13, 16, 16, 2, -15 }, // 0x4E 'N' + { 850, 15, 16, 17, 1, -15 }, // 0x4F 'O' + { 880, 12, 16, 15, 2, -15 }, // 0x50 'P' + { 904, 15, 17, 17, 1, -15 }, // 0x51 'Q' + { 936, 13, 16, 16, 2, -15 }, // 0x52 'R' + { 962, 13, 16, 15, 1, -15 }, // 0x53 'S' + { 988, 12, 16, 14, 1, -15 }, // 0x54 'T' + { 1012, 12, 16, 16, 2, -15 }, // 0x55 'U' + { 1036, 14, 16, 14, 0, -15 }, // 0x56 'V' + { 1064, 20, 16, 21, 0, -15 }, // 0x57 'W' + { 1104, 14, 16, 15, 0, -15 }, // 0x58 'X' + { 1132, 14, 16, 14, 0, -15 }, // 0x59 'Y' + { 1160, 11, 16, 13, 1, -15 }, // 0x5A 'Z' + { 1182, 6, 20, 7, 1, -15 }, // 0x5B '[' + { 1197, 6, 16, 6, 0, -15 }, // 0x5C '\' + { 1209, 6, 20, 7, 0, -15 }, // 0x5D ']' + { 1224, 10, 9, 13, 1, -14 }, // 0x5E '^' + { 1236, 12, 2, 12, 0, 3 }, // 0x5F '_' + { 1239, 5, 3, 5, 0, -15 }, // 0x60 '`' + { 1241, 11, 13, 12, 1, -11 }, // 0x61 'a' + { 1259, 12, 16, 13, 1, -15 }, // 0x62 'b' + { 1283, 10, 12, 12, 1, -11 }, // 0x63 'c' + { 1298, 11, 17, 13, 1, -15 }, // 0x64 'd' + { 1322, 11, 12, 13, 1, -11 }, // 0x65 'e' + { 1339, 7, 16, 7, 0, -15 }, // 0x66 'f' + { 1353, 11, 17, 13, 1, -11 }, // 0x67 'g' + { 1377, 11, 16, 13, 1, -15 }, // 0x68 'h' + { 1399, 4, 16, 6, 1, -15 }, // 0x69 'i' + { 1407, 5, 21, 6, 0, -15 }, // 0x6A 'j' + { 1421, 11, 16, 12, 1, -15 }, // 0x6B 'k' + { 1443, 3, 16, 6, 1, -15 }, // 0x6C 'l' + { 1449, 17, 12, 19, 1, -11 }, // 0x6D 'm' + { 1475, 11, 12, 13, 1, -11 }, // 0x6E 'n' + { 1492, 11, 12, 13, 1, -11 }, // 0x6F 'o' + { 1509, 12, 17, 13, 1, -11 }, // 0x70 'p' + { 1535, 11, 17, 13, 1, -11 }, // 0x71 'q' + { 1559, 7, 12, 8, 1, -11 }, // 0x72 'r' + { 1570, 10, 12, 12, 1, -11 }, // 0x73 's' + { 1585, 7, 15, 7, 0, -14 }, // 0x74 't' + { 1599, 11, 12, 13, 1, -11 }, // 0x75 'u' + { 1616, 11, 12, 12, 0, -11 }, // 0x76 'v' + { 1633, 17, 12, 17, 0, -11 }, // 0x77 'w' + { 1659, 12, 12, 12, 0, -11 }, // 0x78 'x' + { 1677, 12, 17, 12, 0, -11 }, // 0x79 'y' + { 1703, 9, 12, 11, 1, -11 }, // 0x7A 'z' + { 1717, 6, 20, 8, 1, -15 }, // 0x7B '{' + { 1732, 2, 20, 6, 2, -15 }, // 0x7C '|' + { 1737, 6, 20, 8, 2, -15 }, // 0x7D '}' + { 1752, 10, 4, 11, 0, -6 } }; // 0x7E '~' + +const GFXfont FreeSansBold11pt7b PROGMEM = { + (uint8_t *)FreeSansBold11pt7bBitmaps, + (GFXglyph *)FreeSansBold11pt7bGlyphs, + 0x20, 0x7E, 26 }; + +// Approx. 2429 bytes diff --git a/fw_mega.ino b/fw_mega.ino index 4df0190..692e982 100644 --- a/fw_mega.ino +++ b/fw_mega.ino @@ -1,35 +1,39 @@ #include <Wire.h> -// display mapping suggestion for Arduino MEGA +// display mapping for Arduino MEGA // BUSY -> 7, RST -> 9, DC -> 8, CS-> 53, CLK -> 52, DIN -> 51 #include <GxEPD2_BW.h> -#include <Fonts/FreeSans18pt7b.h> -#include <Fonts/FreeSansBold12pt7b.h> #include <Fonts/FreeSansBold9pt7b.h> +#include "FreeSansBold11pt7b.h" +#include "FreeSans22pt7b.h" #include <Fonts/TomThumb.h> #include <MD_DS3231.h> -//#include <BME280I2C.h> -#include <Adafruit_Sensor.h> -#include <Adafruit_BME280.h> -#include<bc_co2_module_arduino.h> +#include <BME280I2C.h> +#include <bc_co2_module_arduino.h> -//BME280I2C bme; -Adafruit_BME280 bme; +/**************************** BME280 setup **********************************/ +BME280I2C::Settings settings( + BME280::OSR_X1, + BME280::OSR_X1, + BME280::OSR_X1, + BME280::Mode_Forced, + BME280::StandbyTime_1000ms, + BME280::Filter_4, + BME280::SpiEnable_False, + 0x76 // I2C address. I2C specific. +); -/**************************** Serial setup ************************************/ +BME280I2C bme(settings); + +/**************************** Serial setup **********************************/ #define BAUDRATE 115200 -/**************************** I2C setup **************************************/ - -#define BME280_ADDR 0x76 -#define BME280_ID 0x60 - /**************************** Screen setup **********************************/ -#define MAX_DISPAY_BUFFER_SIZE 32 // +#define MAX_DISPAY_BUFFER_SIZE 32 #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPAY_BUFFER_SIZE / (EPD::WIDTH / 8)) GxEPD2_BW<GxEPD2_290, MAX_HEIGHT(GxEPD2_290)> display(GxEPD2_290(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); -/*************************** Global variables *********************************/ +/*************************** Global variables *******************************/ struct data { float temp; @@ -41,18 +45,17 @@ struct data { }; volatile static struct data dataset; +static struct lp8_t sensor; char incoming[40]; -bool commRecvd = false; char ssid[16]; char ip[16]; -// +static byte bmeerr = 0; +/******************************* Setup routine ******************************/ void setup() { - char buf; - static byte i=0; - + ADCSRA = 0; //turn off adc to save power as it is not needed - + pinMode(13, OUTPUT); digitalWrite(13, LOW); //turn off led @@ -61,50 +64,188 @@ void setup() { Wire.begin(); Serial.print(F("\r\n***Enviro data monitor***\r\n")); - //start co2 module - init_module(); - - while(!bme.begin(BME280_ADDR)) { //for adafruit driver -// while(!bme.begin()) { //for bme280i2c driver - Serial.println(F("Could not find BME280 sensor")); - delay(1000); - } - -//for adafruit driver - if(bme.sensorID() == BME280_ID){ - Serial.println(F("Found BME280 sensor")); - } - else { - Serial.println(F("Found unknown sensor")); - } - -//for bme280i2c driver -// switch(bme.chipModel()) { -// case BME280::ChipModel_BME280: -// Serial.println(F("Found BME280 sensor!")); -// break; -// case BME280::ChipModel_BMP280: -// Serial.println(F("Found BMP280 sensor! No Humidity available.")); -// break; -// default: -// Serial.println(F("Error, found UNKNOWN sensor.")); -// } + //start co2 module + init_co2_module(); display.init(); //init display delay(100); layoutScreen(); //print static parts of screen - //make sure we're always in 24hr mode - if(RTC.status(DS3231_12H)){ //invert to change to 12h - RTC.control(DS3231_12H, DS3231_OFF); //use DS3231_ON to enable 12h mode - switch (RTC.status(DS3231_12H) ){ - case 0: Serial.println(F("24h mode")); - case 1: Serial.println(F("12h mode")); //should not occur + //make sure we're always in 24hr mode, invert to change to 12h + switch (RTC.status(DS3231_12H)) { + case DS3231_OFF: + Serial.println(F("RTC in 24h mode")); + break; + case DS3231_ON: + Serial.println(F("RTC in 12h mode, fixing")); //should not occur + RTC.control(DS3231_12H, DS3231_OFF); + break; + default: + break; + } + + Serial.println(F("Waiting for ESP to boot")); + bool n; + static byte tries = 0; + Serial.print("["); + while(1) { + delay(1000); + Serial.print("="); + n = readNetInfo(); + if(n == true) { + break; + } + else { + tries++; + if(tries >= 33) { + Serial.print("X"); + Serial.println(); + Serial.println(F("Could not read connection info, likely no network connection")); + display.setFont(&TomThumb); + display.setTextColor(GxEPD_BLACK); + uint16_t x = 10; + uint16_t y = 277; + + display.setPartialWindow(0, 270, display.width(), 20); + + display.firstPage(); + do { + display.fillScreen(GxEPD_WHITE); + display.setCursor(x,y); + display.print("Network error"); + } + while (display.nextPage()); + tries = 0; + break; + } + } + } + + static byte retries = 0; + bool t; + while(1){ //sync time with network + delay(5000); + t = syncTime(); + if(t == true) { + break; + } + else { + retries++; + if(retries > 4){ //break after 5 tries + Serial.println(F("Could not sync time\n")); + break; + } } } - delay(2000); //leave time for esp to connect to wireless network + retries = 0; + printRTCTimeToScreen(); //print time to screen + printRTCDateToScreen(); //print date to screen + + bool tsens; + while(1) { + tsens = bme.begin(); + if(tsens == true) { + switch(bme.chipModel()) { + case BME280::ChipModel_BME280: + Serial.println(F("Found BME280 sensor!")); + break; + case BME280::ChipModel_BMP280: + Serial.println(F("Found BMP280 sensor! No Humidity available.")); + break; + default: + Serial.println(F("Error, found unknown sensor.")); + } + break; + } + else { + delay(2000); + retries++; + if(retries > 4) { + Serial.println(F("Could not find BME280 sensor.")); + //display error message on screen + display.setFont(&FreeSansBold11pt7b); + display.setTextColor(GxEPD_BLACK); + int16_t tbx, tby; uint16_t tbw, tbh; + display.getTextBounds("SENS ERR!", 0, 0, &tbx, &tby, &tbw, &tbh); + uint16_t y = (92 - tbh) - tby + 20; + + display.setPartialWindow(0, 70 + 20, display.width(), 33); + display.firstPage(); + do { + display.fillScreen(GxEPD_WHITE); + display.setCursor(6, y); + display.print(F("SENS ERR!")); + } + while (display.nextPage()); + bmeerr = 1; + break; + } + } + } + + Serial.println(F("Setup complete")); +}; + +/********************************* MAINLOOP ***************************************/ +void loop() { + static byte oldmins; + + RTC.readTime(); + if(RTC.m != oldmins){ //run this every minute + printRTCTimeToScreen(); //update time on screen + if(bmeerr == 0){ //only attempt to measure anything if the sensor is present + doStuff(); //acquire data + sendDataToServer(); //send over to esp for publishing + printDataToScreen(); //update values on screen + } + oldmins = RTC.m; //save old value + } + else if((RTC.m == 0 || RTC.m == 30) && RTC.s == 55) { + delay(1100); //delay to prevent firing multiple times + display.refresh(); //perform a full display refresh every half hour, removes quick refresh artifacts + } + else if(RTC.m == 0 && RTC.h == 0 && RTC.s == 40){ + delay(1100); //delay to prevent firing multiple times + printRTCDateToScreen(); //refresh date on midnight + } + else if(RTC.m == 0 && RTC.h == 2 && RTC.s == 33) { //resync time at 2am + static byte retries = 0; + bool t; + while(1){ + delay(2000); + t = syncTime(); + if(t == true) { + break; + } + else { + retries++; + if(retries > 4){ //break after 5 tries + Serial.println(F("Could not sync time\n")); + break; + } + } + } + } + delay(500); +}; +/************************************************************************************/ + +void doStuff() { + dataset.temp = measureTemp(); + dataset.hum = measureHum(); + dataset.rhum = round(dataset.hum); + dataset.pres = measurePres(); + dataset.rpres = round(dataset.pres); + dataset.co2 = measureCO2(); +}; + +bool readNetInfo() { + char buf; + bool commRecvd = false; + static byte i=0; static bool recv = false; + while(Serial2.available() > 0) { buf = Serial2.read(); if(recv == true) { @@ -125,7 +266,7 @@ void setup() { } i = 0; - + if(commRecvd == true){ char* token = strtok(incoming, ","); while(token != NULL){ @@ -140,70 +281,17 @@ void setup() { } i = 0; commRecvd = false; - printConnInfo(); + Serial.print("]"); + Serial.println(); Serial.print(F("Got conn info:\n")); Serial.println(ssid); Serial.println(ip); + printConnInfo(); + return true; } + return false; +} - static byte retries = 0; - while(!syncTime()){ //sync time with network - delay(1750); //should take about a second and a half - retries++; - if(retries > 4){ - break; //break the loop in case of no connectivity/ other error - } - } - - printRTCTimeToScreen(); //print time to screen - printRTCDateToScreen(); //print date to screen - - Serial.println(F("Setup complete")); -}; - -void loop() { - static byte oldmins; - - RTC.readTime(); - if(RTC.m != oldmins){ //run this every minute - printRTCTimeToScreen(); //update time on screen - doStuff(); //acquire data - sendDataToServer(); //send over to esp for publishing - printTempToScreen(); //update values on screen - oldmins = RTC.m; //save old value - } - else if((RTC.m == 0 || RTC.m == 30) && RTC.s == 55) { - delay(1100); //delay to prevent firing multiple times - display.refresh(); //perform a full display refresh every half hour, removes quick refresh artifacts - } - else if(RTC.m == 0 && RTC.h == 0 && RTC.s == 40){ - delay(1100); //delay to prevent firing multiple times - printRTCDateToScreen(); //change date on midnight - } - - //sync time every morning and evening. only here for safety should the device run for long periods of time without restarting - if ((RTC.h == 6 || RTC.h == 22) && (RTC.m == 00) && RTC.s == 40){ - delay(1100); //delay to prevent firing multiple times - static byte retries = 0; - while(!syncTime()){ //sync time with network - delay(1500); //should take about a second and a half - retries++; - if(retries > 4){ - break; //break the loop in case of no connectivity - } - } - } -}; - -void doStuff() { - //function to acquire and save data from sensors - dataset.temp = measureTemp(); - dataset.hum = measureHum(); - dataset.rhum = round(dataset.hum); - dataset.pres = measurePres(); - dataset.rpres = round(dataset.pres); - dataset.co2 = measureCO2(); -}; bool syncTime() { char tbuf; @@ -211,12 +299,15 @@ bool syncTime() { static bool trecvn = false; char tarry[21]; static byte j = 0; + byte dst; + + dst = checkDST(); Serial.print(F("Syncing time...\n")); - delay(50); + delay(10); Serial2.print("?ntp"); Serial2.print("\n"); - delay(25); + delay(300); while(Serial2.available() > 0 && trecvd == false){ tbuf = Serial2.read(); if(trecvn == true) { @@ -235,6 +326,7 @@ bool syncTime() { trecvn = true; } } + j = 0; if(trecvd == true){ Serial.println(tarry); char* token = strtok(tarry, "/"); @@ -249,7 +341,17 @@ bool syncTime() { RTC.dd = atoi(token); }; if(j == 3) { - RTC.h = atoi(token); + if(dst == 1) { + if(atoi(token) == 23) { + RTC.h = 0; + } + else { + RTC.h = atoi(token) + 1; + } + } + if(dst == 0) { + RTC.h = atoi(token); + } }; if(j == 4){ RTC.m = atoi(token); @@ -261,11 +363,12 @@ bool syncTime() { j++; } j = 0; - Serial.println(F("NTP sync complete")); RTC.writeTime(); + Serial.println(F("NTP sync complete")); trecvd = false; - return(true); + return true; } + return false; } void layoutScreen() { @@ -277,13 +380,13 @@ void layoutScreen() { display.firstPage(); do { display.fillScreen(GxEPD_WHITE); - display.setCursor(8, 69); + display.setCursor(8, 69+20); display.print(F("Temperature:")); - display.setCursor(8, (69 + 40)); + display.setCursor(8, (69 + 40 + 20)); display.print(F("Humidity:")); - display.setCursor(8, (69 + 80)); + display.setCursor(8, (69 + 80) + 20); display.print(F("Pressure:")); - display.setCursor(8, (69 + 120)); + display.setCursor(8, (69 + 120) + 20); display.print(F("CO2 concentration:")); display.setCursor(8, 269); display.print(F("Network info:")); @@ -319,43 +422,31 @@ void printConnInfo() { void printRTCTimeToScreen() { char delim[] = ":"; - byte hrs; - byte DST; - - DST = checkDST(); //check whether DST is active and set the var accordingly - RTC.readTime(); - hrs = RTC.h; - if(DST == 1){ - hrs = hrs + 1; - } - - display.setFont(&FreeSans18pt7b); + display.setFont(&FreeSans22pt7b); display.setTextColor(GxEPD_BLACK); int16_t tbx, tby; uint16_t tbw, tbh; display.getTextBounds(delim, 0, 0, &tbx, &tby, &tbw, &tbh); uint16_t x = ((display.width() / 2) - tbw); - uint16_t y = ((32 - tbh) / 2) - (tby - 4); + uint16_t y = ((32 - tbh) / 2) - (tby - 4) + 10; display.getTextBounds("00", 0, 0, &tbx, &tby, &tbw, &tbh); uint16_t x2 = (display.width() / 2) - 8 - tbw ; - uint16_t y2 = ((32 - tbh) / 2) - ( tby - 4); + uint16_t y2 = ((32 - tbh) / 2) - ( tby - 4) + 10; display.getTextBounds("00", 0, 0, &tbx, &tby, &tbw, &tbh); uint16_t x3 = (display.width() / 2) + 8; - - display.setPartialWindow(0, 0, display.width(), (display.height() - (display.height() - 32))); - + display.setPartialWindow(0, 0, display.width(), (display.height() - (display.height() - 32)) + 20); display.firstPage(); do { display.fillScreen(GxEPD_WHITE); display.setCursor(x, y); display.print(delim); display.setCursor(x2, y2); - if(hrs < 10) { + if(RTC.h < 10) { display.print("0"); - display.print(hrs); + display.print(RTC.h); } else { - display.print(hrs); + display.print(RTC.h); } display.setCursor(x3, y2); if(RTC.m < 10) { @@ -371,14 +462,15 @@ void printRTCTimeToScreen() { void printRTCDateToScreen() { RTC.readTime(); + display.setFont(&FreeSansBold9pt7b); display.setTextColor(GxEPD_BLACK); int16_t tbx, tby; uint16_t tbw, tbh; display.getTextBounds("00 - 00 - 0000", 0, 0, &tbx, &tby, &tbw, &tbh); uint16_t x = (display.width() / 2) - (tbw / 2) ; - uint16_t y = 48 + (tbh / 2); + uint16_t y = 48 + (tbh / 2) + 20; - display.setPartialWindow(0, 33, display.width(), 31); + display.setPartialWindow(0, 33 + 20, display.width(), 31); display.firstPage(); do { display.fillScreen(GxEPD_WHITE); @@ -404,34 +496,36 @@ void printRTCDateToScreen() { while(display.nextPage()); } -void printTempToScreen() { +void printDataToScreen() { struct data *dtsp = &dataset; - display.setFont(&FreeSansBold9pt7b); + display.setFont(&FreeSansBold11pt7b); display.setTextColor(GxEPD_BLACK); int16_t tbx, tby; uint16_t tbw, tbh; display.getTextBounds("00.0 C", 0, 0, &tbx, &tby, &tbw, &tbh); uint16_t x = ((display.width() - tbw) / 2) - tbx; - uint16_t y = (92 - tbh) - tby; + uint16_t y = (92 - tbh) - tby +20; display.getTextBounds("00 %", 0, 0, &tbx, &tby, &tbw, &tbh); uint16_t x2 = ((display.width() - tbw) / 2) - tbx; - uint16_t y2 = (132 - tbh) - tby; + uint16_t y2 = (132 - tbh) - tby + 20; display.getTextBounds("1488 hpa", 0, 0, &tbx, &tby, &tbw, &tbh); uint16_t x3 = ((display.width() - tbw) / 2) - tbx; - uint16_t y3 = ( 176 - tbh) - tby; + uint16_t y3 = ( 176 - tbh) - tby + 20; display.getTextBounds("1488 ppm", 0, 0, &tbx, &tby, &tbw, &tbh); - uint16_t y4 = ( 216 - tbh) - tby; + uint16_t y4 = ( 216 - tbh) - tby + 20; - display.setPartialWindow(0, 70, display.width(), 33); + display.setPartialWindow(0, 70 + 20, display.width(), 33); display.firstPage(); do { display.fillScreen(GxEPD_WHITE); display.setCursor(x, y); display.print(dtsp -> temp, 1); - display.print(F(" C")); + display.drawCircle(x+48,80 + 20,3,GxEPD_BLACK); + display.drawCircle(x+48,80 + 20,2,GxEPD_BLACK); //quick and dirty way to get a "degrees symbol" + display.print(F(" C")); } while (display.nextPage()); - display.setPartialWindow(0, 110, display.width(), 33); + display.setPartialWindow(0, 110 + 20, display.width(), 33); display.firstPage(); do { display.fillScreen(GxEPD_WHITE); @@ -441,7 +535,7 @@ void printTempToScreen() { } while(display.nextPage()); - display.setPartialWindow(0, 150 ,display.width(), 33); + display.setPartialWindow(0, 150 + 20,display.width(), 33); display.firstPage(); do { display.fillScreen(GxEPD_WHITE); @@ -451,7 +545,7 @@ void printTempToScreen() { } while(display.nextPage()); - display.setPartialWindow(0, 190 ,display.width(), 33); + display.setPartialWindow(0, 190 +20 ,display.width(), 33); display.firstPage(); do { display.fillScreen(GxEPD_WHITE); @@ -463,45 +557,48 @@ void printTempToScreen() { } float measureTemp() { -// BME280::TempUnit tempUnit(BME280::TempUnit_Celsius); - int temps[6]; + BME280::TempUnit tempUnit(BME280::TempUnit_Celsius); + int temps[5]; //light led while measuring digitalWrite(13, HIGH); - Serial.print(F("Measuring temperature...")); + Serial.print(F("Measuring temperature")); - for(char i = 0; i <= 5; i++){ - temps[i] = bme.readTemperature() * 100; + for(char i = 0; i < 5; i++){ + temps[i] = bme.temp() * 100; + Serial.print(F(".")); delay(1000); } float temp; - temp = (temps[1] + temps[2] + temps[3] + temps[4] + temps[5]) / 5; + temp = (temps[0] + temps[1] + temps[2] + temps[3] + temps[4]) / 5; Serial.print(F("done: ")); Serial.println(temp / 100); digitalWrite(13, LOW); - return temp / 100; + + return temp/100; } -float measureHum() { - int hums[6]; + float measureHum() { + int hums[5]; //light led while measuring digitalWrite(13, HIGH); - Serial.print(F("Measuring humidity...")); + Serial.print(F("Measuring humidity")); - for(char i = 0; i <= 5; i++){ - hums[i] = bme.readHumidity() * 100; + for(char i = 0; i < 5; i++){ + hums[i] = bme.hum() * 100; + Serial.print(F(".")); delay(1000); } float hum; - hum = (hums[1] + hums[2] + hums[3] + hums[4] + hums[5]) / 5; + hum = (hums[0] + hums[1] + hums[2] + hums[3] + hums[4]) / 5; Serial.print(F("done: ")); Serial.println(hum / 100); @@ -511,23 +608,23 @@ float measureHum() { } float measurePres() { -// BME280::PresUnit presUnit(BME280::PresUnit_hPa); - float presrs[6]; + BME280::PresUnit presUnit(BME280::PresUnit_hPa); + float presrs[5]; //light led while measuring digitalWrite(13, HIGH); - Serial.print(F("Measuring pressure...")); + Serial.print(F("Measuring pressure")); - for(char i = 0; i <= 5; i++){ - // presrs[i] = bme.pres(); - presrs[i] = bme.readPressure() / 100.0F; //returns in Pa, divide by 100 to get value in hPa + for(char i = 0; i < 5; i++){ + presrs[i] = bme.pres(BME280::PresUnit_hPa); + Serial.print(F(".")); delay(1000); } float pres; - pres = (presrs[1] + presrs[2] + presrs[3] + presrs[4] + presrs[5]) / 5; + pres = (presrs[0] + presrs[1] + presrs[2] + presrs[3] + presrs[4]) / 5; Serial.print(F("done: ")); Serial.println(pres); @@ -538,9 +635,9 @@ float measurePres() { int16_t measureCO2(){ digitalWrite(13, HIGH); - Serial.print(F("Measuring CO2...")); + Serial.print(F("Measuring CO2.....")); - int16_t co2conc = get_concentration(); + int16_t co2conc = get_co2_concentration(uint16_t(dataset.pres * 10)); Serial.print(F("done:")); Serial.println(co2conc);