#include <Adafruit_GFX.h> // Für die Grafiken
#include <SPI.h> // das wird gebraucht fürs Display
#include <Adafruit_ILI9341.h> // Für das Display
#include <Adafruit_FT6206.h> // Für den Touchscreen
#include <Arduino.h> // das wird gebraucht für FT6206
#include <Fonts/FreeSansBold9pt7b.h>
#include <InterpolationLib.h>
#include <EEPROM.h>
// The FT6206 uses hardware I2C (SCL/SDA)
Adafruit_FT6206 ctp = Adafruit_FT6206();
// \208 Pfeil rechts \201 ü \204 ä \229 dopelpfeil senkr \253 1/2
#define INTROTEXT1 "Pedis"
#define INTROTEXT2 "Wasserstand"
#define VERSIONTEXT "V0.1 05.06.2025"
#define COPYRIGHT1 "(c) Mihas 2025"
#define COPYRIGHT2 "Intelligente L\224sungen"
#define TFT_CS 15
#define TFT_DC 2
//#define TFT_RST 4
#define MESSPIN 34
/*____Calibrate Touchscreen_____*/
#define MINPRESSURE 1 // minimum required force for touch event
#define TS_MINX 370
#define TS_MINY 470
#define TS_MAXX 3700
#define TS_MAXY 3600
/*______End of Calibration______*/
#define MAINCOLOR ILI9341_BLUE
//Hauptschirm Button
#define DISPHEIGHT 320
#define DISPWIDTH 240
#define MAINBUTTONX 160
#define MAINBUTTONW 70
#define MAINBUTTONY 265
#define MAINBUTTONH 45
//Hauptschirm Messanzeigen
#define LITERANZX 60
#define LITERANZY 100
#define PROZENTANZX 80
#define PROZENTANZY 160
#define MWANZX 25
#define MWTANZY 280
//Hauptschirm Prozent-Bar
#define BARPROZX 10
#define BARPROZY 60
#define BARPROZW 20
#define BARPROZH 200
const unsigned short picHome[1024] PROGMEM={
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0xB596, 0xBDF7, 0xE73C, 0xFFDF, 0xFFDF, 0xFFDF, 0xD6BA, 0xB596, 0xD69A, 0xFFDF, 0xFFDF, // 0x0010 (16) pixels
0xFFDF, 0xFFDF, 0xCE59, 0xB5B6, 0xE71C, 0xFFDF, 0xFFDF, 0xF7BE, 0xE71C, 0xB596, 0xB596, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0020 (32) pixels
0x07FF, 0x07FF, 0xA534, 0xA534, 0xA534, 0xA534, 0xAD55, 0xE71C, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xEF5D, 0xEF5D, 0xFFDF, 0xFFDF, // 0x0030 (48) pixels
0xFFDF, 0xFFDF, 0x7C10, 0x7BF0, 0x7BEF, 0x7BEF, 0x7BF0, 0xFFDF, 0xDEDB, 0xAD55, 0xA534, 0xA534, 0xA534, 0x07FF, 0x07FF, 0x07FF, // 0x0040 (64) pixels
0x07FF, 0x9CD3, 0x9CF3, 0xBDF7, 0xD6BA, 0xBDF7, 0xAD75, 0xAD55, 0xEF7D, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, // 0x0050 (80) pixels
0x7410, 0x7410, 0x7C10, 0xAD76, 0xEF7D, 0xE73C, 0x8451, 0x7410, 0xA514, 0xAD75, 0xC638, 0xD6BA, 0xBDF7, 0x9CF3, 0x07FF, 0x07FF, // 0x0060 (96) pixels
0x8C71, 0x9492, 0xB5B6, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xF79E, 0xF79E, 0xF79E, 0xCE79, 0xBDD7, 0x6C11, 0x7410, // 0x0070 (112) pixels
0x7410, 0xA576, 0xEF5D, 0xFFDF, 0xFFDF, 0xFFDF, 0xC679, 0x7410, 0x6C11, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xB5B6, 0x9492, 0x07FF, // 0x0080 (128) pixels
0x8C51, 0x8C51, 0xC638, 0xEF5D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xD69A, 0x8C71, 0x6C31, 0x6C31, 0x6C31, 0x9D76, // 0x0090 (144) pixels
0xE73C, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xB5F7, 0x6C31, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xBDD7, 0x8C51, 0x8C51, // 0x00A0 (160) pixels
0x7BCF, 0x7BEF, 0x7BEF, 0x8430, 0xB5B6, 0xE73C, 0xEF7D, 0xEF7D, 0xEF7D, 0xCE59, 0x6432, 0x6431, 0x6431, 0x9D76, 0xDF1C, 0xF79E, // 0x00B0 (176) pixels
0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0x9D76, 0x6431, 0xDEFB, 0xAD75, 0x8430, 0x7BEF, 0x7BEF, 0x7BCF, // 0x00C0 (192) pixels
0x738E, 0xB5B6, 0xCE79, 0xCE79, 0xDEDB, 0xEF5D, 0xEF5D, 0xEF5D, 0x5C52, 0x5C52, 0x5C52, 0x9576, 0xDF1C, 0xEF7D, 0xEF7D, 0xEF7D, // 0x00D0 (208) pixels
0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xE73C, 0x74D4, 0x5C52, 0xD69A, 0xCE79, 0xCE79, 0xB5B6, 0x738E, // 0x00E0 (224) pixels
0x6B4D, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0x5453, 0x5452, 0x8D76, 0xD6FB, 0xEF5D, 0xEF5D, 0xEF5D, 0xEF5D, 0xEF5D, // 0x00F0 (240) pixels
0xEF5D, 0xEF5D, 0xEF5D, 0xEF5D, 0xEF5D, 0xEF5D, 0xEF5D, 0xEF5D, 0xEF5D, 0xE71C, 0x5C93, 0x5453, 0xE73C, 0xE73C, 0xE73C, 0x6B4D, // 0x0100 (256) pixels
0x5AEB, 0xD69A, 0xE71C, 0xE71C, 0xE71C, 0x4473, 0x4C73, 0x7D56, 0xDF3C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, // 0x0110 (272) pixels
0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xCEBA, 0x5494, 0x4473, 0xE71C, 0xCE59, 0x5AEB, // 0x0120 (288) pixels
0x528A, 0x8410, 0x8410, 0x8410, 0x4474, 0x4474, 0xAE7A, 0xFFFF, 0xFFFF, 0xE73C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, // 0x0130 (304) pixels
0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xA619, 0x4474, 0x3C94, 0x8410, 0x528A, // 0x0140 (320) pixels
0x4208, 0x8410, 0x3495, 0x3494, 0x5D36, 0xDF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, // 0x0150 (336) pixels
0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0x8597, 0x3C94, 0x8410, 0x4208, // 0x0160 (352) pixels
0x4208, 0x2CB5, 0x2C95, 0x9E5A, 0xFFFF, 0xFFFF, 0x9EDD, 0x1D59, 0xDF9E, 0xFFFF, 0xE73C, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, // 0x0170 (368) pixels
0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0x6557, 0x2CB5, 0x4208, // 0x0180 (384) pixels
0x24B6, 0x4517, 0xCF3D, 0xFFFF, 0xCF7E, 0x3DBA, 0x0518, 0x0518, 0x3DBA, 0xFFFF, 0xFFFF, 0xDEDB, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, // 0x0190 (400) pixels
0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xCE9A, 0x3CF6, 0x24B6, // 0x01A0 (416) pixels
0x1CD6, 0xF7DF, 0xF7DF, 0x6E5B, 0x0518, 0x0518, 0x0518, 0x2579, 0x6E3B, 0xCF7E, 0xFFFF, 0xF79E, 0xD69A, 0xD69A, 0xD69A, 0xD69A, // 0x01B0 (432) pixels
0xD69A, 0xD69A, 0xD69A, 0xD69A, 0xD69A, 0xD69A, 0xD69A, 0xD69A, 0xD69A, 0xD69A, 0xD69A, 0xD69A, 0xC679, 0x75B8, 0x1CD6, 0x1CD6, // 0x01C0 (448) pixels
0x14D7, 0x5DDA, 0x2518, 0x0518, 0x0518, 0x1539, 0x663B, 0x96BC, 0x96BC, 0x9EDD, 0xF7DF, 0xFFFF, 0xDEFB, 0xCE79, 0xCE79, 0xCE79, // 0x01D0 (464) pixels
0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0x8DF9, 0x2518, 0x14D7, 0x14D7, 0x4208, // 0x01E0 (480) pixels
0x0CF7, 0x0CF8, 0x0CF8, 0x0D19, 0x663B, 0x9EDD, 0x9EDD, 0x9EDD, 0x9EDD, 0x9EDD, 0xBF3E, 0xFFFF, 0xFFDF, 0xCE79, 0xCE79, 0xCE79, // 0x01F0 (496) pixels
0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xB658, 0x3558, 0x0518, 0x04F8, 0x8410, 0x4208, 0x39E7, // 0x0200 (512) pixels
0x39E7, 0x4208, 0x04F8, 0x9EDD, 0xA6FD, 0xA6FD, 0xA6FD, 0xA6FD, 0xA6FD, 0xA6FD, 0xA6FD, 0xE7BF, 0xFFFF, 0xEF7D, 0xCE79, 0xCE79, // 0x0210 (528) pixels
0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE78, 0xEF4E, 0xBF29, 0x0518, 0x0518, 0x04F8, 0x8410, 0x4208, 0x31A6, // 0x0220 (544) pixels
0x2104, 0x39E7, 0x04D8, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0x55FB, 0x9EDC, 0xAF1D, 0xAF1D, 0xB71D, 0xFFFF, 0xFFFF, 0xDEDB, 0xCE79, // 0x0230 (560) pixels
0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xCE79, 0x9E37, 0xFFC9, 0xFFE8, 0xBF2C, 0x0518, 0x0518, 0x04F8, 0x6B4D, 0x39E7, 0x1082, // 0x0240 (576) pixels
0x07FF, 0x2104, 0x04B7, 0xB71D, 0xB71D, 0xB71D, 0xB71D, 0x2D9A, 0x0518, 0x4DFA, 0xAEFD, 0xB71D, 0xCF7E, 0xFFFF, 0xFFDF, 0xCE79, // 0x0250 (592) pixels
0xCE79, 0xCE79, 0xCE79, 0xCE79, 0xD6B6, 0x3558, 0x3DB5, 0xFFEB, 0xFFEB, 0xBF2E, 0x0518, 0x0518, 0x04D8, 0x39E7, 0x1082, 0x07FF, // 0x0260 (608) pixels
0x07FF, 0x07FF, 0x0497, 0xBF3E, 0xBF3E, 0xBF3E, 0xBF3E, 0x2D9A, 0x0518, 0x0518, 0x0D39, 0x8EBC, 0xBF3E, 0xEFBF, 0xFFFF, 0xEF7D, // 0x0270 (624) pixels
0xCE79, 0xCE79, 0xCE78, 0xEF53, 0xFFEE, 0x0518, 0x3DB6, 0xFFEE, 0xFFEE, 0xBF30, 0x0518, 0x0518, 0x04B7, 0x1082, 0x07FF, 0x07FF, // 0x0280 (640) pixels
0x07FF, 0x07FF, 0x0476, 0xC75E, 0xC75E, 0xC75E, 0xC75E, 0x359A, 0x0518, 0x0518, 0x0518, 0x663B, 0xC75E, 0xCF5E, 0xFFFF, 0xFFFF, // 0x0290 (656) pixels
0xDEDB, 0x7DD9, 0xCF53, 0xFFF1, 0xFFF1, 0x0518, 0x3DB6, 0xFFF1, 0xFFF1, 0xBF33, 0x0518, 0x0518, 0x0497, 0x07FF, 0x07FF, 0x07FF, // 0x02A0 (672) pixels
0x07FF, 0x07FF, 0x0476, 0xCF7E, 0xCF7E, 0xCF7E, 0xCF7E, 0x359A, 0x0518, 0x0518, 0x0518, 0x663B, 0xCF7E, 0xCF7E, 0xDF9E, 0xAF1D, // 0x02B0 (688) pixels
0x2D79, 0x0518, 0xBF35, 0xFFF4, 0xFFF4, 0x0518, 0x3DB7, 0xFFF4, 0x9ED5, 0x1D58, 0x0518, 0x0518, 0x0497, 0x07FF, 0x07FF, 0x07FF, // 0x02C0 (704) pixels
0x07FF, 0x07FF, 0x0456, 0xD77E, 0xD77E, 0xD77E, 0xD77E, 0x359A, 0x0518, 0x0518, 0x0518, 0x6E3B, 0xD77E, 0xD77E, 0xD77E, 0x359A, // 0x02D0 (720) pixels
0x0518, 0x0518, 0xBF37, 0xFFF7, 0xFFF7, 0x0518, 0x1D58, 0x3DB8, 0x0518, 0x0518, 0x0518, 0x0518, 0x0476, 0x07FF, 0x07FF, 0x07FF, // 0x02E0 (736) pixels
0x07FF, 0x07FF, 0x0435, 0x34F7, 0xB6FD, 0xDF9E, 0xDF9E, 0x35BA, 0x0518, 0x0518, 0x0518, 0x6E5B, 0xDF9E, 0xDF9E, 0xDF9E, 0x35BA, // 0x02F0 (752) pixels
0x0518, 0x0518, 0xBF3A, 0xFFFA, 0xDF9A, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x04F8, 0x0456, 0x0435, 0x07FF, 0x07FF, 0x07FF, // 0x0300 (768) pixels
0x07FF, 0x07FF, 0x07FF, 0x0415, 0x0415, 0x6599, 0xD77E, 0x3DBA, 0x0518, 0x0518, 0x0518, 0x765B, 0xE7BF, 0xE7BF, 0xE7BF, 0x3DBA, // 0x0310 (784) pixels
0x0518, 0x0518, 0xBF3C, 0x7E7A, 0x0D38, 0x0518, 0x0518, 0x0518, 0x04F8, 0x0476, 0x0415, 0x0415, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0320 (800) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x03F5, 0x03F4, 0x1435, 0x0CB7, 0x0518, 0x0518, 0x0518, 0x765B, 0xEFBF, 0xEFBF, 0xEFBF, 0x3DBA, // 0x0330 (816) pixels
0x0518, 0x0518, 0x0D39, 0x0518, 0x0518, 0x0518, 0x0518, 0x0496, 0x03F5, 0x03F4, 0x03F5, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0340 (832) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x03D4, 0x03D4, 0x03F4, 0x04B7, 0x0518, 0x767C, 0xEFDF, 0xEFDF, 0xEFDF, 0x3DBA, // 0x0350 (848) pixels
0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x04B7, 0x0415, 0x03D4, 0x03D4, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0360 (864) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x03B4, 0x03B3, 0x0415, 0x7E5B, 0xF7DF, 0xF7DF, 0xF7DF, 0x3DBA, // 0x0370 (880) pixels
0x0518, 0x0518, 0x0518, 0x04D8, 0x0415, 0x03B3, 0x03B4, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0380 (896) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0393, 0x0393, 0x7DB9, 0xEFBE, 0xFFFF, 0x3DBA, // 0x0390 (912) pixels
0x0518, 0x04F8, 0x0456, 0x0393, 0x0393, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x03A0 (928) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0373, 0x0373, 0x13B3, 0x9E3B, 0x3DBA, // 0x03B0 (944) pixels
0x0476, 0x0393, 0x0373, 0x0373, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x03C0 (960) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0352, 0x0352, 0x0352, // 0x03D0 (976) pixels
0x0352, 0x0352, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x03E0 (992) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x03F0 (1008) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0400 (1024) pixels
};
const unsigned char picZuhausebw[] PROGMEM={
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0, 0xF0, 0xF8, 0xF8, // 0x0010 (16) pixels
0xF8, 0xF8, 0xF0, 0xE0, 0xE0, 0xC0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, // 0x0020 (32) pixels
0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0030 (48) pixels
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xE0, 0xC0, 0x80, // 0x0040 (64) pixels
0x03, 0x07, 0x07, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, // 0x0050 (80) pixels
0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x07, 0x07, 0x03, // 0x0060 (96) pixels
0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, // 0x0070 (112) pixels
0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, // 0x0080 (128) pixels
};
const unsigned short picZuhause[1024] PROGMEM={
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0030 (48) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0050 (80) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, // 0x0070 (112) pixels
0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, // 0x0090 (144) pixels
0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00B0 (176) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00D0 (208) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00F0 (240) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0110 (272) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0130 (304) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0150 (336) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0170 (368) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0190 (400) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01A0 (416) pixels
0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x01B0 (432) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, // 0x01C0 (448) pixels
0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x01D0 (464) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, // 0x01E0 (480) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x01F0 (496) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0200 (512) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0210 (528) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0220 (544) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0230 (560) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0240 (576) pixels
0xFFFF, 0x0000, 0x0000, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0250 (592) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0x0000, 0x0000, 0xFFFF, // 0x0260 (608) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0270 (624) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0290 (656) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02A0 (672) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x02B0 (688) pixels
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, // 0x02D0 (720) pixels
0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, // 0x02F0 (752) pixels
0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, // 0x0310 (784) pixels
0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, // 0x0330 (816) pixels
0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, // 0x0350 (848) pixels
0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, // 0x0370 (880) pixels
0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, // 0x0390 (912) pixels
0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03B0 (944) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03D0 (976) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) pixels
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) pixels
};
const unsigned short picSettings[1024] PROGMEM={
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x0010 (16) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x0020 (32) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x0030 (48) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x0040 (64) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0xC638, 0xC638, 0xC638, 0x001F, 0x001F, 0xC638, 0xCE59, 0xCE59, // 0x0050 (80) pixels
0xCE59, 0xCE59, 0xC638, 0x001F, 0xC638, 0xC638, 0xC638, 0xC638, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x0060 (96) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0xBDD7, 0xBDD7, 0xBDD7, 0xC618, 0xD6BA, 0xCE79, 0xBDF7, 0xBDD7, 0xCE59, 0xFFFF, 0xFFFF, // 0x0070 (112) pixels
0xFFFF, 0xFFFF, 0xC618, 0xBDD7, 0xBDF7, 0xD69A, 0xD69A, 0xBDF7, 0xBDD7, 0xBDD7, 0xBDD7, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x0080 (128) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0xB596, 0xBDF7, 0xE73C, 0xFFDF, 0xFFDF, 0xFFDF, 0xD6BA, 0xB596, 0xD69A, 0xFFDF, 0xFFDF, // 0x0090 (144) pixels
0xFFDF, 0xFFDF, 0xCE59, 0xB5B6, 0xE71C, 0xFFDF, 0xFFDF, 0xF7BE, 0xE71C, 0xB596, 0xB596, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x00A0 (160) pixels
0x001F, 0x001F, 0xA534, 0xA534, 0xA534, 0xA534, 0xAD55, 0xE71C, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xEF5D, 0xEF5D, 0xFFDF, 0xFFDF, // 0x00B0 (176) pixels
0xFFDF, 0xFFDF, 0xE73C, 0xEF5D, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xDEDB, 0xAD55, 0xA534, 0xA534, 0xA534, 0x001F, 0x001F, 0x001F, // 0x00C0 (192) pixels
0x001F, 0x9CD3, 0x9CF3, 0xBDF7, 0xD6BA, 0xBDF7, 0xAD75, 0xAD55, 0xEF7D, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, // 0x00D0 (208) pixels
0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xEF5D, 0xA514, 0xAD75, 0xC638, 0xD6BA, 0xBDF7, 0x9CF3, 0x001F, 0x001F, // 0x00E0 (224) pixels
0x8C71, 0x9492, 0xB5B6, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xF79E, 0xF79E, 0xF79E, 0xCE79, 0xBDD7, 0x9CF3, 0x9CF3, // 0x00F0 (240) pixels
0x9CF3, 0x9CF3, 0xBDD7, 0xDEFB, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xB5B6, 0x9492, 0x001F, // 0x0100 (256) pixels
0x8C51, 0x8C51, 0xC638, 0xEF5D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xD69A, 0x8C71, 0x8410, 0x8410, 0x8410, 0x8410, // 0x0110 (272) pixels
0x8410, 0x8410, 0x8410, 0x8410, 0x9CD3, 0xDEDB, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xBDD7, 0x8C51, 0x8C51, // 0x0120 (288) pixels
0x7BCF, 0x7BEF, 0x7BEF, 0x8430, 0xB5B6, 0xE73C, 0xEF7D, 0xEF7D, 0xEF7D, 0xCE59, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, // 0x0130 (304) pixels
0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8430, 0xDEDB, 0xEF7D, 0xEF7D, 0xEF7D, 0xDEFB, 0xAD75, 0x8430, 0x7BEF, 0x7BEF, 0x7BCF, // 0x0140 (320) pixels
0x738E, 0xB5B6, 0xCE79, 0xCE79, 0xDEDB, 0xEF5D, 0xEF5D, 0xEF5D, 0xEF5D, 0x9CD3, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, // 0x0150 (336) pixels
0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0xA514, 0xEF5D, 0xEF5D, 0xEF5D, 0xEF5D, 0xD69A, 0xCE79, 0xCE79, 0xB5B6, 0x738E, // 0x0160 (352) pixels
0x6B4D, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0x8C71, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, // 0x0170 (368) pixels
0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x9CD3, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0xE73C, 0x6B4D, // 0x0180 (384) pixels
0x5AEB, 0xD69A, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xAD55, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, // 0x0190 (400) pixels
0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0xBDF7, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xCE59, 0x5AEB, // 0x01A0 (416) pixels
0x528A, 0x8410, 0x8410, 0x8410, 0x9CF3, 0xDEDB, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xA514, 0x8410, 0x6B6D, 0x630C, 0x528A, 0x528A, // 0x01B0 (432) pixels
0x528A, 0x528A, 0x630C, 0x73AE, 0x8410, 0xAD55, 0xE71C, 0xE71C, 0xE71C, 0xE71C, 0xD6BA, 0x94B2, 0x8410, 0x8410, 0x8410, 0x528A, // 0x01C0 (448) pixels
0x4208, 0x8410, 0xA514, 0xCE59, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xBDD7, 0x738E, 0x4A49, 0x4208, 0x4208, // 0x01D0 (464) pixels
0x4208, 0x4208, 0x4A49, 0x7BCF, 0xBDF7, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEFB, 0xC638, 0x94B2, 0x8410, 0x4208, // 0x01E0 (480) pixels
0x4208, 0x8410, 0xBDD7, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xC638, 0xB596, // 0x01F0 (496) pixels
0xB596, 0xD69A, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xDEDB, 0xBDD7, 0x8410, 0x4208, // 0x0200 (512) pixels
0x4208, 0x8410, 0x8410, 0xB5B6, 0xCE79, 0xB5B6, 0xA514, 0x94B2, 0xCE79, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, // 0x0210 (528) pixels
0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xC638, 0x9492, 0xA534, 0xBDF7, 0xCE79, 0xB5B6, 0x8410, 0x8410, 0x4208, // 0x0220 (544) pixels
0x4208, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0xAD75, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xCE79, 0xCE79, 0xD6BA, 0xD6BA, // 0x0230 (560) pixels
0xD6BA, 0xD6BA, 0xCE59, 0xCE79, 0xD6BA, 0xD6BA, 0xD6BA, 0xD6BA, 0xA534, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x4208, // 0x0240 (576) pixels
0x4208, 0x738E, 0x8410, 0x8410, 0x8410, 0x8410, 0x8C51, 0xCE79, 0xD69A, 0xD69A, 0xD69A, 0xBDF7, 0x8C51, 0xAD55, 0xD69A, 0xD69A, // 0x0250 (592) pixels
0xD69A, 0xD69A, 0x9CF3, 0x8C71, 0xC618, 0xD69A, 0xD69A, 0xD69A, 0xC638, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x738E, 0x4208, // 0x0260 (608) pixels
0x39E7, 0x4208, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x9CD3, 0xB596, 0xA534, 0x8410, 0x8410, 0x9492, 0xCE79, 0xCE79, // 0x0270 (624) pixels
0xCE79, 0xCE79, 0x8C51, 0x8410, 0x8430, 0xAD75, 0xAD75, 0x8C71, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x4208, 0x39E7, // 0x0280 (640) pixels
0x39E7, 0x4208, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x9492, 0x9492, // 0x0290 (656) pixels
0x9492, 0x9492, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x4208, 0x31A6, // 0x02A0 (672) pixels
0x2104, 0x39E7, 0x6B4D, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, // 0x02B0 (688) pixels
0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x6B4D, 0x39E7, 0x1082, // 0x02C0 (704) pixels
0x001F, 0x2104, 0x39E7, 0x6B4D, 0x7BCF, 0x6B4D, 0x632C, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, // 0x02D0 (720) pixels
0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x5AEB, 0x6B6D, 0x7BCF, 0x6B4D, 0x39E7, 0x1082, 0x001F, // 0x02E0 (736) pixels
0x001F, 0x001F, 0x2104, 0x39E7, 0x39E7, 0x39E7, 0x528A, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x7BEF, 0x7BEF, 0x8410, 0x8410, // 0x02F0 (752) pixels
0x8410, 0x8410, 0x7BCF, 0x7BEF, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x4208, 0x39E7, 0x39E7, 0x39E7, 0x1082, 0x001F, 0x001F, // 0x0300 (768) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x39E7, 0x4A69, 0x7BEF, 0x8410, 0x8410, 0x8410, 0x738E, 0x4A49, 0x630C, 0x8410, 0x8410, // 0x0310 (784) pixels
0x8410, 0x8410, 0x5ACB, 0x4A69, 0x73AE, 0x8410, 0x8410, 0x8410, 0x7BCF, 0x4208, 0x39E7, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x0320 (800) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x2945, 0x39C7, 0x39E7, 0x52AA, 0x6B4D, 0x630C, 0x39E7, 0x31A6, 0x528A, 0x8410, 0x8410, // 0x0330 (816) pixels
0x8410, 0x8410, 0x4A49, 0x31A6, 0x4208, 0x632C, 0x632C, 0x4A69, 0x39E7, 0x39C7, 0x2945, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x0340 (832) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x2965, 0x39C7, 0x39C7, 0x1082, 0x001F, 0x4208, 0x528A, 0x528A, // 0x0350 (848) pixels
0x528A, 0x528A, 0x39E7, 0x001F, 0x18C3, 0x39C7, 0x39C7, 0x2965, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x0360 (864) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x2104, 0x2945, 0x2945, // 0x0370 (880) pixels
0x2945, 0x2945, 0x2104, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x0380 (896) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x0390 (912) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x03A0 (928) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x03B0 (944) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x03C0 (960) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x03D0 (976) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x03E0 (992) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x03F0 (1008) pixels
0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, 0x001F, // 0x0400 (1024) pixels
};
const unsigned short picUp[1024] PROGMEM={
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0010 (16) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0020 (32) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0332, 0x0332, // 0x0030 (48) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0040 (64) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0332, 0x0332, 0x1BD4, 0x1BD4, // 0x0050 (80) pixels
0x0332, 0x0332, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0060 (96) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0332, 0x0332, 0x3476, 0x7E5B, 0x867C, // 0x0070 (112) pixels
0x3476, 0x0332, 0x0332, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0080 (128) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0332, 0x0332, 0x4D17, 0x867C, 0x867C, 0x867C, // 0x0090 (144) pixels
0x867C, 0x5558, 0x0B73, 0x0332, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x00A0 (160) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0332, 0x0B72, 0x65B9, 0x867C, 0x867C, 0x867C, 0x867C, // 0x00B0 (176) pixels
0x867C, 0x867C, 0x6DDA, 0x13B3, 0x0332, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x00C0 (192) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0332, 0x0332, 0x1BD4, 0x7E5B, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, // 0x00D0 (208) pixels
0x867C, 0x867C, 0x867C, 0x7E5B, 0x2414, 0x0332, 0x0332, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x00E0 (224) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0332, 0x0332, 0x3476, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, // 0x00F0 (240) pixels
0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x3CB6, 0x0332, 0x0332, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0100 (256) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0332, 0x0332, 0x5558, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, // 0x0110 (272) pixels
0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x5558, 0x0B73, 0x0332, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0120 (288) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0332, 0x0B73, 0x6DDA, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, // 0x0130 (304) pixels
0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x867C, 0x6DDA, 0x13B3, 0x0332, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0140 (320) pixels
0x07FF, 0x07FF, 0x0332, 0x0332, 0x1BD4, 0x867B, 0x8E9C, 0x8E9C, 0x8E9C, 0x8E9C, 0x8E9C, 0x8E9C, 0x8E9C, 0x8E9C, 0x8E9C, 0x8E9C, // 0x0150 (336) pixels
0x8E9C, 0x8E9C, 0x8E9C, 0x8E9C, 0x8E9C, 0x8E9C, 0x8E9C, 0x8E9C, 0x867B, 0x2414, 0x0332, 0x0332, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0160 (352) pixels
0x07FF, 0x0332, 0x0332, 0x3C96, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, // 0x0170 (368) pixels
0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x96BC, 0x4CF7, 0x0332, 0x0332, 0x07FF, 0x07FF, 0x07FF, // 0x0180 (384) pixels
0x0332, 0x0B73, 0x6599, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, // 0x0190 (400) pixels
0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0xA6DD, 0x75B9, 0x0B73, 0x0332, 0x07FF, 0x07FF, // 0x01A0 (416) pixels
0x0332, 0x8E5B, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, // 0x01B0 (432) pixels
0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0xAF1D, 0x8E5B, 0x1BB3, 0x0332, 0x07FF, // 0x01C0 (448) pixels
0x0332, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0xBF3D, 0xBF3D, 0xBF3D, 0xBF3D, 0xBF3D, 0xBF3D, 0xBF3D, 0xBF3D, // 0x01D0 (464) pixels
0xBF3D, 0xBF3D, 0xBF3D, 0xBF3D, 0xBF3D, 0xBF3D, 0x0372, 0x03B4, 0x03F5, 0x0456, 0x0497, 0x04F8, 0x0518, 0x03B3, 0x0332, 0x07FF, // 0x01E0 (480) pixels
0x0332, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0xC75E, 0xC75E, 0xC75E, 0xC75E, 0xC75E, 0xC75E, 0xC75E, 0xC75E, // 0x01F0 (496) pixels
0xC75E, 0xC75E, 0xC75E, 0xC75E, 0xC75E, 0xC75E, 0x0372, 0x03B4, 0x03F5, 0x0456, 0x0497, 0x04F8, 0x0518, 0x03B3, 0x0332, 0x07FF, // 0x0200 (512) pixels
0x0332, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0xD77E, 0xD77E, 0xD77E, 0xD77E, 0xD77E, 0xD77E, 0xD77E, 0xD77E, // 0x0210 (528) pixels
0xD77E, 0xD77E, 0xD77E, 0xD77E, 0xD77E, 0xD77E, 0x0372, 0x03B4, 0x03F5, 0x0456, 0x0497, 0x04F8, 0x0518, 0x03B3, 0x0332, 0x07FF, // 0x0220 (544) pixels
0x0332, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0xDF9E, 0xDF9E, 0xDF9E, 0xDF9E, 0xDF9E, 0xDF9E, 0xDF9E, 0xDF9E, // 0x0230 (560) pixels
0xDF9E, 0xDF9E, 0xDF9E, 0xDF9E, 0xDF9E, 0xDF9E, 0x0372, 0x03B4, 0x03F5, 0x0456, 0x0497, 0x04F8, 0x0518, 0x03B3, 0x0332, 0x07FF, // 0x0240 (576) pixels
0x0332, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0xEFBF, 0xEFBF, 0xEFBF, 0xEFBF, 0xEFBF, 0xEFBF, 0xEFBF, 0xEFBF, // 0x0250 (592) pixels
0xEFBF, 0xEFBF, 0xEFBF, 0xEFBF, 0xEFBF, 0xEFBF, 0x0372, 0x03B4, 0x03F5, 0x0456, 0x0497, 0x04F8, 0x0518, 0x03B3, 0x0332, 0x07FF, // 0x0260 (608) pixels
0x0332, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0xF7FF, 0xF7FF, 0xF7FF, 0xF7FF, 0xF7FF, 0xF7FF, 0xF7FF, 0xF7FF, // 0x0270 (624) pixels
0xF7FF, 0xF7FF, 0xF7FF, 0xF7FF, 0xF7FF, 0xF7FF, 0x0372, 0x03B4, 0x03F5, 0x0456, 0x0497, 0x04F8, 0x0518, 0x03B3, 0x0332, 0x07FF, // 0x0280 (640) pixels
0x0331, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, // 0x0290 (656) pixels
0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0497, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x020B, 0x07FF, // 0x02A0 (672) pixels
0x07FF, 0x020B, 0x020B, 0x020B, 0x020B, 0x020B, 0x020B, 0x0332, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, // 0x02B0 (688) pixels
0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x04B7, 0x0332, 0x028E, 0x020B, 0x020B, 0x020B, 0x020B, 0x020B, 0x00C4, 0x07FF, 0x07FF, // 0x02C0 (704) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0332, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, // 0x02D0 (720) pixels
0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0332, 0x020B, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x02E0 (736) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0332, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, // 0x02F0 (752) pixels
0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0332, 0x0332, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0300 (768) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0332, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, // 0x0310 (784) pixels
0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0332, 0x0332, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0320 (800) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0332, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, // 0x0330 (816) pixels
0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0518, 0x0332, 0x0332, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0340 (832) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x0311, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, // 0x0350 (848) pixels
0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x0332, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0360 (864) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0370 (880) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0380 (896) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0390 (912) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x03A0 (928) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x03B0 (944) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x03C0 (960) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x03D0 (976) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x03E0 (992) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x03F0 (1008) pixels
0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, 0x07FF, // 0x0400 (1024) pixels
};
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC /*, TFT_RST*/);
const uint16_t numReadings = 10;
uint16_t iaReadings[numReadings]; // the iaReadings from the analog input
uint16_t readIndex; // the index of the current reading
long total; // the running total
long average; // the average
//Zahlen-Eingabetastatur
String symbol[4][4] = {
{ "7", "8", "9" },
{ "4", "5", "6" },
{ "1", "2", "3" },
{ "C", "0", "OK" }
};
String saEinst[7] = {
"max. Volumen",
"Warnung % gelb",
"Alarm % rot",
"",
"Liter Vorg. Kalib.",
"Messwerte erfassen",
"Einst. r\201cksetzen"};
String saEinstKalLiter[7] = { //Texte Einst. Kalibrierung Liter-Schirm
"min-Wert Liter",
"2. Wert Liter",
"3. Wert Liter",
"4. Wert Liter",
"5. Wert Liter",
"6. Wert Liter",
"7. Wert Liter"};
//iaEE.. nur temporär, bis es EEprom gibt, danach lesen aus EEprom
int16_t iaEEpromEinst[8] = {
200, 30, 15, 0}; //Volumen, Warnung, Alarm, Fehlermeldung
int16_t iaEEpromKalibLiter[10] = {
5, 55, 85, 100, 0, 0, 0, 0, 0, 0};
int16_t iaEEpromKalibMessw[10] = {
0, 600, 800, 1000, 0, 0, 0, 0, 7689, 9754};
unsigned long lEEpromCRC = 3603740444L;
// Arbeitswerte, aus EEprom kopiert
int16_t iaEinst[8];
#define DISPNORM 0
#define DISPEINST 1
#define DISPKALLITER 3
#define DISPKALMESSWERT 4
#define DISPTAST 5
#define DISPTASTL 6
byte DisplayMode;
// Interpolation xValues: Messwerte yValues: Liter
int16_t numValues;
double xValues[10]; // = { 0, 600, 800, 1000, 400, 600, 700, 800, 900, 1000 };
double yValues[10]; // = { 5, 55, 85, 100, 25, 30, 40, 50, 70, 100 };
int16_t intMesswert;
int16_t intAltMesswert;
float fLiter;
float fProzent;
bool bTrigAnzeigeMesswerte;
byte byEinstEdit; //Nummer der editierten Einstellung (1..7) 0: Kopfzeile (ESC)
//Touch Tastatur-Eingabe
long Number;
bool result = false;
bool cancel = false;
bool Touch_pressed = false;
TS_Point p; //Koordinaten
int16_t X,Y; //Touch Koordinaten
void setup() {
Serial.begin(115200);
// Serial.println("Cap Touch Paint!");
pinMode(MESSPIN, INPUT);
Wire.setPins(21, 22); // redefine first I2C port to be on pins 21/22
tft.begin();
if (! ctp.begin(40)) { // pass in 'sensitivity' coefficient
Serial.println("Couldn't start FT6206 touchscreen controller");
while (1);
}
// Serial.println("Capacitive touchscreen started");
getEEpromValues(); //Transfer auf lokale Variablen
tft.setRotation(0);
SchirmIntro();
delay(2000);
unsigned long crcEEdata=EEpromDatagetCRC();//berechnetes CRC aus EEprom-Daten
if (crcEEdata != lEEpromCRC) Serial.println("Fehler CRC: crcEEdata: " + String(crcEEdata));
else Serial.println("CRC check OK");
// SchirmFehler("","","","","");
// delay(2000);
DisplayMode = DISPNORM;
SchirmBasis();
}
void loop(){
int16_t value = analogRead(MESSPIN);
intAltMesswert = intMesswert;
// intMesswert = smoothAnalog(value);
// Serial.println("value, intMW: " + String(value) + " , " + String(intMesswert));
intMesswert = value;
//Aktualisierung Messwerte bei Änderung oder Umschaltung auf Basis-Schirm triggern
if (DisplayMode == DISPNORM) {
if ((intAltMesswert != intMesswert) || bTrigAnzeigeMesswerte) {
drawLiter();
drawMesswert();
bTrigAnzeigeMesswerte = false;
}
}
if (DisplayMode == DISPKALMESSWERT && intAltMesswert != intMesswert) {
// Serial.println("Akt. kopfzeile " + String(intMesswert));
drawKopfzeileKalibMW();
}
// check, ob Touchscreen betätigt
if (Touch_Event()) {
// Serial.println("Loop: TE true");
X = p.x; Y = p.y;
Touch_pressed = true;
Serial.print("Loop Touch X,Y:("); Serial.print(X);
Serial.print(", "); Serial.print(Y);
Serial.println(")");
}
else {
Touch_pressed = false;
}
//Aktionen auf Touchscreen
if (Touch_pressed) {
switch (DisplayMode){
case DISPNORM : {
int16_t xmax = DISPWIDTH - MAINBUTTONX;
int16_t xmin = xmax - MAINBUTTONW;
int16_t ymax = DISPHEIGHT - MAINBUTTONY;
int16_t ymin = ymax - MAINBUTTONH;
if (X>xmin && X<xmax && Y>ymin && Y<ymax) {
DisplayMode = DISPEINST;
SchirmEinst();
}
break;
}
case DISPEINST: {byEinstEdit = DetectEinst();
Serial.print("gefunden: Einst.");Serial.println(byEinstEdit);
switch (byEinstEdit){
case 0 : { DisplayMode = DISPNORM; SchirmBasis(); break;}
case 1 ... 4: { DisplayMode = DISPTAST; Number = iaEinst[byEinstEdit-1];
SchirmTastatur(saEinst[byEinstEdit-1]); break;}
case 5 : { DisplayMode = DISPKALLITER; SchirmEinstLiter(); break;}
case 6 : { DisplayMode = DISPKALMESSWERT; SchirmKalibMesswerte(); break;}
}
break;
}
case DISPKALLITER : {byEinstEdit = DetectEinst();
Serial.print("gefunden: EinstKLiter.");Serial.println(byEinstEdit);
switch (byEinstEdit){
case 0 : { DisplayMode = DISPEINST; SchirmEinst(); break;}
case 1 ... 7 : { DisplayMode = DISPTASTL; Number = yValues[byEinstEdit-1];
SchirmTastatur(saEinstKalLiter[byEinstEdit-1]); break;}
}
break;
}
case DISPKALMESSWERT : {byEinstEdit = DetectEinst();
Serial.print("gefunden: KalMesswert: ");Serial.println(byEinstEdit);
Serial.print("xValues v: ");
for (int16_t i=0; i<7; i++) {Serial.print(xValues[i]); Serial.print(", ");}
Serial.println();
switch (byEinstEdit){
case 0 : { DisplayMode = DISPEINST; SchirmEinst(); break;}
case 1 ... 7 : {
if (byEinstEdit <= numValues) {
xValues[byEinstEdit-1] = intMesswert;
SchirmKalibMesswerte();
}
break;
}
}
Serial.print("xValues n: ");
for (int16_t i=0; i<7; i++) {Serial.print(xValues[i]); Serial.print(", ");}
Serial.println();
break;
}
case DISPTAST : {
DetectButtons();
DisplayResult(saEinst[byEinstEdit-1]);
if (cancel){DisplayMode = DISPNORM; SchirmBasis();
Serial.println("DISPTAST: cancel == true"); }
if (result) {
iaEinst[byEinstEdit-1] = Number;
DisplayMode = DISPEINST; SchirmEinst();
}
break;
}
case DISPTASTL : {
DetectButtons();
DisplayResult(saEinstKalLiter[byEinstEdit-1]);
if (cancel) {DisplayMode = DISPNORM; SchirmBasis();
Serial.println("DISPTASTL: cancel == true"); }
if (result) {
yValues[byEinstEdit-1] = Number;
if (Number == 0) xValues[byEinstEdit-1] = 0; //auch Messwert löschen
calcNumValues();
Serial.print("yValues: ");
for (int16_t i=0; i<7; i++) {Serial.print(yValues[i]); Serial.print(", ");}
Serial.println();
DisplayMode = DISPKALLITER; SchirmEinstLiter();
}
break;
}
}
}
delay(1);
}
void SchirmTastatur(String sBoxText)
{
//clear screen black
tft.fillScreen(ILI9341_BLACK);
// tft.setFont(0);
//Draw the Result Box
tft.fillRect(0, 0, 240, 80, ILI9341_CYAN);
DisplayResult(sBoxText);
//Draw C and OK field
tft.fillRect (0,260,80,60,ILI9341_RED);
tft.fillRect (160,260,80,60,ILI9341_GREEN);
//Draw Horizontal Lines
for (int16_t h=80; h<=320; h+=60)
tft.drawFastHLine(0, h, 240, ILI9341_WHITE);
//Draw Vertical Lines
for (int16_t v=80; v<=240; v+=80)
tft.drawFastVLine(v, 80, 240, ILI9341_WHITE);
//Display keypad lables
for (int16_t j=0;j<4;j++) {
for (int16_t i=0;i<3;i++) {
tft.setCursor(32 + (80*i), 100 + (60*j));
if ((j==3) && (i==2)) tft.setCursor(24 + (80*i), 100 + (60*j)); //OK button
tft.setTextSize(3);
tft.setTextColor(ILI9341_WHITE);
tft.println(symbol[j][i]);
}
}
}
byte DetectEinst() {
byte einstel=8; byte found = 0;
for (int16_t checky = 0; checky <280; checky+=40){
// Serial.print("checky: ");Serial.print(checky);
einstel -=1;
// Serial.print(" einstel: ");Serial.println(einstel);
if (Y >checky && Y<checky+40) { found = einstel;
Serial.print("DetectEinst: Erkannt: Einst.");Serial.println(einstel); }
}
return (found);
}
void DetectButtons()
{
// Serial.print("button detected (");Serial.print(X);Serial.print(", ");
// Serial.print(Y);Serial.println("");
cancel = false; result = false;
if (X>160) //Buttons C,1,4,7
{
if (Y<60) //If cancel Button is pressed
{ Serial.println ("Button Cancel");
if (Number == 0) {
Serial.println("TastEnde");
cancel = true;
}
Number=0; result=false;
}
if (Y>60 && Y<120) //If Button 1 is pressed
{Serial.println ("Button 1");
//Button_ACK_Tone();
if (Number==0)
Number=1;
else
Number = (Number*10) + 1; //Pressed twice
}
if (Y>120 && Y<180) //If Button 4 is pressed
{Serial.println ("Button 4");
//Button_ACK_Tone();
if (Number==0)
Number=4;
else
Number = (Number*10) + 4; //Pressed twice
}
if (Y>180 && Y<240) //If Button 7 is pressed
{Serial.println ("Button 7");
//Button_ACK_Tone();
if (Number==0)
Number=7;
else
Number = (Number*10) + 7; //Pressed twice
}
}
if (X<160 && X>80) //Buttons 0, 2, 5, 8
{
if (Y<60)
{Serial.println ("Button 0"); //Button 0 is Pressed
//Button_ACK_Tone();
if (Number==0)
Number=0;
else
Number = (Number*10) + 0; //Pressed twice
}
if (Y>60 && Y<120)
{Serial.println ("Button 2");
//Button_ACK_Tone();
if (Number==0)
Number=2;
else
Number = (Number*10) + 2; //Pressed twice
}
if (Y>120 && Y<180)
{Serial.println ("Button 5");
//Button_ACK_Tone();
if (Number==0)
Number=5;
else
Number = (Number*10) + 5; //Pressed twic
}
if (Y>180 && Y<240)
{Serial.println ("Button 8");
//Button_ACK_Tone();
if (Number==0)
Number=8;
else
Number = (Number*10) + 8; //Pressed twic
}
}
if (X>0 && X<80) //Buttons Ok, 3, 6, 9
{
if (Y<60)
{Serial.println ("Button OK");
result = true;
}
if (Y>60 && Y<120)
{Serial.println ("Button 3");
//Button_ACK_Tone();
if (Number==0)
Number=3;
else
Number = (Number*10) + 3; //Pressed twice
}
if (Y>120 && Y<180)
{Serial.println ("Button 6");
//Button_ACK_Tone();
if (Number==0)
Number=6;
else
Number = (Number*10) + 6; //Pressed twice
}
if (Y>180 && Y<240)
{Serial.println ("Button 9");
//Button_ACK_Tone();
if (Number==0)
Number=9;
else
Number = (Number*10) + 9; //Pressed twice
}
}
Serial.println(Number);
}
/********************************************************************//**
* @brief shows the entered numbers
* @param[in] None
* @return None
*********************************************************************/
void DisplayResult(String sBoxText)
{
tft.setCursor(2, 2);
tft.setTextSize(2);
tft.setTextColor(ILI9341_BLACK,ILI9341_CYAN);
tft.println(sBoxText);
tft.setCursor(10, 35);
tft.setTextSize(4);
tft.setTextColor(ILI9341_BLACK,ILI9341_CYAN);
//Serial.print("DisplayResult: Number: "); Serial.println(Number);
if (Number == 0) tft.println("0 ");
else tft.println(Number); //update new value
}
/********************************************************************//**
* @brief detects a touch event and converts touch data
* @param[in] None
* @return boolean (true = touch pressed, false = touch unpressed)
*********************************************************************/
bool Touch_Event() {
// Serial.println("TouchEventStart");
p = ctp.getPoint();
delay(200);
// Serial.println(p.z);
if (p.z > 0) {
// Serial.println("Touch Event");
return true;
}
return false;
}
void SchirmBasis() {
// Serial.println("start SchirmBasis");
tft.fillScreen(MAINCOLOR);
tft.fillRoundRect(MAINBUTTONX,MAINBUTTONY,MAINBUTTONW,MAINBUTTONH,15, ILI9341_YELLOW ); // Button
tft.drawRoundRect(MAINBUTTONX-1,MAINBUTTONY-1,MAINBUTTONW+2,MAINBUTTONH+2,15,ILI9341_BLACK ); // Button
// tft.drawRGBBitmap(MAINBUTTONX,MAINBUTTONY, picTools,50,47);
//* tft.drawRGBBitmap(MAINBUTTONX+20,MAINBUTTONY+7, picSettings,32,32);
// tft.drawRGBBitmap(20,80, Zihatec_Logo,200,60);
tft.setTextSize(2);
tft.setTextColor(ILI9341_WHITE,MAINCOLOR);
// tft.setFont(&FreeSansBold9pt7b);
tft.setCursor(20, 20);
tft.println("Pedis Wasserstand");
tft.drawRect(BARPROZX-1,BARPROZY-1,BARPROZW+2,BARPROZH+2,ILI9341_YELLOW ); //Prozent-Bar Rand
if (iaEinst[3] > 0) { //Fehleranzeige
uint16_t fx; uint16_t fy; uint16_t fw; uint16_t fh;
fx=34; fy=60; fw=DISPWIDTH-2*fx; fh=DISPHEIGHT-2*fy;
tft.fillRect(fx, fy, fw, fh, ILI9341_RED);
tft.setTextSize(2);
tft.setTextColor(ILI9341_WHITE);
// tft.setFont(&FreeSansBold9pt7b);
printTftZentriert(fx,80,fw, "Fehler beim");
printTftZentriert(fx,120,fw, "Laden der");
printTftZentriert(fx,160,fw, "Einstellungen");
printTftZentriert(fx,200,fw, "Bitte pr\201fen");
}
else {
bTrigAnzeigeMesswerte = true; //Anzeige Messwert Triggern
}
}
void calcLiter() {
fLiter = Interpolation::Linear(xValues, yValues, numValues, intMesswert, false);
//Serial.println(Interpolation::Linear(xValues, yValues, numValues, intMesswert, false));
//Serial.print("yValues: ");
//for (int16_t i=0; i<10; i++){
// Serial.print(yValues[i],2);Serial.print(" ");}
Serial.println();
Serial.print ("numValues, intMesswert: ");
Serial.print(numValues);Serial.print(" , "); Serial.println(intMesswert);
Serial.print ("Liter: ");
Serial.println(fLiter,2);
fProzent = fLiter / iaEinst[0] * 100;
//Serial.println(int16_t(Liter),DEC);
}
void drawLiter() {
calcLiter();
//Prozent-Bar
int16_t height = fProzent / 100* BARPROZH;
if (height > BARPROZH) height = BARPROZH;
int16_t top = BARPROZY + BARPROZH - height;
tft.fillRect(BARPROZX,BARPROZY,BARPROZW,BARPROZH,MAINCOLOR );
uint16_t Farbe = ILI9341_GREEN;
if (fProzent <= iaEinst[1]) Farbe = ILI9341_YELLOW;
if (fProzent <= iaEinst[2]) Farbe = ILI9341_RED;
tft.fillRect(BARPROZX,top,BARPROZW,height,Farbe);
if (iaEinst[3] > 0) return;
tft.setTextSize(4);
tft.fillRect(LITERANZX-2, LITERANZY-5, DISPWIDTH-LITERANZX, 125, MAINCOLOR); //löschen, Liter + %
tft.setCursor(LITERANZX, LITERANZY);
tft.setTextColor(ILI9341_WHITE,MAINCOLOR);
// tft.print(String(fLiter,1) + " l");
printTftRechtsBuendig(225,LITERANZY,String(fLiter,1) + " l");
tft.setTextSize(3);
tft.setCursor(PROZENTANZX, PROZENTANZY);
// tft.print(String(fProzent,1) + " %");
printTftRechtsBuendig(220,PROZENTANZY,String(fProzent,1) + " %");
}
void drawMesswert() {
tft.setTextSize(2);
tft.fillRect(MWANZX-3, MWTANZY-3, 110, 45, MAINCOLOR);
tft.setCursor(MWANZX, MWTANZY);
tft.setTextColor(ILI9341_WHITE,MAINCOLOR);
tft.print("MW: " + String(intMesswert));
}
void SchirmIntro()
{
tft.fillScreen(ILI9341_YELLOW);
// tft.drawRGBBitmap(20,80, picTools,50,47);
tft.setTextSize(3);
tft.setTextColor(MAINCOLOR);
// tft.setFont(&FreeSansBold9pt7b);
printTftZentriert(0,50,DISPWIDTH, INTROTEXT1);
printTftZentriert(0,100,DISPWIDTH, INTROTEXT2);
tft.setTextSize(2);
tft.setTextColor(ILI9341_BLACK);
printTftZentriert(0,150,DISPWIDTH, VERSIONTEXT);
tft.setTextSize(1);
printTftZentriert(0,220,DISPWIDTH, COPYRIGHT1);
printTftZentriert(0,235,DISPWIDTH, COPYRIGHT2);
}
void SchirmFehler(String txt1, String txt2,String txt3,String txt4,String txt5)
{
uint16_t x; uint16_t y; uint16_t w; uint16_t h;
x=30; y=50; w=DISPWIDTH-2*x; h=DISPHEIGHT-2*y;
tft.fillScreen(MAINCOLOR);
tft.fillRect(x, y, w, h, ILI9341_RED);
tft.setTextSize(3);
tft.setTextColor(ILI9341_WHITE);
// tft.setFont(&FreeSansBold9pt7b);
printTftZentriert(x,100,w, INTROTEXT1);
tft.setTextSize(2);
printTftZentriert(x,140,w, INTROTEXT2);
// Serial.print("x: " +String(x)+ " w: " + String(w));
// Serial.println();
}
void SchirmEinst() {
// Serial.println("start SchirmEinst");
tft.fillScreen(MAINCOLOR);
// tft.setFont(0);
//Titel
tft.fillRect(0, 0, 240, 40, ILI9341_CYAN);
// tft.drawRGBBitmap(200,4, picHome,32,32);
// tft.drawRGBBitmap(200,4, picZuhause,32,32);
//* tft.drawRGBBitmap(205,5, picUp,32,32);
// tft.drawBitmap(200,4, picZuhausebw,32,32,ILI9341_BLACK);
tft.setTextSize(2);
tft.setTextColor(ILI9341_BLACK,ILI9341_CYAN);
tft.setCursor(10, 10);
tft.println("Einstellungen");
//Draw Horizontal Lines
for (int16_t h=80; h<=320; h+=40)
tft.drawFastHLine(0, h, 240, ILI9341_WHITE);
//Anzeige Einstellungen
String sString1;
tft.setTextColor(ILI9341_WHITE,MAINCOLOR);
for (byte Einst = 0; Einst < 8; Einst++ ){
tft.setCursor(10, 52 + Einst*40);
sString1 = saEinst[Einst];
// Serial.print(String(Einst)+ " " + String(iaEinst[Einst]) + " - ");
if (Einst < 4) sString1 = sString1 + " " + String(iaEinst[Einst]);
tft.print(sString1);
}
}
void SchirmEinstLiter() {
// Serial.println("start SchirmEinstLiter");
tft.fillScreen(MAINCOLOR);
//Titel
tft.fillRect(0, 0, 240, 40, ILI9341_CYAN);
//* tft.drawRGBBitmap(205,5, picUp,32,32);
tft.setTextSize(2);
tft.setTextColor(ILI9341_BLACK,ILI9341_CYAN);
tft.setCursor(10, 10);
tft.println("Kal.Werte Liter");
//Draw Horizontal Lines
for (int16_t h=80; h<=320; h+=40)
tft.drawFastHLine(0, h, 240, ILI9341_WHITE);
//Anzeige Kalibrien Literangaben
String sString1;
tft.setTextColor(ILI9341_WHITE,MAINCOLOR);
for (byte Einst = 0; Einst < 8; Einst++ ){
tft.setCursor(10, 52 + Einst*40);
sString1 = saEinstKalLiter[Einst];
sString1 = sString1 + " " + String(int16_t(yValues[Einst]));
tft.print(sString1);
}
}
void drawKopfzeileKalibMW() {
tft.setTextSize(2);
tft.setTextColor(ILI9341_BLACK,ILI9341_CYAN);
tft.setCursor(10, 10);
tft.println("MW " + String(intMesswert) + " zuordnen ");
// Serial.println("MW " + String(intMesswert) + " zuordnen");
//* tft.drawRGBBitmap(205,5, picUp,32,32);
}
void SchirmKalibMesswerte() {
// Serial.println("start SchirmKalibMesswerte");
tft.fillScreen(MAINCOLOR);
//Titel
tft.fillRect(0, 0, 240, 40, ILI9341_CYAN);
drawKopfzeileKalibMW();
//Draw Horizontal Lines
for (int16_t h=80; h<=320; h+=40)
tft.drawFastHLine(0, h, 240, ILI9341_WHITE);
//Anzeige Literangaben für Übernahme
String sString1;
tft.setTextColor(ILI9341_WHITE,MAINCOLOR);
for (byte Einst = 0; Einst < numValues; Einst++ ){
tft.setCursor(10, 52 + Einst*40);
sString1 = "Messw. " + String(int16_t(yValues[Einst])) + " l:";
sString1 = sString1 + " " + String(int16_t(xValues[Einst]));
tft.print(sString1);
}
}
void printTftZentriert(uint16_t x, uint16_t y, uint16_t windowWidth,String txt) {
int16_t x1; int16_t y1; uint16_t w; uint16_t h;
tft.getTextBounds(txt,0,y,&x1,&y1,&w,&h);
// Serial.print(txt + ": x: " + String(x) + " wW: " + String(windowWidth) + " w:" + String(w) + " cx: " + String(((windowWidth-w-x)/2)+x) );
// Serial.println();
tft.setCursor(((windowWidth-w)/2)+x, y);
tft.println(txt);
}
void printTftRechtsBuendig(uint16_t x, uint16_t y, String txt) {
int16_t x1; int16_t y1; uint16_t w; uint16_t h;
tft.getTextBounds(txt,0,y,&x1,&y1,&w,&h);
Serial.print(String(txt) + " w:" + String(w) + " x-w: " + String(x-w));
Serial.println();
tft.setCursor(x-w, y);
tft.println(txt);
}
void getEEpromValues() {
Serial.print("getEEpromV: Einst: ");
for (byte i = 0; i < 8; i++ ) {
iaEinst[i] = iaEEpromEinst[i];
// Serial.print(iaEinst[i]);Serial.print(", ");
}
// Serial.println();
// Serial.print("getEEpromV: yVLiter: ");
for (byte i = 0; i < 10; i++ ) {
yValues[i] = iaEEpromKalibLiter[i];
// Serial.print(yValues[i]);Serial.print(", ");
}
calcNumValues();
// Serial.println();
Serial.print(": numValues: "); Serial.println(numValues);
// Serial.print("getEEpromV: xVMessw: ");
for (byte i = 0; i < 10; i++ ) {
xValues[i] = iaEEpromKalibMessw[i];
// Serial.print(xValues[i]);Serial.print(", ");
}
// Serial.println();
}
void calcNumValues() {
numValues = 1; //erster Wert immer (sollte nicht 0 sein)
for (byte i = 1 ; i < 10; i++ )
if (int16_t(yValues[i]) > 0) numValues++;
else break;
Serial.println("calcNumValues: " + String(numValues));
}
unsigned long EEpromDatagetCRC() {
byte contData[16+20+20];
for (int16_t i=0; i<8; i++){
contData[2*i] = highByte(iaEEpromEinst[i]);
contData[2*i+1] = iaEEpromEinst[i];
}
Serial.print("contData :");
for (int16_t i=0; i<16; i++) {
Serial.print(contData[i],HEX); Serial.print(", ");
}
Serial.println();
for (int16_t i=0; i<10; i++){
contData[16+2*i] = highByte(iaEEpromKalibLiter[i]);
contData[17+2*i] = iaEEpromKalibLiter[i];
}
Serial.print("contData 2:");
for (int16_t i=16; i<36; i++) {
Serial.print(contData[i],HEX); Serial.print(", ");
}
Serial.println();
for (int16_t i=0; i<10; i++){
contData[36+2*i] = highByte(iaEEpromKalibMessw[i]);
contData[37+2*i] = iaEEpromKalibMessw[i];
}
Serial.print("contData 3:");
for (int16_t i=36; i<56; i++) {
Serial.print(contData[i],HEX); Serial.print(", ");
}
Serial.println();
unsigned long crc = calc_crc(contData, sizeof(contData));
Serial.print("CRC 3: "); Serial.println(crc);
return(crc);
/*
int16_t iaEEpromKalibLiter[10] = {
5, 55, 85, 100, 0, 0, 0, 777, 0, 3413};
int16_t iaEEpromKalibMessw[10] = {
0, 600, 800, 1000, 0, 0, 0, 0, 7689, 9754};
byte mwLow; byte mwHigh;
mwLow = intMesswert;
mwHigh = highByte(intMesswert);
Serial.print("MW, MWHex, HighMW, Low MW: ");
Serial.print(intMesswert); Serial.print(", 0x");
Serial.print(intMesswert,HEX); Serial.print(", ");
Serial.print(mwHigh,HEX); Serial.print(", ");
Serial.println(mwLow,HEX);
int16_t mwNeu = (mwLow << 0) + ((mwHigh << 8));
int16_t mwNeu2 = (mwHigh << 8) + mwLow;
Serial.print("mwNeu, mwNeu2 : ");
Serial.print(mwNeu);Serial.print(", ");
Serial.println(mwNeu2);
Serial.print("Size of int16_t: ");
Serial.println(sizeof(int16_t));
Serial.print("Size of Unsigned int16_t: ");
Serial.println(sizeof(unsigned int16_t));
Serial.print("Size of int16_t: ");
Serial.println(sizeof(int16_t));
*/
}
unsigned long calc_crc(byte baData[], size_t size) {
/*
Serial.print("calc_crc: data 5..., size: ");
Serial.print(baData[5],HEX); Serial.print(", ");
Serial.print(baData[6],HEX); Serial.print(", ");
Serial.print(baData[7],HEX); Serial.print(", ");
Serial.print(baData[8],HEX); Serial.print(", ");
Serial.print(baData[54],HEX); Serial.print(", ");
Serial.print(baData[55],HEX); Serial.print(", ");
Serial.println(size);
*/
const unsigned long crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
baData[27]+=1;
unsigned long crc = ~0L;
for (int16_t index = 0 ; index < size ; ++index) {
crc = crc_table[(crc ^ baData[index]) & 0x0f] ^ (crc >> 4);
crc = crc_table[(crc ^ (baData[index] >> 4)) & 0x0f] ^ (crc >> 4);
crc = ~crc;
}
return crc;
}
int16_t readIntFromEEPROM(int16_t address)
{
return (EEPROM.read(address) << 8) + EEPROM.read(address + 1);
}
void writeIntIntoEEPROM(int16_t address, int16_t number)
{
EEPROM.write(address, number >> 8);
EEPROM.write(address + 1, number & 0xFF);
}
void writeLongIntoEEPROM(int address, long number)
{
EEPROM.write(address, (number >> 24) & 0xFF);
EEPROM.write(address + 1, (number >> 16) & 0xFF);
EEPROM.write(address + 2, (number >> 8) & 0xFF);
EEPROM.write(address + 3, number & 0xFF);
}
long readLongFromEEPROM(int address)
{
return ((long)EEPROM.read(address) << 24) +
((long)EEPROM.read(address + 1) << 16) +
((long)EEPROM.read(address + 2) << 8) +
(long)EEPROM.read(address + 3);
}
uint16_t smoothAnalog(uint16_t value){
// subtract the last reading:
total = total - iaReadings[readIndex];
// read from the sensor:
iaReadings[readIndex] = value;
// add the reading to the total:
total = total + iaReadings[readIndex];
// advance to the next position in the array:
readIndex = readIndex + 1;
// if we're at the end of the array .
if (readIndex >= numReadings) {
// .wrap around to the beginning:
readIndex = 0;
}
// calculate the average:
average = total / numReadings;
return(average);
// send it to the computer as ASCII digits
// Serial.println(average);
// delay(1); // delay in between reads for stability
}