Components and supplies
ESP 8266 D1 Mini
RS Components PCB Slide Switch RS Stock No 702-3763
2Kohm Resistor
Plastic Enclosure Clear Lid
ESP 8266 D1 Mini Battery Shield
1.8" SPI TFT Display 128 x 160 Pixels Using ST7735 Driver
3.7V 1000mAh Lithium Battery
Tactile Switches
3.5mm Jack Socket
JST Connector
3.5mm Jack Plug
5Kohm Multiturn Trimmer Potentiometer
PCB Board Pin Headers
Project description
Code
PetBit Start Screen Image
arduino
This is the hex code for the boot up image
1#pragma once 2 3#define startScreen_h 4 5const uint16_t startScreen [] PROGMEM = { 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 60xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 70xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 80xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0x0000, 0x0000, 0x0820, 0x72c4, 0x72a4, 0x20e1, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x1060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x20e1, 0x72a4, 0x72c4, 0x0820, 0x0000, 0x0000, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 90xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x4124, 0xf3d0, 0xfc10, 0xe38f, 0x69a7, 0x0000, 0x0020, 0xa3c6, 0xed69, 0x6a64, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1060, 0x41a2, 0x72a4, 0x9ba6, 0xbca7, 0xe5a9, 0xfe4a, 0xfe4a, 0xf5e9, 0xd528, 0xb467, 0x93a5, 0x5a23, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6a64, 0xed69, 0xa3c6, 0x0020, 0x0000, 0x69a7, 0xe38f, 0xfc10, 0xf3d0, 0x4124, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 100xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x4104, 0xf3f0, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xa2ab, 0x0000, 0x0020, 0xc487, 0xed69, 0x8b45, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18a1, 0x8325, 0xeda9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xf5e9, 0x9bc6, 0x3962, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8325, 0xed69, 0xc487, 0x0020, 0x0000, 0xa28a, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xf3f0, 0x4104, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 110xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xdb6e, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0x9249, 0x0000, 0x4182, 0xed69, 0xe549, 0x3942, 0x0000, 0x0000, 0x28e1, 0x9366, 0xe569, 0xf5e9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xd528, 0x3982, 0x0000, 0x0000, 0x3962, 0xe549, 0xed69, 0x4182, 0x0000, 0x8a49, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xdb6e, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 120xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x6186, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfbf0, 0x28a2, 0x0000, 0x9365, 0x3122, 0x0000, 0x0840, 0x9ba6, 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe29, 0x8b85, 0x0820, 0x0000, 0x3142, 0x9b86, 0x0000, 0x28a2, 0xfbf0, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0x6186, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 130xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xaaab, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xaaab, 0x0000, 0x0000, 0x0000, 0x1881, 0xc487, 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xdd48, 0x3962, 0x0000, 0x0000, 0x0000, 0xaaab, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xaaab, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 140xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xd34d, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xe3af, 0x0000, 0x0000, 0x20c1, 0xccc8, 0xed69, 0xed69, 0xed89, 0xfe2a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe09, 0x41a2, 0x0000, 0x0000, 0xe3af, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xd34d, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 150xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xfbf0, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfbf0, 0x4104, 0x0000, 0x3122, 0xdd08, 0xed69, 0xed69, 0xed69, 0xfe09, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xf5e9, 0x3142, 0x0000, 0x38e4, 0xfbf0, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfbf0, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 160xffff, 0xffff, 0xffff, 0x0000, 0x1041, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0x79e8, 0x0000, 0x3142, 0xe549, 0xed69, 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xedc9, 0x2901, 0x0000, 0x79e8, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0x1041, 0x0000, 0xffff, 0xffff, 0xffff, 170xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xebaf, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xbaec, 0x0000, 0x0000, 0xc487, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe2a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xe5a9, 0x4182, 0x9269, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xebaf, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 180xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xbaec, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfbf0, 0x28c3, 0x0000, 0x6a64, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfd2d, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xbaec, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 190xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x8a29, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xa2ab, 0x0000, 0x1080, 0xdd28, 0xed69, 0xed69, 0xed69, 0xed69, 0xfe09, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe2a, 0xa2ea, 0xcb2d, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0x8a29, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 200xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x30e3, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfbf0, 0x2082, 0x0000, 0x9b86, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe29, 0x0000, 0x1861, 0xfbf0, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0x30e3, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 210xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xb2cc, 0xfc10, 0xfc10, 0xfc10, 0x9a6a, 0x0000, 0x3942, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5e9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x5203, 0x0000, 0x9a6a, 0xfc10, 0xfc10, 0xfc10, 0xb2cc, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 220xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x30c3, 0xfbf0, 0xfc10, 0xfbf0, 0x2082, 0x0000, 0xbc47, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe2a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xd528, 0x0000, 0x2082, 0xfbf0, 0xfc10, 0xfbf0, 0x30c3, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 230xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x69a6, 0xfc10, 0x9a6a, 0x0000, 0x49c3, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5a9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x5a23, 0x0000, 0x9a6a, 0xfc10, 0x69a6, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 240xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x79e8, 0x2082, 0x0000, 0xc4a8, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xfe09, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xdd68, 0x0000, 0x2082, 0x79e8, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 250xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a23, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x6284, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 260xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0020, 0xd4e8, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xe589, 0x0820, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 270xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x6a84, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xfe29, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x72e4, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 280xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x28e1, 0xe549, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe09, 0x2901, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 290xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0020, 0xc487, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe29, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xd528, 0x0020, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 300xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x8325, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x9385, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 310xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x4182, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe2a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x49c3, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 320xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x1060, 0xd4e8, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5e9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xeda9, 0x1060, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 330xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x8b45, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe2a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe2a, 0x9ba6, 0x4182, 0x20e1, 0xcd08, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x9bc6, 0x41a2, 0x20c1, 0xc4c7, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x9bc6, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 340xffff, 0xffff, 0x0000, 0x0000, 0x3142, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5e9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe2a, 0x5203, 0x0000, 0x0000, 0x0841, 0x5229, 0xac4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x5a23, 0x0000, 0x0000, 0x0020, 0x4a08, 0xac4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe2a, 0x3962, 0x0000, 0x0000, 0xffff, 0xffff, 350xffff, 0x0000, 0x0000, 0x0000, 0xc467, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe2a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x93a5, 0x0000, 0x0841, 0x6b2d, 0xef5d, 0xa4f4, 0x524a, 0x18c1, 0xac26, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe8e, 0xfed1, 0xfe8e, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xa3e6, 0x0000, 0x0841, 0x62cc, 0xe73d, 0xad35, 0x526b, 0x18c2, 0xa406, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xd508, 0x0000, 0x0000, 0x0000, 0xffff, 360xffff, 0x0000, 0x0000, 0x3942, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5e9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x3962, 0x0000, 0x3146, 0xf79e, 0xffff, 0xef5d, 0x4a2a, 0x0000, 0x49c2, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4b, 0xff37, 0xff59, 0xff59, 0xff59, 0xfed2, 0xfe4a, 0xfe4a, 0xfe4a, 0x41c2, 0x0000, 0x2946, 0xe73c, 0xffff, 0xf79e, 0x524a, 0x0000, 0x41a2, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x3982, 0x0000, 0x0000, 0xffff, 370xffff, 0x0000, 0x0000, 0x9b86, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xfe29, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x0840, 0x0020, 0x49e9, 0xa4d4, 0xef7d, 0xa4f4, 0x5a8c, 0x0000, 0x1080, 0xfe4a, 0xfe4a, 0xfe4a, 0xfef2, 0xff59, 0xff59, 0xff59, 0xff59, 0xff58, 0xfe4b, 0xfe4a, 0xfe4a, 0x1080, 0x0000, 0x49e9, 0x9493, 0xef7d, 0xad35, 0x5a8c, 0x0020, 0x0860, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xa406, 0x0000, 0x0000, 0xffff, 380x0000, 0x0000, 0x1060, 0xe549, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x0020, 0x0020, 0x49e9, 0x4a09, 0x5a8c, 0x5a8c, 0x5a8c, 0x0020, 0x0860, 0xfe4a, 0xfe4a, 0xfe4a, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xfe8e, 0xfe4a, 0xfe4a, 0x0860, 0x0020, 0x49e9, 0x49e9, 0x5a8c, 0x5a8c, 0x5a8c, 0x0821, 0x0020, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe09, 0x1080, 0x0000, 0x0000, 390x0000, 0x0000, 0x49c3, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x0840, 0x0020, 0x49e9, 0x49e9, 0x5a6b, 0x5a8c, 0x5a8b, 0x0000, 0x1080, 0xfe4a, 0xfe4a, 0xfe8e, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xfe8e, 0xfe4a, 0xfe4a, 0x1080, 0x0000, 0x49e9, 0x49e9, 0x5a6b, 0x5a8c, 0x5a8b, 0x0020, 0x0840, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x5203, 0x0000, 0x0000, 400x0000, 0x0000, 0x82e5, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xfe09, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x3962, 0x0000, 0x3146, 0x49e9, 0x522a, 0x5a6b, 0x3987, 0x0000, 0x41a2, 0xfe4a, 0xfe4a, 0xff14, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xfeb0, 0xfe4a, 0xfe4a, 0x41a2, 0x0000, 0x2946, 0x49e9, 0x4a2a, 0x5a6b, 0x39a7, 0x0000, 0x3962, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x8b65, 0x0000, 0x0000, 410x0000, 0x0000, 0xb427, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xfe29, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x9385, 0x0000, 0x0841, 0x3146, 0x41e9, 0x3146, 0x0841, 0x0000, 0x9be6, 0xfe4a, 0xfe4b, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xfed2, 0xfe4a, 0xfe4a, 0x9be6, 0x0000, 0x0841, 0x3146, 0x41e9, 0x3146, 0x0841, 0x0000, 0x9385, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xc4a7, 0x0000, 0x0000, 420x0000, 0x0000, 0xdd28, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xfe2a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe29, 0x49c2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5203, 0xfe4a, 0xfe4a, 0xfed1, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff14, 0xfe4a, 0xfe4a, 0xfe4a, 0x5203, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x49c2, 0xfe29, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xf5e9, 0x0000, 0x0000, 430x0000, 0x0000, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe2a, 0x93a5, 0x4182, 0x18a1, 0x41a2, 0x9bc6, 0xfe2a, 0xfe4a, 0xfeaf, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff58, 0xfe6d, 0xfe4a, 0xfe4a, 0xfe2a, 0x9bc6, 0x41a2, 0x18a1, 0x4182, 0x93a5, 0xfe2a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x0000, 0x0000, 440x0000, 0x0820, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe8d, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff36, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x0820, 0x0000, 450x0000, 0x1060, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe8e, 0xfef4, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff14, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x1060, 0x0000, 460x0000, 0x0840, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe4a, 0xfe4a, 0xfe8e, 0xfeb0, 0xfed1, 0xfed1, 0xfed2, 0xfed2, 0xfef2, 0xfef2, 0xfef2, 0xfef3, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff37, 0xfeb0, 0xfe4b, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe6b, 0xfe8e, 0xfeb0, 0xfef2, 0xff14, 0xfef3, 0xfed1, 0xfeaf, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe2a, 0x0840, 0x0000, 470x0000, 0x0000, 0xcca8, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xedab, 0xfef2, 0xff57, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff37, 0xff36, 0xff36, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff58, 0xfef2, 0xfe4b, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xdd68, 0x0000, 0x0000, 480x0000, 0x0000, 0x9ba6, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xeded, 0xf6f6, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xd634, 0x734b, 0x4a27, 0x2924, 0x2924, 0x4a27, 0x734b, 0xd634, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff57, 0xfe8d, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xac26, 0x0000, 0x0000, 490x0000, 0x0000, 0x72a4, 0xed69, 0xed69, 0xed69, 0xed69, 0xedcc, 0xf6f6, 0xf6f6, 0xff38, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xe6d7, 0x5268, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5268, 0xe6d7, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff58, 0xfe8d, 0xfe4a, 0xfe4a, 0xfe4a, 0x7b04, 0x0000, 0x0000, 500x0000, 0x0000, 0x41a2, 0xed69, 0xed69, 0xe569, 0xc487, 0xa48e, 0x7b6b, 0x62c9, 0x5288, 0x4a27, 0x39a5, 0x2944, 0x20e3, 0x2103, 0x2944, 0x2964, 0x3185, 0x39a5, 0x4a27, 0xde76, 0xff59, 0xff59, 0xff59, 0xeef7, 0x3185, 0x0000, 0x2082, 0x8a6a, 0xd3f0, 0xf493, 0xf493, 0xd3f0, 0x92ab, 0x20a2, 0x0000, 0x3185, 0xeef7, 0xff59, 0xff59, 0xff59, 0xde76, 0x4a27, 0x39a5, 0x3185, 0x2964, 0x2944, 0x2103, 0x20e3, 0x2944, 0x39a5, 0x4a27, 0x5a88, 0x6b0a, 0x7bac, 0xa4f0, 0xd613, 0xfe2a, 0xfe4a, 0xfe4a, 0x49e3, 0x0000, 0x0000, 510x0000, 0x0000, 0x1060, 0x49c3, 0x20e1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbd92, 0xff59, 0xff59, 0xff59, 0x7b8c, 0x0000, 0x4925, 0xf3d0, 0xfcb3, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xf493, 0x4966, 0x0000, 0x7b8c, 0xff59, 0xff59, 0xff59, 0xbd92, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x2901, 0x5203, 0x1060, 0x0000, 0x0000, 520x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1881, 0x41c5, 0x6ae9, 0x940d, 0xacf0, 0xbd51, 0xce14, 0xde76, 0xeef7, 0xff58, 0xf738, 0xf718, 0xeef7, 0xe6d7, 0xe696, 0xeed7, 0xff59, 0xff59, 0xff59, 0xff59, 0x3185, 0x0000, 0xe38e, 0xfc10, 0xfc93, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xe431, 0x0000, 0x3185, 0xff59, 0xff59, 0xff59, 0xff59, 0xeed7, 0xe696, 0xe6d7, 0xeef7, 0xf718, 0xf738, 0xff58, 0xeef7, 0xde76, 0xce14, 0xc5b3, 0xb531, 0x944e, 0x6b2a, 0x41e6, 0x18a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 530x0000, 0x0000, 0x0000, 0x3122, 0xdd28, 0xed69, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xff38, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0x2944, 0x0000, 0xe38f, 0xfc10, 0xfc52, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xe432, 0x0000, 0x2944, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff58, 0xf5ea, 0x3962, 0x0000, 0x0000, 0x0000, 540xffff, 0x0000, 0x0000, 0x0000, 0xb447, 0xed69, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf717, 0xff59, 0xf738, 0xc5b3, 0x83cc, 0x5ac9, 0x41e6, 0x2103, 0x6b2b, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0x736b, 0x0000, 0x4925, 0xf3f0, 0xfc10, 0xfc93, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xf493, 0x4965, 0x0000, 0x736b, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0x6b2b, 0x2103, 0x41e6, 0x5ac9, 0x83cc, 0xc5b3, 0xf738, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xc4e8, 0x0000, 0x0000, 0x0000, 0xffff, 550xffff, 0xffff, 0x0000, 0x0000, 0x3142, 0xed69, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xd613, 0x940d, 0x4a47, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5aa9, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xeef7, 0x3164, 0x0000, 0x2082, 0xa28a, 0xfbf0, 0xfc52, 0xfcb3, 0xfcb3, 0xa2ec, 0x2082, 0x0000, 0x3164, 0xeef7, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0x5aa9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0x4a48, 0x946e, 0xde75, 0xff59, 0xff59, 0xff59, 0xff59, 0xff58, 0x3962, 0x0000, 0x0000, 0xffff, 0xffff, 560xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xa3a6, 0xf6f6, 0xf6f6, 0xb4f0, 0x2103, 0x0000, 0x0000, 0x0000, 0x0841, 0x4a27, 0x8c2e, 0xbd72, 0xd655, 0xf738, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xe6d7, 0x62e9, 0x0000, 0x0000, 0x28a2, 0x71c7, 0x71c7, 0x28a3, 0x0000, 0x0000, 0x62e9, 0xe6d7, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xf738, 0xd655, 0xb572, 0x8c2e, 0x4a27, 0x0841, 0x0000, 0x0000, 0x0000, 0x2103, 0xb552, 0xff59, 0xff59, 0xacef, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 570xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x1060, 0xd5d1, 0xf6f6, 0x8bec, 0x0000, 0x3164, 0x734a, 0xbd31, 0xf717, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xce14, 0x4206, 0x0000, 0x0000, 0x0000, 0x0000, 0x4206, 0xce14, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xf738, 0xbd92, 0x7b8c, 0x3185, 0x0000, 0x8c2e, 0xff59, 0xd655, 0x1061, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 580xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x20e2, 0xe675, 0xf6f6, 0xeeb5, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xe6b6, 0xacf1, 0xacf1, 0xe6b6, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xf738, 0xff59, 0xeef7, 0x2123, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 590xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x41e6, 0xf6d6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf717, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0x630a, 0x5aa9, 0xeef7, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xeef7, 0x5aa9, 0x630a, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xf738, 0x4207, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 600xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x39c5, 0xe675, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xff38, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0x4207, 0x0000, 0x2944, 0xbd92, 0xf718, 0xf738, 0xbd92, 0x7b8c, 0x3165, 0x3165, 0x7b8c, 0xbd92, 0xf738, 0xf718, 0xbd92, 0x2944, 0x0000, 0x4207, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xeef7, 0x41e6, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 610xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x2103, 0xd613, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xff38, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xf738, 0x5a88, 0x0000, 0x0000, 0x0020, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x0020, 0x0000, 0x0000, 0x5a88, 0xf738, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xde75, 0x2123, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 620xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1081, 0x9c6e, 0xf6d6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xff38, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xa4d0, 0x62c9, 0x2103, 0x18c2, 0x5ac9, 0xa4b0, 0xd634, 0xd634, 0xa4b0, 0x5ac9, 0x18c2, 0x2103, 0x62c9, 0xa4d0, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff58, 0x9caf, 0x1082, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 630xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x3185, 0xc592, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xff38, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xcdf4, 0x39a5, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 640xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a06, 0xa4af, 0xeeb5, 0xf6f6, 0xf6f6, 0xf717, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xf738, 0xacf0, 0x4a27, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 650xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0x5aa8, 0x940d, 0xbd31, 0xe675, 0xff38, 0xff59, 0xff59, 0xff59, 0xff59, 0xf718, 0xe6d7, 0xde75, 0xd614, 0xc5d3, 0xbd72, 0xbd72, 0xc5d3, 0xd614, 0xde75, 0xe6d7, 0xf718, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xe6d7, 0xbd93, 0x944e, 0x62c9, 0x1061, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 660xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x0841, 0x0841, 0x0840, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x0841, 0x0861, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 670xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 680xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }; 69 70 71
PetBit Sketch
arduino
Main source code for PetBit
1/* 2 Name: Pet_Bit.ino 3 Created: 10/4/2020 12:03:28 PM 4 Author: Christopher Cooper 5*/ 6 7// Libraries. 8 9#include <Adafruit_GFX.h> // Core graphics library. 10#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735. 11#include <Fonts/FreeMono9pt7b.h> // Special font for displays. 12#include <SPI.h> // SPI bus for TFT using software SPI. 13#include <ESP8266WiFi.h> // ESP8266 library required for low power mode function. 14#include <eeprom.h> // EEPROM library. 15 16#include "startScreen.h" // Start screen bitmap. 17#include "catStartScreen.h" // Cat start screen bitmap. 18#include "batteryIcons.h" // Battery level bitmaps. 19 20// Special ESP8266 settings. 21 22extern "C" { // Required for ESP8266 sleep mode. 23#include "gpio.h" 24} 25 26extern "C" { // Required for ESP8266 sleep mode. 27#include "user_interface.h" 28} 29 30#define FPM_SLEEP_MAX_TIME 0xFFFFFFF // Sets ESP sleep mode for maximum duration. 31 32// TFT SPI Interface for ESP 8266 using software SPI. 33 34#define TFT_RST 4 // Reset // D2 on ESP8266. 35#define TFT_DC 5 // Data command or AO // D1 on ESP8266. 36#define TFT_MOSI 13 // Software data out // D7 on ESP8266. 37#define TFT_SCLK 14 // Software clock out // D5 on ESP8266. 38#define TFT_CS 15 // Chip select // D8 on ESP8266. 39 40// Pin out Configuration. 41 42byte bPlus = 1; // Button + // TX on ESP8266. 43byte bMinus = 3; // Button - // RX on ESP8266. 44 45const int lcdBackLightPin = 16; // D0 on ESP8266. 46const int interruptMenuButton = 0; // D3 on ESP8266. 47const int interruptWakeButton = 2; // D4 on ESP8266. 48const int interruptWheelSensor = 12; // D6 on ESP8266. 49 50// Float map function as inbuilt map function doesnt support floats. 51 52float mapf(float x, float in_min, float in_max, float out_min, float out_max) { 53 float a = x - in_min; 54 float b = out_max - out_min; 55 float c = in_max - in_min; 56 return a * b / c + out_min; 57} 58 59// Configure ST7735 display. 60 61Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); 62boolean screenRedraw = 0; 63 64// Global variables. 65 66int screenMenu; // Screen menu selection. 67byte configurationFlag = 0; // Configuration menu flag. 68 69volatile byte displayBackLight = 1; // Enable / disable LCD back light. 70volatile byte wakeInterrupt = 1; // Set wake interupt flag. 71volatile unsigned int distanceCounter = 0; // Counting rotations for distance travelled. 72 73volatile unsigned long passedTime; // Setting time to calculate speed. 74volatile unsigned long startTime; // Setting time to calculate speed. 75 76volatile unsigned long lastRotation1; // Checking if wheel is still turning. 77volatile unsigned long lastRotation2; // Checking if wheel is still turning. 78 79float circumference; // Wheel circumference. 80float circImperial; // Conversion into MPH. 81 82float distanceTravelled = 0.00; // Total distance travelled. 83float speedKph = 0.00; 84float speedMph = 0.00; 85float rpm = 0.00; 86 87float maxKphSpeed = 0; // Recording max speed. 88 89char rpmArray[7]; // Holding data in character arrays for formatting reasons. 90char kphArray[7]; 91char mphArray[7]; 92char maxKphArray[7]; 93char averageKphSpeedArray[7]; 94char sessionDistanceArray[7]; 95char currentSessionTimeArray[7]; 96 97// Configure EEEPROM. 98 99int eeMenuAddress = 0; // EEPROM address for start menu position. 100int eeMenuSetting; // Actual commit for writing, 4 bytes. 101boolean eeMenuSettingChange = false; // Used for menu scrolling before committing to save EEPROM writes. 102 103int eeCircAddress = 4; // EEPROM address for circumference. 104float eeCircSetting; // Actual commit for writing, 4 bytes. 105boolean eeCircSettingChange = false; // Used for circumference setting before committing to save EEPROM writes. 106 107int eeTotalDistanceAddress = 8; // EEPROM address for total distance. 108unsigned long eeTotalDistance; // Actual commit for writing, 4 bytes. 109boolean eeTotalDistanceChange = false; // Used for total distance before committing to save EEPROM writes. 110 111int eeSessionTimeArray1Address = 16; // EEPROM address for session time 1 112unsigned long eeSessionTime1; // Actual commit for writing, 4 bytes. 113 114int eeSessionTimeArray2Address = 20; // EEPROM address for session time 2 115unsigned long eeSessionTime2; // Actual commit for writing, 4 bytes. 116 117int eeSessionTimeArray3Address = 24; // EEPROM address for session time 3 118unsigned long eeSessionTime3; // Actual commit for writing, 4 bytes. 119 120int eeSessionTimeArray4Address = 28; // EEPROM address for session time 4 121unsigned long eeSessionTime4; // Actual commit for writing, 4 bytes. 122 123int eeSessionTimeArray5Address = 32; // EEPROM address for session time 5 124unsigned long eeSessionTime5; // Actual commit for writing, 4 bytes. 125 126int eeSessionTimeArray6Address = 36; // EEPROM address for session time 6 127unsigned long eeSessionTime6; // Actual commit for writing, 4 bytes. 128 129int eeSessionTimeArray7Address = 40; // EEPROM address for session time 7 130unsigned long eeSessionTime7; // Actual commit for writing, 4 bytes. 131 132int eeSessionDistanceArray1Address = 44; // EEPROM address for session distance 1 133unsigned int eeSessionDistance1; // Actual commit for writing, 4 bytes. 134 135int eeSessionDistanceArray2Address = 48; // EEPROM address for session distance 2 136unsigned int eeSessionDistance2; // Actual commit for writing, 4 bytes. 137 138int eeSessionDistanceArray3Address = 52; // EEPROM address for session distance 3 139unsigned int eeSessionDistance3; // Actual commit for writing, 4 bytes. 140 141int eeSessionDistanceArray4Address = 56; // EEPROM address for session distance 4 142unsigned int eeSessionDistance4; // Actual commit for writing, 4 bytes. 143 144int eeSessionDistanceArray5Address = 60; // EEPROM address for session distance 5 145unsigned int eeSessionDistance5; // Actual commit for writing, 4 bytes. 146 147int eeSessionDistanceArray6Address = 64; // EEPROM address for session distance 6 148unsigned int eeSessionDistance6; // Actual commit for writing, 4 bytes. 149 150int eeSessionDistanceArray7Address = 68; // EEPROM address for session distance 7 151unsigned int eeSessionDistance7; // Actual commit for writing, 4 bytes. 152 153boolean eeSessionChange = false; // Used for session time before committing to save EEPROM writes. 154 155int eeResetSettingAddress = 72; // EEPROM address for master reset 156unsigned int eeResetSetting; // Actual commit for writing, 1 byte. 157boolean eeResetSettingChange = false; // Used for reset setting change before committing to save EEPROM writes. 158 159int eeSessionArrayPositionAddress = 76; // EEPROM address for array position. 160unsigned int eeSessionArrayPosition; // Actual commit for writing, 4 bytes. 161 162// Average calculation variables. 163 164const int numReadings = 10; 165 166float readings[numReadings]; // Latest Kph readings. 167int readIndex = 0; // The index of the current reading. 168float total = 0.00; // The running total of the readings. 169float averageKphSpeed = 0.00; // The average speed. 170 171// Session time variables. 172 173unsigned long sessionTimeCap = 10; // Set cap for graph if statements. 174boolean recordSessions = 0; // Flag to trigger the recording of each session. 175volatile boolean sessionTimeFlag = 0; // Flag to trigger the recording of each session. 176volatile unsigned long sessionStartTime; // Time each pt session starts. 177unsigned long sessionTimeArray[7]; // Array for storing 7 sessions. 178byte sessionArrayPosition = 0; // Array position, this is also used for the distance array position. 179volatile unsigned long sessionTimeMillis; // Time each pt session in millis. 180volatile unsigned int sessionTime; // Time each pt session in minutes. 181 182unsigned int sessionTimeArray1; // These variables are needed for the Kris Kasprzak charts. 183unsigned int sessionTimeArray2; 184unsigned int sessionTimeArray3; 185unsigned int sessionTimeArray4; 186unsigned int sessionTimeArray5; 187unsigned int sessionTimeArray6; 188unsigned int sessionTimeArray7; 189 190// Session distance variables. 191 192unsigned int distanceGraphCap = 20; // Set cap for graph if statements. 193float sessionStartDistance = 0.00; 194float sessionDistance; // Session distance. 195unsigned int distanceTravelledArray[7]; // Array for storing 7 sessions. 196 197unsigned int distanceTravelledArray1; // These variables are needed for the Kris Kasprzak charts. 198unsigned int distanceTravelledArray2; 199unsigned int distanceTravelledArray3; 200unsigned int distanceTravelledArray4; 201unsigned int distanceTravelledArray5; 202unsigned int distanceTravelledArray6; 203unsigned int distanceTravelledArray7; 204 205// Battery measurement variables. 206 207#define sensitivity (4 / 1024.0) // Battery sensitivity setting. 208unsigned long batteryMeasureInterval = 600000; // Battery measuring interval. 209unsigned long batteryMeasureNow; 210float sensorValue; 211float sensorValueVolts; 212float sensorValuePerc; 213 214// Kris Kasprzak Variables. 215 216boolean dial_1 = true; // XPH dial. 217 218boolean graph_1 = true; // Bar graph. 219boolean graph_2 = true; 220boolean graph_3 = true; 221boolean graph_4 = true; 222boolean graph_5 = true; 223boolean graph_6 = true; 224boolean graph_7 = true; 225 226boolean graph_8 = true; // Bar graph. 227boolean graph_9 = true; 228boolean graph_10 = true; 229boolean graph_11 = true; 230boolean graph_12 = true; 231boolean graph_13 = true; 232boolean graph_14 = true; 233 234// Define colours. 235 236// http://www.barth-dev.de/online/rgb565-color-picker/ 237#define LTBLUE 0xB6DF 238#define LTTEAL 0xBF5F 239#define LTGREEN 0xBFF7 240#define LTCYAN 0xC7FF 241#define LTRED 0xFD34 242#define LTMAGENTA 0xFD5F 243#define LTYELLOW 0xFFF8 244#define LTORANGE 0xFE73 245#define LTPINK 0xFDDF 246#define LTPURPLE 0xCCFF 247#define LTGREY 0xE71C 248 249#define BLUE 0x001F 250#define TEAL 0x0438 251#define GREEN 0x07E0 252#define CYAN 0x07FF 253#define RED 0xF800 254#define MAGENTA 0xF81F 255#define YELLOW 0xFFE0 256#define ORANGE 0xFD20 257#define PINK 0xF81F 258#define PURPLE 0x801F 259#define GREY 0xC618 260#define WHITE 0xFFFF 261#define BLACK 0x0000 262 263#define DKBLUE 0x000D 264#define DKTEAL 0x020C 265#define DKGREEN 0x03E0 266#define DKCYAN 0x03EF 267#define DKRED 0x6000 268#define DKMAGENTA 0x8008 269#define DKYELLOW 0x8400 270#define DKORANGE 0x8200 271#define DKPINK 0x9009 272#define DKPURPLE 0x4010 273#define DKGREY 0x4A49 274 275// Define fonts. 276 277#include <Fonts/FreeMonoBoldOblique12pt7b.h> 278#include <Fonts/FreeSans9pt7b.h> 279 280/*-----------------------------------------------------------------*/ 281 282void setup() { 283 284 // Set pin modes. 285 286 pinMode(interruptMenuButton, INPUT_PULLUP); // Menu selection interrupt button. 287 pinMode(interruptWakeButton, INPUT_PULLUP); // Wake up and sleep interrupt button. 288 pinMode(interruptWheelSensor, INPUT_PULLUP); // Wheel sensor (REED switch). 289 pinMode(bPlus, INPUT_PULLUP); // Menu button 1. 290 pinMode(bMinus, INPUT_PULLUP); // Menu button 2. 291 pinMode(lcdBackLightPin, OUTPUT); // Output for LCD back light. 292 digitalWrite(lcdBackLightPin, HIGH); // Outout for LCD back light. 293 294 // Configure interrupts. 295 296 attachInterrupt(digitalPinToInterrupt(interruptMenuButton), screenMenuISR, FALLING); 297 attachInterrupt(digitalPinToInterrupt(interruptWakeButton), wakeInterruptISR, FALLING); 298 gpio_pin_wakeup_enable(GPIO_ID_PIN(interruptWakeButton), GPIO_PIN_INTR_LOLEVEL); 299 attachInterrupt(digitalPinToInterrupt(interruptWheelSensor), rotationInterruptISR, FALLING); 300 301 // Configure EEPROM. 302 303 EEPROM.begin(512); 304 EEPROM.get(eeResetSettingAddress, eeResetSetting); 305 306 /* 307 * 308 * This line is used for initial ESP8266 power on from manufacture to set EEPROM, comment out once uploaded and re-upload. 309 * 310 * resetSystemDemoData(); 311 */ 312 313 if (eeResetSetting == 1) { 314 315 resetSystemData(); 316 } 317 318 else if (eeResetSetting == 2) { 319 320 resetSystemDemoData(); 321 } 322 323 // Load previous settings and last recorded data. 324 325 EEPROM.get(eeMenuAddress, eeMenuSetting); 326 EEPROM.get(eeCircAddress, eeCircSetting); 327 EEPROM.get(eeMenuAddress, screenMenu); 328 EEPROM.get(eeCircAddress, circumference); 329 EEPROM.get(eeTotalDistanceAddress, distanceCounter); 330 EEPROM.get(eeSessionArrayPositionAddress, sessionArrayPosition); 331 332 EEPROM.commit(); 333 334 EEPROM.get(eeSessionTimeArray1Address, sessionTimeArray[0]); 335 EEPROM.get(eeSessionTimeArray2Address, sessionTimeArray[1]); 336 EEPROM.get(eeSessionTimeArray3Address, sessionTimeArray[2]); 337 EEPROM.get(eeSessionTimeArray4Address, sessionTimeArray[3]); 338 EEPROM.get(eeSessionTimeArray5Address, sessionTimeArray[4]); 339 EEPROM.get(eeSessionTimeArray6Address, sessionTimeArray[5]); 340 EEPROM.get(eeSessionTimeArray7Address, sessionTimeArray[6]); 341 342 EEPROM.commit(); 343 344 sessionTimeArray1 = sessionTimeArray[0] / 1000 / 60; 345 sessionTimeArray2 = sessionTimeArray[1] / 1000 / 60; 346 sessionTimeArray3 = sessionTimeArray[2] / 1000 / 60; 347 sessionTimeArray4 = sessionTimeArray[3] / 1000 / 60; 348 sessionTimeArray5 = sessionTimeArray[4] / 1000 / 60; 349 sessionTimeArray6 = sessionTimeArray[5] / 1000 / 60; 350 sessionTimeArray7 = sessionTimeArray[6] / 1000 / 60; 351 352 EEPROM.get(eeSessionDistanceArray1Address, distanceTravelledArray[0]); 353 EEPROM.get(eeSessionDistanceArray2Address, distanceTravelledArray[1]); 354 EEPROM.get(eeSessionDistanceArray3Address, distanceTravelledArray[2]); 355 EEPROM.get(eeSessionDistanceArray4Address, distanceTravelledArray[3]); 356 EEPROM.get(eeSessionDistanceArray5Address, distanceTravelledArray[4]); 357 EEPROM.get(eeSessionDistanceArray6Address, distanceTravelledArray[5]); 358 EEPROM.get(eeSessionDistanceArray7Address, distanceTravelledArray[6]); 359 360 EEPROM.commit(); 361 362 distanceTravelledArray1 = distanceTravelledArray[0]; 363 distanceTravelledArray2 = distanceTravelledArray[1]; 364 distanceTravelledArray3 = distanceTravelledArray[2]; 365 distanceTravelledArray4 = distanceTravelledArray[3]; 366 distanceTravelledArray5 = distanceTravelledArray[4]; 367 distanceTravelledArray6 = distanceTravelledArray[5]; 368 distanceTravelledArray7 = distanceTravelledArray[6]; 369 370 // Ensure menu position, circumference & array position are within parametres. 371 372 if (screenMenu < 0 || screenMenu > 4) { 373 374 screenMenu = 0; 375 376 } // Close if. 377 378 if (circumference < 0 || circumference > 2) { 379 380 circumference = 1.0; 381 382 } // Close if. 383 384 if (sessionArrayPosition < 0 || sessionArrayPosition > 6) { 385 386 sessionArrayPosition = 0; 387 388 } // Close if. 389 390 // Initialise TFT display. 391 392 tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab. 393 tft.setRotation(1); 394 tft.setCursor(0, 0); 395 tft.fillScreen(ST77XX_BLACK); 396 397 // Start up screen, hamster image. 398 399 tft.fillScreen(ST77XX_WHITE); 400 401 int h = 80, w = 112, row, col, buffidx = 0; 402 403 for (row = 16; row < h; row++) { // For each scanline. 404 405 for (col = 48; col < w; col++) { // For each pixel, read from Flash Memory, since image is stored as uint16_t, pgm_read_word is used as it uses 16bit address. 406 tft.drawPixel(col, row, pgm_read_word(startScreen + buffidx)); 407 buffidx++; 408 409 } // End for loop. 410 411 } // End for loop. 412 413 tft.setFont(&FreeSans9pt7b); 414 tft.setTextSize(1); 415 tft.setTextColor(ST77XX_BLACK); 416 tft.setCursor(55, 105); 417 tft.println("PetBit"); 418 419 delay(2000); 420 421 tft.fillScreen(ST77XX_BLACK); 422 423 // Configure rotation parametres. 424 425 circImperial = circumference * 0.62137; // convert metric to imperial for MPH calculations. 426 427 // Blank speed & distance variables. 428 429 rpm = 0.00; 430 speedKph = 0.00; 431 speedMph = 0.00; 432 maxKphSpeed = 0.00; 433 averageKphSpeed = 0.00; 434 sessionDistance = 0.00; 435 436 // Set average array to 0. 437 438 for (int thisReading = 0; thisReading < numReadings; thisReading++) { 439 readings[thisReading] = 0; 440 } 441 442 // Set battery measuring period and check initial capacity. 443 444 batteryMeasureNow = millis() - batteryMeasureInterval; // Set initial level so first measurement is made. 445 batteryLevel(); // Calculates battery level. 446 batteryMeasureNow = millis(); // Reset measurement to match interval. 447 448} // Close setup. 449 450/*-----------------------------------------------------------------*/ 451 452void loop() { 453 454 mainData(); // Calculates main data. 455 batteryLevel(); // Calculates battery level. 456 lcdBackLight(); // Interrupt to disable back light. 457 lightSleep(); // Interrupt to send ESP to sleep. 458 averageSpeed(); // Calculate average speed. 459 460 if (screenMenu == 0) { 461 462 if (screenRedraw == 1) { 463 464 tft.fillScreen(ST77XX_BLACK); 465 screenRedraw = 0; 466 467 } // Close if. 468 469 configurationDisplay(); // Start up display. 470 471 } // Close if. 472 473 if (screenMenu == 1) { 474 475 if (screenRedraw == 1) { 476 477 tft.fillScreen(ST77XX_BLACK); 478 screenRedraw = 0; 479 480 } // Close if. 481 482 XphDialScreen(tft, 80, 64, 60, 0, 20, 2, 210, speedKph, 2, 0, RED, WHITE, BLACK, "Xph", dial_1); // XPH dial screen function. 483 484 } // Close if. 485 486 if (screenMenu == 2) { 487 488 if (screenRedraw == 1) { 489 490 tft.fillScreen(ST77XX_BLACK); 491 screenRedraw = 0; 492 493 } // Close if. 494 495 CurrentExerciseScreen(); // Current exercise screen. 496 497 } // Close if. 498 499 if (screenMenu == 3) { 500 501 if (screenRedraw == 1) { 502 503 tft.fillScreen(ST77XX_BLACK); 504 screenRedraw = 0; 505 506 } // Close if. 507 508 // Session time bar graphs. 509 510 if (sessionTimeArray1 <= 10) { 511 512 ptSessionTimeV1(tft, 1, 110, 8, 80, 0, 10, 1, sessionTimeArray1, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "1", graph_1); 513 514 } // Close if. 515 516 else ((ptSessionTimeV1(tft, 1, 110, 8, 80, 0, 10, 1, sessionTimeCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "1", graph_1))); 517 518 if (sessionTimeArray2 <= 10) { 519 520 ptSessionTimeV2(tft, 21, 110, 8, 80, 0, 10, 1, sessionTimeArray2, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "2", graph_2); 521 522 } // Close if. 523 524 else ((ptSessionTimeV2(tft, 21, 110, 8, 80, 0, 10, 1, sessionTimeCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "2", graph_2))); 525 526 if (sessionTimeArray3 <= 10) { 527 528 ptSessionTimeV2(tft, 41, 110, 8, 80, 0, 10, 1, sessionTimeArray3, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "3", graph_3); 529 530 } // Close if. 531 532 else ((ptSessionTimeV2(tft, 41, 110, 8, 80, 0, 10, 1, sessionTimeCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "3", graph_3))); 533 534 if (sessionTimeArray4 <= 10) { 535 536 ptSessionTimeV2(tft, 61, 110, 8, 80, 0, 10, 1, sessionTimeArray4, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "4", graph_4); 537 538 } // Close if. 539 540 else ((ptSessionTimeV2(tft, 61, 110, 8, 80, 0, 10, 1, sessionTimeCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "4", graph_4))); 541 542 if (sessionTimeArray5 <= 10) { 543 544 ptSessionTimeV2(tft, 81, 110, 8, 80, 0, 10, 1, sessionTimeArray5, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "5", graph_5); 545 546 } // Close if. 547 548 else ((ptSessionTimeV2(tft, 81, 110, 8, 80, 0, 10, 1, sessionTimeCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "5", graph_5))); 549 550 if (sessionTimeArray6 <= 10) { 551 552 ptSessionTimeV2(tft, 101, 110, 8, 80, 0, 10, 1, sessionTimeArray6, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "6", graph_6); 553 554 } // Close if. 555 556 else ((ptSessionTimeV2(tft, 101, 110, 8, 80, 0, 10, 1, sessionTimeCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "6", graph_6))); 557 558 if (sessionTimeArray7 <= 10) { 559 560 ptSessionTimeV3(tft, 121, 110, 8, 80, 0, 10, 1, sessionTimeArray7, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "7", graph_7); 561 562 } // Close if. 563 564 else ((ptSessionTimeV3(tft, 121, 110, 8, 80, 0, 10, 1, sessionTimeCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "7", graph_7))); 565 566 } // Close if. 567 568 if (screenMenu == 4) { 569 570 if (screenRedraw == 1) { 571 572 tft.fillScreen(ST77XX_BLACK); 573 screenRedraw = 0; 574 575 } // Close if. 576 577 // Distance bar graphs. 578 579 if (distanceTravelledArray1 <= 15) { 580 581 ptSessionDistanceV1(tft, 1, 110, 8, 80, 0, 20, 2, distanceTravelledArray1, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "1", graph_8); 582 583 } // Close if. 584 585 else if (distanceTravelledArray1 >= 20) { 586 587 ptSessionDistanceV1(tft, 1, 110, 8, 80, 0, 20, 2, distanceGraphCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "1", graph_8); 588 589 } // Close else if. 590 591 else ((ptSessionDistanceV1(tft, 1, 110, 8, 80, 0, 20, 2, distanceTravelledArray1, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "1", graph_8))); 592 593 if (distanceTravelledArray2 <= 15) { 594 595 ptSessionDistanceV2(tft, 21, 110, 8, 80, 0, 20, 2, distanceTravelledArray2, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "2", graph_9); 596 597 } // Close if. 598 599 else if (distanceTravelledArray2 >= 20) { 600 601 ptSessionDistanceV2(tft, 21, 110, 8, 80, 0, 20, 2, distanceGraphCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "2", graph_9); 602 603 } // Close else if. 604 605 else ((ptSessionDistanceV2(tft, 21, 110, 8, 80, 0, 20, 2, distanceTravelledArray2, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "2", graph_9))); 606 607 if (distanceTravelledArray3 <= 15) { 608 609 ptSessionDistanceV2(tft, 41, 110, 8, 80, 0, 20, 2, distanceTravelledArray3, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "3", graph_10); 610 611 } // Close if. 612 613 else if (distanceTravelledArray3 >= 20) { 614 615 ptSessionDistanceV2(tft, 41, 110, 8, 80, 0, 20, 2, distanceGraphCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "3", graph_10); 616 617 } // Close else if. 618 619 else ((ptSessionDistanceV2(tft, 41, 110, 8, 80, 0, 20, 2, distanceTravelledArray3, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "3", graph_10))); 620 621 if (distanceTravelledArray4 <= 15) { 622 623 ptSessionDistanceV2(tft, 61, 110, 8, 80, 0, 20, 2, distanceTravelledArray4, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "4", graph_11); 624 625 } // Close if. 626 627 else if (distanceTravelledArray4 >= 20) { 628 629 ptSessionDistanceV2(tft, 61, 110, 8, 80, 0, 20, 2, distanceGraphCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "4", graph_11); 630 631 } // Close else if. 632 633 else ((ptSessionDistanceV2(tft, 61, 110, 8, 80, 0, 20, 2, distanceTravelledArray4, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "4", graph_11))); 634 635 if (distanceTravelledArray5 <= 15) { 636 637 ptSessionDistanceV2(tft, 81, 110, 8, 80, 0, 20, 2, distanceTravelledArray5, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "5", graph_12); 638 639 } // Close if. 640 641 else if (distanceTravelledArray5 >= 20) { 642 643 ptSessionDistanceV2(tft, 81, 110, 8, 80, 0, 20, 2, distanceGraphCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "5", graph_12); 644 645 } // Close else if. 646 647 else ((ptSessionDistanceV2(tft, 81, 110, 8, 80, 0, 20, 2, distanceTravelledArray5, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "5", graph_12))); 648 649 if (distanceTravelledArray6 <= 15) { 650 651 ptSessionDistanceV2(tft, 101, 110, 8, 80, 0, 20, 2, distanceTravelledArray6, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "6", graph_13); 652 653 } // Close if. 654 655 else if (distanceTravelledArray6 >= 20) { 656 657 ptSessionDistanceV2(tft, 101, 110, 8, 80, 0, 20, 2, distanceGraphCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "6", graph_13); 658 659 } // Close else if. 660 661 else ((ptSessionDistanceV2(tft, 101, 110, 8, 80, 0, 20, 2, distanceTravelledArray6, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "6", graph_13))); 662 663 if (distanceTravelledArray7 <= 15) { 664 665 ptSessionDistanceV3(tft, 121, 110, 8, 80, 0, 20, 2, distanceTravelledArray7, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "7", graph_14); 666 667 } // Close if. 668 669 else if (distanceTravelledArray7 >= 20) { 670 671 ptSessionDistanceV3(tft, 121, 110, 8, 80, 0, 20, 2, distanceGraphCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "7", graph_14); 672 673 } // Close else if. 674 675 else ((ptSessionDistanceV3(tft, 121, 110, 8, 80, 0, 20, 2, distanceTravelledArray7, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "7", graph_14))); 676 677 } // Close if. 678 679 // Check for new max speed. 680 681 if (speedKph > maxKphSpeed) { 682 683 maxKphSpeed = speedKph; 684 685 } // Close if. 686 687 // Calculate average speed & remove any minus calculations. 688 689 averageKphSpeed = total / numReadings; 690 691 if (averageKphSpeed < 0.99) { 692 693 averageKphSpeed = 0.00; 694 695 } // Close if. 696 697} // Close loop. 698 699/*-----------------------------------------------------------------*/ 700 701void batteryLevel() { 702 703 if (millis() >= batteryMeasureNow + batteryMeasureInterval) { 704 705 // Battery voltage level detection. 706 707 sensorValue = analogRead(A0); 708 sensorValueVolts = sensorValue * sensitivity; 709 710 // mapf(input_value, in_min, in_max, out_min, out_max). 711 sensorValuePerc = mapf(sensorValueVolts, 3.0, 4.0, 0, 100); 712 713 batteryMeasureNow = millis(); 714 715 } // Close if. 716 717} // Close function. 718 719/*-----------------------------------------------------------------*/ 720 721void mainData() { 722 723 // Set speed variables to "0.00" if the wheel doesnt turn for X period (currently 4000ms). 724 725 if (lastRotation2 < millis()) { 726 727 rpm = 0.00; 728 speedKph = 0.00; 729 speedMph = 0.00; 730 recordSessions = 1; 731 eeSessionChange = true; 732 733 } // Close if. 734 735 else { 736 737 // Calculate current session time. 738 739 sessionTimeMillis = millis() - sessionStartTime; 740 sessionTime = sessionTimeMillis / 10 / 60; 741 742 } // Close else. 743 744 745 // Ensure data is always "0" or greater, if not set to "0" 746 747 if ((rpm >= 0) || (speedKph >= 0) || (speedMph >= 0)) { 748 749 } // Close if. 750 751 else { 752 rpm = 0.00; 753 speedKph = 0.00; 754 speedMph = 0.00; 755 756 } // Close else. 757 758 if ((sessionTimeFlag == 1) && (recordSessions == 1)) { // Calculate session duration. 759 760 sessionTimeArray[sessionArrayPosition] = millis() - sessionStartTime; // Calculate last session time in millis & store into array. 761 distanceTravelledArray[sessionArrayPosition] = distanceTravelled - sessionStartDistance; // Store distance travelled into array. 762 763 if (eeSessionChange == true) { 764 765 switch (sessionArrayPosition) { 766 767 case 0: 768 769 sessionTimeArray1 = sessionTimeArray[0] / 1000 / 60; // Divided by 1000 for millis to seconds, then divided by 60 for minutes. 770 distanceTravelledArray1 = distanceTravelledArray[0]; // Update chart data. 771 EEPROM.put(eeSessionTimeArray1Address, sessionTimeArray[0]); // Record the chart data in EEPROM. 772 EEPROM.put(eeSessionDistanceArray1Address, distanceTravelledArray[0]); // Record the chart data in EEPROM. 773 EEPROM.commit(); 774 eeSessionChange = false; 775 776 case 1: 777 778 sessionTimeArray2 = sessionTimeArray[1] / 1000 / 60; 779 distanceTravelledArray2 = distanceTravelledArray[1]; 780 EEPROM.put(eeSessionTimeArray2Address, sessionTimeArray[1]); 781 EEPROM.put(eeSessionDistanceArray2Address, distanceTravelledArray[1]); 782 EEPROM.commit(); 783 eeSessionChange = false; 784 785 case 2: 786 787 sessionTimeArray3 = sessionTimeArray[2] / 1000 / 60; 788 distanceTravelledArray3 = distanceTravelledArray[2]; 789 EEPROM.put(eeSessionTimeArray3Address, sessionTimeArray[2]); 790 EEPROM.put(eeSessionDistanceArray3Address, distanceTravelledArray[2]); 791 EEPROM.commit(); 792 eeSessionChange = false; 793 794 case 3: 795 796 sessionTimeArray4 = sessionTimeArray[3] / 1000 / 60; 797 distanceTravelledArray4 = distanceTravelledArray[3]; 798 EEPROM.put(eeSessionTimeArray4Address, sessionTimeArray[3]); 799 EEPROM.put(eeSessionDistanceArray4Address, distanceTravelledArray[3]); 800 EEPROM.commit(); 801 eeSessionChange = false; 802 803 case 4: 804 805 sessionTimeArray5 = sessionTimeArray[4] / 1000 / 60; 806 distanceTravelledArray5 = distanceTravelledArray[4]; 807 EEPROM.put(eeSessionTimeArray5Address, sessionTimeArray[4]); 808 EEPROM.put(eeSessionDistanceArray5Address, distanceTravelledArray[4]); 809 EEPROM.commit(); 810 eeSessionChange = false; 811 812 case 5: 813 814 sessionTimeArray6 = sessionTimeArray[5] / 1000 / 60; 815 distanceTravelledArray6 = distanceTravelledArray[5]; 816 EEPROM.put(eeSessionTimeArray6Address, sessionTimeArray[5]); 817 EEPROM.put(eeSessionDistanceArray6Address, distanceTravelledArray[5]); 818 EEPROM.commit(); 819 eeSessionChange = false; 820 821 case 6: 822 823 sessionTimeArray7 = sessionTimeArray[6] / 1000 / 60; 824 distanceTravelledArray7 = distanceTravelledArray[6]; 825 EEPROM.put(eeSessionTimeArray7Address, sessionTimeArray[6]); 826 EEPROM.put(eeSessionDistanceArray7Address, distanceTravelledArray[6]); 827 EEPROM.commit(); 828 eeSessionChange = false; 829 830 } // Close switch case. 831 832 } // Close if. 833 834 sessionArrayPosition++; // Increment sessionTimeArrayPosition. 835 836 if (sessionArrayPosition >= 7) { // Check array position is within parametres. 837 838 sessionArrayPosition = 0; 839 840 } // Close if. 841 842 EEPROM.put(eeSessionArrayPositionAddress, sessionArrayPosition); // Record the next array position in EEPROM. 843 EEPROM.commit(); 844 845 sessionTimeFlag = 0; 846 recordSessions = 0; 847 848 if (eeTotalDistanceChange == true) { 849 850 EEPROM.put(eeTotalDistanceAddress, distanceCounter); 851 EEPROM.commit(); 852 eeTotalDistanceChange = false; 853 854 } // Close if. 855 856 } // Close if. 857 858 // Calculate current session distance travelled. 859 860 sessionDistance = distanceTravelled - sessionStartDistance; 861 862 if (maxKphSpeed == 0) { // Reset start up session distance displayed to zero, otherwise it displays current total distance. 863 864 sessionDistance = 0; 865 866 } // Close if. 867 868 if (sessionTime == 0) { 869 870 // Reset max speed. 871 872 maxKphSpeed = 0; 873 874 } // Close if. 875 876 /* 877 Configure speed varibales to the same format for screen layout using dtostrf. 878 879 dtostrf(floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf); 880 881 where 882 883 floatvar float variable. 884 StringLengthIncDecimalPoint This is the length of the string that will be created. 885 numVarsAfterDecimal The number of digits after the deimal point to print. 886 charbuf The array to store the results*/ 887 888 dtostrf(rpm, 6, 2, rpmArray); 889 dtostrf(speedKph, 6, 2, kphArray); 890 dtostrf(speedMph, 6, 2, mphArray); 891 dtostrf(maxKphSpeed, 6, 2, maxKphArray); 892 dtostrf(averageKphSpeed, 6, 2, averageKphSpeedArray); 893 dtostrf(sessionDistance, 6, 0, sessionDistanceArray); 894 dtostrf(sessionTime, 6, 0, currentSessionTimeArray); 895 896 } // Close function. 897 898/*-----------------------------------------------------------------*/ 899 900void configurationDisplay() { 901 902 // Drawing thicker rectangle with for loop, function, X, Y, W, H, colour. 903 904 for (uint16_t a = 0; a < 2; a++) { 905 906 tft.drawRect(0 + a, 0 + a, 158, 127, WHITE); 907 908 } // Close for loop. 909 910 EEPROM.get(eeMenuAddress, eeMenuSetting); 911 EEPROM.get(eeCircAddress, eeCircSetting); 912 EEPROM.get(eeResetSettingAddress, eeResetSetting); 913 tft.setCursor(0, 0); 914 915 tft.setFont(&FreeSans9pt7b); 916 tft.setTextSize(1); 917 tft.setTextColor(ST77XX_WHITE); 918 tft.setCursor(27, 20); 919 tft.println("Battery Level"); 920 921 tft.setFont(); 922 tft.setTextSize(1); 923 tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK); 924 tft.setCursor(35, 28); 925 tft.print("V: "); 926 tft.println(sensorValueVolts); 927 tft.setCursor(35, 38); 928 tft.print("%: "); 929 tft.println(int(sensorValuePerc)); 930 tft.println(); 931 932 if (sensorValuePerc > 95) { 933 934 drawBatteryBitmap(27, 90, ccBatt100, 32, 18); 935 936 } 937 938 else if (sensorValuePerc > 79 && sensorValuePerc < 95) { 939 940 drawBatteryBitmap(27, 90, ccBatt80, 32, 18); 941 942 } 943 944 else if (sensorValuePerc > 59 && sensorValuePerc < 80) { 945 946 drawBatteryBitmap(27, 90, ccBatt60, 32, 18); 947 948 } 949 950 else if (sensorValuePerc > 39 && sensorValuePerc < 60) { 951 952 drawBatteryBitmap(27, 90, ccBatt40, 32, 18); 953 954 } 955 956 else if (sensorValuePerc > 19 && sensorValuePerc < 40) { 957 958 drawBatteryBitmap(27, 90, ccBatt20, 32, 18); 959 960 } 961 962 else if (sensorValuePerc < 20) { 963 964 drawBatteryBitmap(27, 90, ccBatt00, 32, 18); 965 966 } 967 968 tft.setFont(&FreeSans9pt7b); 969 tft.setTextSize(1); 970 tft.setTextColor(ST77XX_WHITE); 971 tft.setCursor(27, 65); 972 tft.println("Configuration"); 973 974 tft.setFont(); 975 tft.setTextSize(1); 976 tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK); 977 978 if (configurationFlag == 3) { 979 980 tft.setTextColor(ST77XX_RED, ST77XX_BLACK); 981 982 } // Close if. 983 984 else tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK); 985 986 tft.setCursor(15, 70); 987 tft.print("System Reset : "); 988 tft.println(eeResetSetting); 989 990 if (configurationFlag == 2) { 991 992 tft.setTextColor(ST77XX_RED, ST77XX_BLACK); 993 994 } // Close if. 995 996 else tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK); 997 998 tft.setCursor(15, 80); 999 tft.print("Circumference : "); 1000 tft.println(eeCircSetting); 1001 tft.println(); 1002 tft.setCursor(15, 90); 1003 1004 if (configurationFlag == 1) { 1005 1006 tft.setTextColor(ST77XX_RED, ST77XX_BLACK); 1007 1008 } // Close if. 1009 1010 else tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK); 1011 1012 tft.print("Screen Menu Strt : "); 1013 tft.println(eeMenuSetting); 1014 tft.setCursor(15, 105); 1015 1016 tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK); 1017 tft.print("Total Distance To Date"); 1018 tft.setCursor(70, 115); 1019 tft.println(distanceTravelled = distanceCounter * circumference); 1020 1021 if (digitalRead(bPlus) == LOW && (digitalRead(bMinus) == LOW)) { 1022 1023 if (configurationFlag == 4) { 1024 1025 configurationFlag = 0; 1026 1027 } 1028 1029 configurationFlag++; 1030 1031 } // Close if. 1032 1033 if (digitalRead(bPlus) == LOW && configurationFlag == 1) 1034 { 1035 if (eeMenuSetting == 4) 1036 { 1037 eeMenuSetting = 0; 1038 eeMenuSettingChange = true; 1039 1040 } 1041 else 1042 { 1043 eeMenuSetting++; 1044 eeMenuSettingChange = true; 1045 } 1046 1047 } // Close if. 1048 1049 if (digitalRead(bMinus) == LOW && configurationFlag == 1) 1050 { 1051 if (eeMenuSetting == 0) 1052 { 1053 eeMenuSetting = 4; 1054 eeMenuSettingChange = true; 1055 } 1056 else 1057 { 1058 eeMenuSetting--; 1059 eeMenuSettingChange = true; 1060 } 1061 1062 } // Close if. 1063 1064 // Write menu setting to EEPROM. 1065 1066 if (eeMenuSettingChange == true) { 1067 1068 EEPROM.put(eeMenuAddress, eeMenuSetting); 1069 EEPROM.commit(); 1070 eeMenuSettingChange = false; 1071 1072 } // Close if. 1073 1074 if (digitalRead(bPlus) == LOW && configurationFlag == 2) 1075 { 1076 if (eeCircSetting > 2.00) 1077 { 1078 eeCircSetting = 0.00; 1079 eeCircSettingChange = true; 1080 1081 } 1082 else 1083 { 1084 eeCircSetting = eeCircSetting + 0.01; 1085 eeCircSettingChange = true; 1086 } 1087 1088 } // Close if. 1089 1090 if (digitalRead(bMinus) == LOW && configurationFlag == 2) 1091 { 1092 if (eeCircSetting < 0.00) 1093 { 1094 eeCircSetting = 2.00; 1095 eeCircSettingChange = true; 1096 } 1097 else 1098 { 1099 eeCircSetting = eeCircSetting - 0.01; 1100 eeCircSettingChange = true; 1101 } 1102 1103 } // Close if. 1104 1105 // Write debug setting to EEPROM. 1106 1107 if (eeCircSettingChange == true) { 1108 1109 EEPROM.put(eeCircAddress, eeCircSetting); 1110 EEPROM.commit(); 1111 eeCircSettingChange = false; 1112 1113 } // Close if. 1114 1115 if (digitalRead(bPlus) == LOW && configurationFlag == 3) 1116 { 1117 if (eeResetSetting == 2) 1118 { 1119 eeResetSetting = 0; 1120 eeResetSettingChange = true; 1121 1122 } 1123 else 1124 { 1125 eeResetSetting++; 1126 eeResetSettingChange = true; 1127 } 1128 1129 } // Close if. 1130 1131 if (digitalRead(bMinus) == LOW && configurationFlag == 3) 1132 { 1133 if (eeResetSetting == 0) 1134 { 1135 eeResetSetting = 2; 1136 eeResetSettingChange = true; 1137 } 1138 else 1139 { 1140 eeResetSetting--; 1141 eeResetSettingChange = true; 1142 } 1143 1144 } // Close if. 1145 1146 // Write menu setting to EEPROM. 1147 1148 if (eeResetSettingChange == true) { 1149 1150 EEPROM.put(eeResetSettingAddress, eeResetSetting); 1151 EEPROM.commit(); 1152 eeResetSettingChange = false; 1153 1154 } // Close if. 1155 1156} // Close function. 1157 1158/*-----------------------------------------------------------------*/ 1159 1160void CurrentExerciseScreen() { 1161 1162 // Drawing thicker rectangle with Foor Loop, function, X, Y, W, H, colour. 1163 1164 for (uint16_t a = 0; a < 2; a++) { 1165 1166 tft.drawRect(0 + a, 0 + a, 159, 127, WHITE); 1167 1168 } // Close for loop. 1169 1170 tft.setFont(&FreeSans9pt7b); 1171 tft.setTextSize(1); 1172 tft.setTextColor(ST77XX_WHITE); 1173 tft.setCursor(14, 20); 1174 tft.print("Current Session"); 1175 1176 tft.setTextSize(1); 1177 tft.setTextColor(ST77XX_WHITE); 1178 1179 tft.setCursor(15, 40); 1180 tft.print("Xph: "); 1181 tft.setCursor(15, 60); 1182 tft.print("Ave: "); 1183 tft.setCursor(15, 80); 1184 tft.print("Max: "); 1185 tft.setCursor(15, 100); 1186 tft.print("Dis: "); 1187 tft.setCursor(15, 120); 1188 tft.print("Time: "); 1189 1190 tft.setFont(); 1191 tft.setTextSize(2); 1192 tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK); 1193 1194 tft.setCursor(72, 28); 1195 tft.println(kphArray); 1196 1197 tft.setCursor(72, 48); 1198 tft.println(averageKphSpeedArray); 1199 1200 tft.setCursor(72, 68); 1201 tft.println(maxKphArray); 1202 1203 tft.setCursor(72, 88); 1204 tft.println(sessionDistanceArray); 1205 1206 tft.setCursor(72, 108); 1207 tft.println(currentSessionTimeArray); 1208 1209} // Close function. 1210 1211/*-----------------------------------------------------------------*/ 1212 1213void XphDialScreen(Adafruit_ST7735& Screen, int cx, int cy, int r, int loval, double hival, double inc, double sa, double curval, int dig, int dec, unsigned int needlecolor, unsigned int dialcolor, unsigned int textcolor, String label, boolean& redraw) { 1214 1215 double ix, iy, ox, oy, tx, ty, lx, rx, ly, ry, i, offset, stepval, data, angle; 1216 double degtorad = .0174532778; 1217 static double px = cx, py = cy, pix = cx, piy = cy, plx = cx, ply = cy, prx = cx, pry = cy; 1218 1219 // Draw the dial only one time--this will minimize flicker. 1220 1221 if (redraw == true) { 1222 redraw = false; 1223 Screen.fillCircle(cx, cy, r - 2, dialcolor); 1224 Screen.drawCircle(cx, cy, r, needlecolor); 1225 Screen.drawCircle(cx, cy, r - 1, needlecolor); 1226 Screen.setTextColor(textcolor, dialcolor); 1227 Screen.setTextSize(1); 1228 Screen.setFont(&FreeSans9pt7b); 1229 Screen.setCursor(cx - 15, cy + 30); 1230 Screen.println(label); 1231 Screen.setFont(); 1232 } 1233 1234 // Draw the current value. 1235 1236 Screen.setTextSize(1); 1237 Screen.setTextColor(textcolor, dialcolor); 1238 Screen.setCursor(cx - 7, cy + 40); 1239 Screen.println(Format(curval, dig, dec)); 1240 1241 // Center the scale about the vertical axis--and use this to offset the needle, and scale text. 1242 1243 offset = (270 + sa / 2) * degtorad; 1244 1245 // Find the scale step value based on the hival low val and the scale sweep angle. 1246 // Deducting a small value to eliminate round off errors, this val may need to be adjusted. 1247 1248 stepval = (inc) * (double(sa) / (double(hival - loval))) + .00; 1249 1250 // Draw the scale and numbers, note draw this each time to repaint where the needle was. 1251 1252 for (i = 0; i <= sa; i += stepval) { 1253 angle = (i * degtorad); 1254 angle = offset - angle; 1255 ox = (r - 2) * cos(angle) + cx; 1256 oy = (r - 2) * sin(angle) + cy; 1257 ix = (r - 10) * cos(angle) + cx; 1258 iy = (r - 10) * sin(angle) + cy; 1259 tx = (r - 10) * cos(angle) + cx; 1260 ty = (r - 15) * sin(angle) + cy; 1261 Screen.drawLine(ox, oy, ix, iy, textcolor); 1262 Screen.setTextSize(1.5); 1263 Screen.setTextColor(textcolor, dialcolor); 1264 Screen.setCursor(tx - 7, ty); 1265 data = hival - (i * (inc / stepval)); 1266 Screen.println(Format(data, dig, dec)); 1267 } 1268 1269 // Compute and draw the needle. 1270 1271 angle = (sa * (1 - (((curval - loval) / (hival - loval))))); 1272 angle = angle * degtorad; 1273 angle = offset - angle; 1274 ix = (r - 10) * cos(angle) + cx; 1275 iy = (r - 10) * sin(angle) + cy; 1276 1277 // Draw a triangle for the needle (compute and store 3 vertiticies). 1278 1279 lx = 5 * cos(angle - 90 * degtorad) + cx; 1280 ly = 5 * sin(angle - 90 * degtorad) + cy; 1281 rx = 5 * cos(angle + 90 * degtorad) + cx; 1282 ry = 5 * sin(angle + 90 * degtorad) + cy; 1283 1284 // First draw the previous needle in dial color to hide it, note draw performance for triangle is pretty bad. 1285 1286 //d.fillTriangle (pix, piy, plx, ply, prx, pry, dialcolor); 1287 //d.fillTriangle (pix, piy, plx, ply, prx, pry, dialcolor); 1288 1289 //d.fillTriangle (pix, piy, plx, ply, prx - 20, pry - 20, dialcolor); 1290 //d.fillTriangle (pix, piy, prx, pry, prx + 20, pry + 20, dialcolor); 1291 1292 Screen.fillTriangle(pix, piy, plx, ply, prx, pry, dialcolor); 1293 Screen.drawTriangle(pix, piy, plx, ply, prx, pry, dialcolor); 1294 1295 // Then draw the old needle in need color to display it. 1296 1297 Screen.fillTriangle(ix, iy, lx, ly, rx, ry, needlecolor); 1298 Screen.drawTriangle(ix, iy, lx, ly, rx, ry, textcolor); 1299 1300 // Draw a cute little dial center. 1301 1302 Screen.fillCircle(cx, cy, 8, textcolor); 1303 1304 //Save all current to old so the previous dial can be hidden. 1305 1306 pix = ix; 1307 piy = iy; 1308 plx = lx; 1309 ply = ly; 1310 prx = rx; 1311 pry = ry; 1312 1313} // Close function. 1314 1315/*-----------------------------------------------------------------*/ 1316 1317void ptSessionTimeV1(Adafruit_ST7735& Screen, double x, double y, double w, double h, double loval, double hival, double inc, double curval, int dig, int dec, unsigned int barcolor, unsigned int voidcolor, unsigned int bordercolor, unsigned int textcolor, unsigned int backcolor, String label, boolean& redraw) { 1318 1319 Screen.setFont(&FreeSans9pt7b); 1320 Screen.setTextSize(1); 1321 Screen.setTextColor(ST77XX_WHITE); 1322 Screen.setCursor(20, 20); 1323 Screen.println("Session Times"); 1324 Screen.setFont(); 1325 1326 double stepval, range; 1327 double my, level; 1328 double i, data; 1329 // draw the border, scale, and label once. 1330 // avoid doing this on every update to minimize flicker. 1331 if (redraw == true) { 1332 redraw = false; 1333 1334 Screen.drawRect(x - 1, y - h - 1, w + 2, h + 2, bordercolor); 1335 Screen.setTextColor(textcolor, backcolor); 1336 Screen.setTextSize(1); 1337 Screen.setCursor(x + 2, y + 7); 1338 Screen.println(label); 1339 // step val basically scales the hival and low val to the height 1340 // deducting a small value to eliminate round off errors 1341 // this val may need to be adjusted. 1342 stepval = (inc) * (double(h) / (double(hival - loval))) - 0; 1343 for (i = 0; i <= h; i += stepval) { 1344 my = y - h + i; 1345 Screen.drawFastHLine(x + w + 1, my + 1, 5, textcolor); 1346 // draw lables 1347 Screen.setTextSize(1); 1348 Screen.setTextColor(BLACK, backcolor); 1349 Screen.setCursor(x + w + 12, my - 3); 1350 data = hival - (i * (inc / stepval)); 1351 Screen.println(Format(data, dig, dec)); 1352 Screen.setFont(); 1353 } 1354 } 1355 // compute level of bar graph that is scaled to the height and the hi and low vals 1356 // this is needed to accompdate for +/- range 1357 level = (h * (((curval - loval) / (hival - loval)))); 1358 // draw the bar graph 1359 // write a upper and lower bar to minimize flicker cause by blanking out bar and redraw on update 1360 Screen.fillRect(x, y - h, w, h - level, voidcolor); 1361 Screen.fillRect(x, y - level + 1, w, level, barcolor); 1362 // write the current value 1363 /* 1364 tft.setTextColor(textcolor, backcolor); 1365 tft.setTextSize(1); 1366 tft.setCursor(x , y - h - 23); 1367 tft.println(Format(curval, dig, dec)); 1368 */ 1369 1370} // Close function. 1371 1372/*-----------------------------------------------------------------*/ 1373 1374void ptSessionTimeV2(Adafruit_ST7735& Screen, double x, double y, double w, double h, double loval, double hival, double inc, double curval, int dig, int dec, unsigned int barcolor, unsigned int voidcolor, unsigned int bordercolor, unsigned int textcolor, unsigned int backcolor, String label, boolean& redraw) { 1375 1376 double stepval, range; 1377 double my, level; 1378 double i, data; 1379 // draw the border, scale, and label once 1380 // avoid doing this on every update to minimize flicker 1381 if (redraw == true) { 1382 redraw = false; 1383 1384 Screen.drawRect(x - 1, y - h - 1, w + 2, h + 2, bordercolor); 1385 Screen.setTextColor(textcolor, backcolor); 1386 Screen.setTextSize(1); 1387 Screen.setCursor(x + 2, y + 7); 1388 Screen.println(label); 1389 // step val basically scales the hival and low val to the height 1390 // deducting a small value to eliminate round off errors 1391 // this val may need to be adjusted 1392 stepval = (inc) * (double(h) / (double(hival - loval))) - 0; 1393 for (i = 0; i <= h; i += stepval) { 1394 my = y - h + i; 1395 Screen.drawFastHLine(x + w + 1, my + 1, 5, textcolor); 1396 // draw lables 1397 Screen.setTextSize(1); 1398 Screen.setTextColor(BLACK, backcolor); 1399 Screen.setCursor(x + w + 12, my - 3); 1400 data = hival - (i * (inc / stepval)); 1401 Screen.println(Format(data, dig, dec)); 1402 } 1403 } 1404 // compute level of bar graph that is scaled to the height and the hi and low vals 1405 // this is needed to accompdate for +/- range 1406 level = (h * (((curval - loval) / (hival - loval)))); 1407 // draw the bar graph 1408 // write a upper and lower bar to minimize flicker cause by blanking out bar and redraw on update 1409 Screen.fillRect(x, y - h, w, h - level, voidcolor); 1410 Screen.fillRect(x, y - level + 1, w, level, barcolor); 1411 // write the current value 1412 /* 1413 tft.setTextColor(textcolor, backcolor); 1414 tft.setTextSize(1); 1415 tft.setCursor(x , y - h - 23); 1416 tft.println(Format(curval, dig, dec)); 1417 */ 1418 1419} // Close function. 1420 1421/*-----------------------------------------------------------------*/ 1422 1423void ptSessionTimeV3(Adafruit_ST7735& Screen, double x, double y, double w, double h, double loval, double hival, double inc, double curval, int dig, int dec, unsigned int barcolor, unsigned int voidcolor, unsigned int bordercolor, unsigned int textcolor, unsigned int backcolor, String label, boolean& redraw) { 1424 1425 double stepval, range; 1426 double my, level; 1427 double i, data; 1428 // draw the border, scale, and label once 1429 // avoid doing this on every update to minimize flicker 1430 if (redraw == true) { 1431 redraw = false; 1432 1433 Screen.drawRect(x - 1, y - h - 1, w + 2, h + 2, bordercolor); 1434 Screen.setTextColor(textcolor, backcolor); 1435 Screen.setTextSize(1); 1436 Screen.setCursor(x + 2, y + 7); 1437 Screen.println(label); 1438 // step val basically scales the hival and low val to the height 1439 // deducting a small value to eliminate round off errors 1440 // this val may need to be adjusted 1441 stepval = (inc) * (double(h) / (double(hival - loval))) - 0; 1442 for (i = 0; i <= h; i += stepval) { 1443 my = y - h + i; 1444 Screen.drawFastHLine(x + w + 1, my + 1, 5, textcolor); 1445 // draw lables 1446 Screen.setTextSize(1); 1447 Screen.setTextColor(textcolor, backcolor); 1448 Screen.setCursor(x + w + 12, my - 3); 1449 data = hival - (i * (inc / stepval)); 1450 Screen.println(Format(data, dig, dec)); 1451 } 1452 } 1453 // compute level of bar graph that is scaled to the height and the hi and low vals 1454 // this is needed to accompdate for +/- range 1455 level = (h * (((curval - loval) / (hival - loval)))); 1456 // draw the bar graph 1457 // write a upper and lower bar to minimize flicker cause by blanking out bar and redraw on update 1458 Screen.fillRect(x, y - h, w, h - level, voidcolor); 1459 Screen.fillRect(x, y - level + 1, w, level, barcolor); 1460 // write the current value 1461 /* 1462 tft.setTextColor(textcolor, backcolor); 1463 tft.setTextSize(1); 1464 tft.setCursor(x , y - h - 23); 1465 tft.println(Format(curval, dig, dec)); 1466 */ 1467 1468} // Close function. 1469 1470/*-----------------------------------------------------------------*/ 1471 1472void ptSessionDistanceV1(Adafruit_ST7735& Screen, double x, double y, double w, double h, double loval, double hival, double inc, double curval, int dig, int dec, unsigned int barcolor, unsigned int voidcolor, unsigned int bordercolor, unsigned int textcolor, unsigned int backcolor, String label, boolean& redraw) 1473{ 1474 1475 Screen.setFont(&FreeSans9pt7b); 1476 Screen.setTextSize(1); 1477 Screen.setTextColor(ST77XX_WHITE); 1478 Screen.setCursor(4, 20); 1479 Screen.println("Session Distances"); 1480 Screen.setFont(); 1481 1482 double stepval, range; 1483 double my, level; 1484 double i, data; 1485 // draw the border, scale, and label once. 1486 // avoid doing this on every update to minimize flicker. 1487 if (redraw == true) { 1488 redraw = false; 1489 1490 Screen.drawRect(x - 1, y - h - 1, w + 2, h + 2, bordercolor); 1491 Screen.setTextColor(textcolor, backcolor); 1492 Screen.setTextSize(1); 1493 Screen.setCursor(x + 2, y + 7); 1494 Screen.println(label); 1495 // step val basically scales the hival and low val to the height 1496 // deducting a small value to eliminate round off errors 1497 // this val may need to be adjusted. 1498 stepval = (inc) * (double(h) / (double(hival - loval))) - 0; 1499 for (i = 0; i <= h; i += stepval) { 1500 my = y - h + i; 1501 Screen.drawFastHLine(x + w + 1, my, 5, textcolor); 1502 // draw lables 1503 Screen.setTextSize(1); 1504 Screen.setTextColor(BLACK, backcolor); 1505 Screen.setCursor(x + w + 12, my - 3); 1506 data = hival - (i * (inc / stepval)); 1507 Screen.println(Format(data, dig, dec)); 1508 Screen.setFont(); 1509 } 1510 } 1511 // compute level of bar graph that is scaled to the height and the hi and low vals 1512 // this is needed to accompdate for +/- range 1513 level = (h * (((curval - loval) / (hival - loval)))); 1514 // draw the bar graph 1515 // write a upper and lower bar to minimize flicker cause by blanking out bar and redraw on update 1516 Screen.fillRect(x, y - h, w, h - level, voidcolor); 1517 Screen.fillRect(x, y - level + 1, w, level, barcolor); 1518 // write the current value 1519 /* 1520 tft.setTextColor(textcolor, backcolor); 1521 tft.setTextSize(1); 1522 tft.setCursor(x , y - h - 23); 1523 tft.println(Format(curval, dig, dec)); 1524 */ 1525 1526} // Close function. 1527 1528/*-----------------------------------------------------------------*/ 1529 1530void ptSessionDistanceV2(Adafruit_ST7735& Screen, double x, double y, double w, double h, double loval, double hival, double inc, double curval, int dig, int dec, unsigned int barcolor, unsigned int voidcolor, unsigned int bordercolor, unsigned int textcolor, unsigned int backcolor, String label, boolean& redraw) 1531{ 1532 1533 double stepval, range; 1534 double my, level; 1535 double i, data; 1536 // draw the border, scale, and label once 1537 // avoid doing this on every update to minimize flicker 1538 if (redraw == true) { 1539 redraw = false; 1540 1541 Screen.drawRect(x - 1, y - h - 1, w + 2, h + 2, bordercolor); 1542 Screen.setTextColor(textcolor, backcolor); 1543 Screen.setTextSize(1); 1544 Screen.setCursor(x + 2, y + 7); 1545 Screen.println(label); 1546 // step val basically scales the hival and low val to the height 1547 // deducting a small value to eliminate round off errors 1548 // this val may need to be adjusted 1549 stepval = (inc) * (double(h) / (double(hival - loval))) - 0; 1550 for (i = 0; i <= h; i += stepval) { 1551 my = y - h + i; 1552 Screen.drawFastHLine(x + w + 1, my, 5, textcolor); 1553 // draw lables 1554 Screen.setTextSize(1); 1555 Screen.setTextColor(BLACK, backcolor); 1556 Screen.setCursor(x + w + 12, my - 3); 1557 data = hival - (i * (inc / stepval)); 1558 Screen.println(Format(data, dig, dec)); 1559 } 1560 } 1561 // compute level of bar graph that is scaled to the height and the hi and low vals 1562 // this is needed to accompdate for +/- range 1563 level = (h * (((curval - loval) / (hival - loval)))); 1564 // draw the bar graph 1565 // write a upper and lower bar to minimize flicker cause by blanking out bar and redraw on update 1566 Screen.fillRect(x, y - h, w, h - level, voidcolor); 1567 Screen.fillRect(x, y - level + 1, w, level, barcolor); 1568 // write the current value 1569 /* 1570 tft.setTextColor(textcolor, backcolor); 1571 tft.setTextSize(1); 1572 tft.setCursor(x , y - h - 23); 1573 tft.println(Format(curval, dig, dec)); 1574 */ 1575 1576} // Close function. 1577 1578/*-----------------------------------------------------------------*/ 1579 1580void ptSessionDistanceV3(Adafruit_ST7735& Screen, double x, double y, double w, double h, double loval, double hival, double inc, double curval, int dig, int dec, unsigned int barcolor, unsigned int voidcolor, unsigned int bordercolor, unsigned int textcolor, unsigned int backcolor, String label, boolean& redraw) 1581{ 1582 1583 double stepval, range; 1584 double my, level; 1585 double i, data; 1586 // draw the border, scale, and label once 1587 // avoid doing this on every update to minimize flicker 1588 if (redraw == true) { 1589 redraw = false; 1590 1591 Screen.drawRect(x - 1, y - h - 1, w + 2, h + 2, bordercolor); 1592 Screen.setTextColor(textcolor, backcolor); 1593 Screen.setTextSize(1); 1594 Screen.setCursor(x + 2, y + 7); 1595 Screen.println(label); 1596 // step val basically scales the hival and low val to the height 1597 // deducting a small value to eliminate round off errors 1598 // this val may need to be adjusted 1599 stepval = (inc) * (double(h) / (double(hival - loval))) - 0; 1600 for (i = 0; i <= h; i += stepval) { 1601 my = y - h + i; 1602 Screen.drawFastHLine(x + w + 1, my, 5, textcolor); 1603 // draw lables 1604 Screen.setTextSize(1); 1605 Screen.setTextColor(textcolor, backcolor); 1606 Screen.setCursor(x + w + 7, my - 3); 1607 data = hival - (i * (inc / stepval)); 1608 Screen.println(Format(data, dig, dec)); 1609 } 1610 } 1611 // compute level of bar graph that is scaled to the height and the hi and low vals 1612 // this is needed to accompdate for +/- range 1613 level = (h * (((curval - loval) / (hival - loval)))); 1614 // draw the bar graph 1615 // write a upper and lower bar to minimize flicker cause by blanking out bar and redraw on update 1616 Screen.fillRect(x, y - h, w, h - level, voidcolor); 1617 Screen.fillRect(x, y - level + 1, w, level, barcolor); 1618 // write the current value 1619 /* 1620 tft.setTextColor(textcolor, backcolor); 1621 tft.setTextSize(1); 1622 tft.setCursor(x , y - h - 23); 1623 tft.println(Format(curval, dig, dec)); 1624 */ 1625 1626} // Close function. 1627 1628/*-----------------------------------------------------------------*/ 1629 1630String Format(double val, int dec, int dig) { 1631 int addpad = 0; 1632 char sbuf[20]; 1633 String condata = (dtostrf(val, dec, dig, sbuf)); 1634 1635 1636 int slen = condata.length(); 1637 for (addpad = 1; addpad <= dec + dig - slen; addpad++) { 1638 condata = " " + condata; 1639 } 1640 return (condata); 1641 1642} // Close function. 1643 1644/*-----------------------------------------------------------------*/ 1645 1646void averageSpeed() { 1647 1648 // Subtract the last reading. 1649 1650 total = total - readings[readIndex]; 1651 1652 // Get latest Kph. 1653 1654 readings[readIndex] = speedKph; 1655 1656 // Add the reading to the total. 1657 1658 total = total + readings[readIndex]; 1659 1660 // Advance to the next position in the average array. 1661 1662 readIndex = readIndex + 1; 1663 1664 // If we're at the end of the array. 1665 1666 if (readIndex >= numReadings) { 1667 1668 readIndex = 0; 1669 1670 } // Close if. 1671 1672} // Close function. 1673 1674/*-----------------------------------------------------------------*/ 1675 1676void lcdBackLight() { 1677 1678 if (displayBackLight == 0) { 1679 1680 digitalWrite(lcdBackLightPin, LOW); 1681 1682 } // Close if. 1683 1684 else digitalWrite(lcdBackLightPin, HIGH); 1685 1686} // Close function. 1687 1688/*-----------------------------------------------------------------*/ 1689 1690ICACHE_RAM_ATTR void screenMenuISR() { 1691 1692 static unsigned long last_interrupt_time = 0; // Function to solve debounce 1693 unsigned long interrupt_time = millis(); 1694 1695 if (interrupt_time - last_interrupt_time > 800) 1696 { 1697 1698 detachInterrupt(interruptMenuButton); 1699 1700 if (screenMenu == 0) { 1701 1702 screenMenu = 1; 1703 dial_1 = true; 1704 screenRedraw = 1; 1705 1706 } // Close if. 1707 1708 else if (screenMenu == 1) { 1709 1710 screenMenu = 2; 1711 screenRedraw = 1; 1712 configurationFlag = 0; 1713 1714 } // Close else 1715 1716 else if (screenMenu == 2) { 1717 1718 screenMenu = 3; 1719 graph_1 = true; 1720 graph_2 = true; 1721 graph_3 = true; 1722 graph_4 = true; 1723 graph_5 = true; 1724 graph_6 = true; 1725 graph_7 = true; 1726 screenRedraw = 1; 1727 1728 } // Close else 1729 1730 else if (screenMenu == 3) { 1731 1732 screenMenu = 4; 1733 graph_8 = true; 1734 graph_9 = true; 1735 graph_10 = true; 1736 graph_11 = true; 1737 graph_12 = true; 1738 graph_13 = true; 1739 graph_14 = true; 1740 screenRedraw = 1; 1741 1742 } // Close else 1743 1744 else if (screenMenu == 4) { 1745 1746 screenMenu = 0; 1747 screenRedraw = 1; 1748 1749 } // Close else 1750 1751 } // Close if. 1752 1753 attachInterrupt(digitalPinToInterrupt(interruptMenuButton), screenMenuISR, FALLING); 1754 last_interrupt_time = interrupt_time; 1755 1756} // Close function. 1757 1758/*-----------------------------------------------------------------*/ 1759 1760ICACHE_RAM_ATTR void wakeInterruptISR() { 1761 1762 static unsigned long last_interrupt_time = 0; // Function to solve debounce 1763 unsigned long interrupt_time = millis(); 1764 1765 if (interrupt_time - last_interrupt_time > 50) 1766 { 1767 if (wakeInterrupt == 1) { 1768 1769 wakeInterrupt = 0; 1770 displayBackLight = 0; 1771 1772 } // Close if. 1773 1774 else ( 1775 wakeInterrupt = 1, 1776 displayBackLight = 1 1777 1778 ); // Close else. 1779 1780 } // Close if. 1781 1782 last_interrupt_time = interrupt_time; 1783 1784} // Close function. 1785 1786/*-----------------------------------------------------------------*/ 1787 1788ICACHE_RAM_ATTR void rotationInterruptISR() { 1789 1790 static unsigned long last_interrupt_time = 0; // Function to solve debounce 1791 unsigned long interrupt_time = millis(); 1792 1793 if (interrupt_time - last_interrupt_time > 100) { 1794 1795 detachInterrupt(interruptWheelSensor); 1796 1797 passedTime = millis() - startTime; 1798 startTime = millis(); 1799 1800 rpm = (60000 * circumference) / passedTime; // Revs per minute. 1801 speedKph = (3600 * circumference) / passedTime; // km/h. 1802 speedMph = (3600 * circImperial) / passedTime; // Miles per hour. 1803 1804 distanceCounter++; 1805 eeTotalDistanceChange = true; 1806 distanceTravelled = distanceCounter * circumference; 1807 1808 if (sessionTimeFlag == 0) { // Set session timer to start. 1809 1810 sessionTimeFlag = 1; 1811 sessionStartTime = millis(); 1812 sessionStartDistance = distanceTravelled; 1813 recordSessions = 0; 1814 1815 } // Close if. 1816 1817 lastRotation1 = millis(); 1818 lastRotation2 = lastRotation1 + 4000; 1819 1820 attachInterrupt(digitalPinToInterrupt(interruptWheelSensor), rotationInterruptISR, FALLING); 1821 1822 } // Close if. 1823 1824 last_interrupt_time = interrupt_time; 1825 1826} // Close function. 1827 1828/*-----------------------------------------------------------------*/ 1829 1830void lightSleep() { 1831 1832 if (wakeInterrupt == 0) { 1833 1834 wifi_station_disconnect(); 1835 wifi_set_opmode_current(NULL_MODE); 1836 wifi_fpm_set_sleep_type(LIGHT_SLEEP_T); 1837 wifi_fpm_open(); // Enables force sleep 1838 wifi_fpm_do_sleep(FPM_SLEEP_MAX_TIME); // Sleep for longest possible time 1839 delay(200); 1840 1841 } // Close if. 1842 1843 else {} // Do nothing 1844 1845} // Close function. 1846 1847/*-----------------------------------------------------------------*/ 1848 1849void drawBatteryBitmap(int x, int y, const uint16_t* bitmap, int bw, int bh) { 1850 1851 //int h = 64, w = 64, row, col, buffidx = 0; 1852 int buffidx = 0; 1853 int row; 1854 int col; 1855 int w = bw + y; 1856 int h = bh + x; 1857 1858 for (row = x; row < h; row++) { // For each scanline... 1859 for (col = y; col < w; col++) { // For each pixel... 1860 //To read from Flash Memory, pgm_read_XXX is required. 1861 //Since image is stored as uint16_t, pgm_read_word is used as it uses 16bit address 1862 tft.drawPixel(col, row, pgm_read_word(bitmap + buffidx)); 1863 buffidx++; 1864 } // end pixel 1865 } 1866 1867} // Close function. 1868 1869/*-----------------------------------------------------------------*/ 1870 1871void resetSystemData() { 1872 1873 eeMenuSetting = 0; 1874 EEPROM.put(eeMenuAddress, eeMenuSetting); 1875 EEPROM.commit(); 1876 1877 eeCircSetting = 1.00; 1878 EEPROM.put(eeCircAddress, eeCircSetting); 1879 EEPROM.commit(); 1880 1881 eeTotalDistance = 0.00; 1882 EEPROM.put(eeTotalDistanceAddress, eeTotalDistance); 1883 EEPROM.commit(); 1884 1885 eeSessionArrayPosition = 0; 1886 EEPROM.put(eeSessionArrayPositionAddress, eeSessionArrayPosition); 1887 1888 EEPROM.put(eeSessionTimeArray1Address, 0); // Populate arrays with zero data. 1889 EEPROM.put(eeSessionTimeArray2Address, 0); 1890 EEPROM.put(eeSessionTimeArray3Address, 0); 1891 EEPROM.put(eeSessionTimeArray4Address, 0); 1892 EEPROM.put(eeSessionTimeArray5Address, 0); 1893 EEPROM.put(eeSessionTimeArray6Address, 0); 1894 EEPROM.put(eeSessionTimeArray7Address, 0); 1895 EEPROM.commit(); 1896 1897 EEPROM.put(eeSessionDistanceArray1Address, 0); 1898 EEPROM.put(eeSessionDistanceArray2Address, 0); 1899 EEPROM.put(eeSessionDistanceArray3Address, 0); 1900 EEPROM.put(eeSessionDistanceArray4Address, 0); 1901 EEPROM.put(eeSessionDistanceArray5Address, 0); 1902 EEPROM.put(eeSessionDistanceArray6Address, 0); 1903 EEPROM.put(eeSessionDistanceArray7Address, 0); 1904 EEPROM.commit(); 1905 1906 eeResetSetting = 0; 1907 EEPROM.put(eeResetSettingAddress, 0); 1908 EEPROM.commit(); 1909 1910 EEPROM.get(eeMenuAddress, eeMenuSetting); 1911 EEPROM.get(eeCircAddress, eeCircSetting); 1912 EEPROM.get(eeMenuAddress, screenMenu); 1913 EEPROM.get(eeCircAddress, circumference); 1914 EEPROM.get(eeTotalDistanceAddress, distanceCounter); 1915 1916 EEPROM.commit(); 1917 1918 EEPROM.get(eeSessionTimeArray1Address, sessionTimeArray[0]); 1919 EEPROM.get(eeSessionTimeArray2Address, sessionTimeArray[1]); 1920 EEPROM.get(eeSessionTimeArray3Address, sessionTimeArray[2]); 1921 EEPROM.get(eeSessionTimeArray4Address, sessionTimeArray[3]); 1922 EEPROM.get(eeSessionTimeArray5Address, sessionTimeArray[4]); 1923 EEPROM.get(eeSessionTimeArray6Address, sessionTimeArray[5]); 1924 EEPROM.get(eeSessionTimeArray7Address, sessionTimeArray[6]); 1925 1926 EEPROM.commit(); 1927 1928 sessionTimeArray1 = sessionTimeArray[0] / 1000 / 60; // Times to be updated, needs to be divided by 1000. 1929 sessionTimeArray2 = sessionTimeArray[1] / 1000 / 60; 1930 sessionTimeArray3 = sessionTimeArray[2] / 1000 / 60; 1931 sessionTimeArray4 = sessionTimeArray[3] / 1000 / 60; 1932 sessionTimeArray5 = sessionTimeArray[4] / 1000 / 60; 1933 sessionTimeArray6 = sessionTimeArray[5] / 1000 / 60; 1934 sessionTimeArray7 = sessionTimeArray[6] / 1000 / 60; 1935 1936 EEPROM.get(eeSessionDistanceArray1Address, distanceTravelledArray[0]); 1937 EEPROM.get(eeSessionDistanceArray2Address, distanceTravelledArray[1]); 1938 EEPROM.get(eeSessionDistanceArray3Address, distanceTravelledArray[2]); 1939 EEPROM.get(eeSessionDistanceArray4Address, distanceTravelledArray[3]); 1940 EEPROM.get(eeSessionDistanceArray5Address, distanceTravelledArray[4]); 1941 EEPROM.get(eeSessionDistanceArray6Address, distanceTravelledArray[5]); 1942 EEPROM.get(eeSessionDistanceArray7Address, distanceTravelledArray[6]); 1943 1944 EEPROM.commit(); 1945 1946 distanceTravelledArray1 = distanceTravelledArray[0]; 1947 distanceTravelledArray2 = distanceTravelledArray[1]; 1948 distanceTravelledArray3 = distanceTravelledArray[2]; 1949 distanceTravelledArray4 = distanceTravelledArray[3]; 1950 distanceTravelledArray5 = distanceTravelledArray[4]; 1951 distanceTravelledArray6 = distanceTravelledArray[5]; 1952 distanceTravelledArray7 = distanceTravelledArray[6]; 1953 1954} // Close function. 1955 1956/*-----------------------------------------------------------------*/ 1957 1958void resetSystemDemoData() { 1959 1960 eeMenuSetting = 0; 1961 EEPROM.put(eeMenuAddress, eeMenuSetting); 1962 EEPROM.commit(); 1963 1964 eeCircSetting = 0.75; 1965 EEPROM.put(eeCircAddress, eeCircSetting); 1966 EEPROM.commit(); 1967 1968 eeTotalDistance = 5000.00; 1969 EEPROM.put(eeTotalDistanceAddress, eeTotalDistance); 1970 EEPROM.commit(); 1971 1972 eeSessionArrayPosition = 0; 1973 EEPROM.put(eeSessionArrayPositionAddress, eeSessionArrayPosition); 1974 1975 EEPROM.put(eeSessionTimeArray1Address, 240000); // Populate arrays with demo data. 1976 EEPROM.put(eeSessionTimeArray2Address, 300000); 1977 EEPROM.put(eeSessionTimeArray3Address, 360000); 1978 EEPROM.put(eeSessionTimeArray4Address, 420000); 1979 EEPROM.put(eeSessionTimeArray5Address, 480000); 1980 EEPROM.put(eeSessionTimeArray6Address, 540000); 1981 EEPROM.put(eeSessionTimeArray7Address, 660000); 1982 EEPROM.commit(); 1983 1984 EEPROM.put(eeSessionDistanceArray1Address, 8); 1985 EEPROM.put(eeSessionDistanceArray2Address, 10); 1986 EEPROM.put(eeSessionDistanceArray3Address, 12); 1987 EEPROM.put(eeSessionDistanceArray4Address, 14); 1988 EEPROM.put(eeSessionDistanceArray5Address, 16); 1989 EEPROM.put(eeSessionDistanceArray6Address, 18); 1990 EEPROM.put(eeSessionDistanceArray7Address, 20); 1991 EEPROM.commit(); 1992 1993 eeResetSetting = 0; 1994 EEPROM.put(eeResetSettingAddress, 0); 1995 EEPROM.commit(); 1996 1997 EEPROM.get(eeMenuAddress, eeMenuSetting); 1998 EEPROM.get(eeCircAddress, eeCircSetting); 1999 EEPROM.get(eeMenuAddress, screenMenu); 2000 EEPROM.get(eeCircAddress, circumference); 2001 EEPROM.get(eeTotalDistanceAddress, distanceCounter); 2002 2003 EEPROM.commit(); 2004 2005 EEPROM.get(eeSessionTimeArray1Address, sessionTimeArray[0]); 2006 EEPROM.get(eeSessionTimeArray2Address, sessionTimeArray[1]); 2007 EEPROM.get(eeSessionTimeArray3Address, sessionTimeArray[2]); 2008 EEPROM.get(eeSessionTimeArray4Address, sessionTimeArray[3]); 2009 EEPROM.get(eeSessionTimeArray5Address, sessionTimeArray[4]); 2010 EEPROM.get(eeSessionTimeArray6Address, sessionTimeArray[5]); 2011 EEPROM.get(eeSessionTimeArray7Address, sessionTimeArray[6]); 2012 2013 EEPROM.commit(); 2014 2015 sessionTimeArray1 = sessionTimeArray[0] / 100 / 60; // Times to be updated, needs to be divided by 1000. 2016 sessionTimeArray2 = sessionTimeArray[1] / 100 / 60; 2017 sessionTimeArray3 = sessionTimeArray[2] / 100 / 60; 2018 sessionTimeArray4 = sessionTimeArray[3] / 100 / 60; 2019 sessionTimeArray5 = sessionTimeArray[4] / 100 / 60; 2020 sessionTimeArray6 = sessionTimeArray[5] / 100 / 60; 2021 sessionTimeArray7 = sessionTimeArray[6] / 100 / 60; 2022 2023 EEPROM.get(eeSessionDistanceArray1Address, distanceTravelledArray[0]); 2024 EEPROM.get(eeSessionDistanceArray2Address, distanceTravelledArray[1]); 2025 EEPROM.get(eeSessionDistanceArray3Address, distanceTravelledArray[2]); 2026 EEPROM.get(eeSessionDistanceArray4Address, distanceTravelledArray[3]); 2027 EEPROM.get(eeSessionDistanceArray5Address, distanceTravelledArray[4]); 2028 EEPROM.get(eeSessionDistanceArray6Address, distanceTravelledArray[5]); 2029 EEPROM.get(eeSessionDistanceArray7Address, distanceTravelledArray[6]); 2030 2031 EEPROM.commit(); 2032 2033 distanceTravelledArray1 = distanceTravelledArray[0]; 2034 distanceTravelledArray2 = distanceTravelledArray[1]; 2035 distanceTravelledArray3 = distanceTravelledArray[2]; 2036 distanceTravelledArray4 = distanceTravelledArray[3]; 2037 distanceTravelledArray5 = distanceTravelledArray[4]; 2038 distanceTravelledArray6 = distanceTravelledArray[5]; 2039 distanceTravelledArray7 = distanceTravelledArray[6]; 2040 2041} // Close function. 2042 2043/*-----------------------------------------------------------------*/
PetBit Battery Images
arduino
This is the hex code for the battery % images which are on the configuration screen
1#pragma once 2 3#define batteryIcons_h 4 5const uint16_t ccBatt100[] PROGMEM = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 60x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x630c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 70x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 80x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x39c7, 0x5acb, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 90x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x0901, 0x0000, 0x18a3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 100x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55aa, 0x5e4b, 0x11e3, 0x20c4, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 110x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d49, 0x55ca, 0x11a2, 0x20c4, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 120x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x55eb, 0x11c2, 0x20c4, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 130x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x55eb, 0x11c2, 0x20c4, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 140x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x55eb, 0x11c2, 0x20c4, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 150x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x55eb, 0x11c2, 0x20c4, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 160x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d49, 0x55ca, 0x11a2, 0x20c4, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 170x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55aa, 0x5e4b, 0x11e3, 0x20c4, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 180x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x0901, 0x0000, 0x18a3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 190x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x39c7, 0x5acb, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 200x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 210x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x5aeb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 220x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; 23 24 25const uint16_t ccBatt80[] PROGMEM = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 260x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x630c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 270x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 280x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x31a7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 290x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x08c0, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 300x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x4deb, 0x6549, 0xf820, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 310x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d49, 0x458a, 0x5ce8, 0xf000, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 320x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d69, 0x458a, 0x5ce9, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 330x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d69, 0x458a, 0x5ce9, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 340x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d69, 0x458a, 0x5ce9, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 350x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d69, 0x458a, 0x5ce9, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 360x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d49, 0x458a, 0x5ce8, 0xf000, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 370x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x4deb, 0x6549, 0xf820, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 380x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x08c0, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 390x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x31a7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 400x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 410x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x5aeb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 420x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; 43 44 45const uint16_t ccBatt60[] PROGMEM = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 460x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x630c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 470x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 480x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x31c7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 490x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x0100, 0x1820, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 500x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55aa, 0x464b, 0xaae5, 0xf800, 0xf820, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 510x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d49, 0x3dca, 0xa2a4, 0xf800, 0xf000, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 520x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x3dea, 0xa2a4, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 530x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x3dea, 0xa2a4, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 540x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x3dea, 0xa2a4, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 550x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x3dea, 0xa2a4, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 560x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d49, 0x3dca, 0xa2a4, 0xf800, 0xf000, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 570x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55aa, 0x464b, 0xaae5, 0xf800, 0xf820, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 580x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x0100, 0x1820, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 590x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x31c7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 600x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 610x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x5aeb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 620x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; 63 64 65const uint16_t ccBatt40[] PROGMEM = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 660x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x630c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 670x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 680x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x29c7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 690x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x2800, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 700x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ea, 0x55aa, 0xf881, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 710x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d49, 0x4d69, 0x4d49, 0xe860, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 720x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d69, 0x4d8a, 0x5549, 0xe860, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 730x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d69, 0x4d8a, 0x5549, 0xe860, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 740x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d69, 0x4d8a, 0x5549, 0xe860, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 750x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d69, 0x4d8a, 0x5549, 0xe860, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 760x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d49, 0x4d69, 0x4d49, 0xe860, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 770x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ea, 0x55aa, 0xf881, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 780x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x2800, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 790x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x29c7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 800x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 810x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x5aeb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 820x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; 83 84 85const uint16_t ccBatt20[] PROGMEM = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 860x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x630c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 870x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 880x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x31a7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 890x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x0100, 0x1060, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 900x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55aa, 0x464b, 0x9b86, 0xf800, 0xf820, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 910x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d29, 0x3dca, 0x8b25, 0xf800, 0xf000, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 920x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d49, 0x3dea, 0x9346, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 930x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d49, 0x3dea, 0x9346, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 940x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d49, 0x3dea, 0x9346, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 950x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d49, 0x3dea, 0x9346, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 960x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d29, 0x3dca, 0x8b25, 0xf800, 0xf000, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 970x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55aa, 0x464b, 0x9b86, 0xf800, 0xf820, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 980x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x0100, 0x1060, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 990x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x31a7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 1000x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1010x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x5aeb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1020x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; 103 104 105const uint16_t ccBatt00[] PROGMEM = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1060x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x630c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1070x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1080x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x31e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 1090x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x2800, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 1100x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x09a2, 0xf183, 0xf800, 0xf820, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 1110x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0981, 0xe162, 0xf800, 0xf000, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 1120x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0982, 0xe162, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 1130x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0982, 0xe162, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 1140x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0982, 0xe162, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 1150x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0982, 0xe162, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 1160x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0981, 0xe162, 0xf800, 0xf000, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 1170x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x09a2, 0xf183, 0xf800, 0xf820, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 1180x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x2800, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 1190x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x31e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 1200x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1210x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x5aeb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1220x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
PetBit Start Screen Image
arduino
This is the hex code for the boot up image
1#pragma once 2 3#define startScreen_h 4 5const uint16_t startScreen 6 [] PROGMEM = { 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 7 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 8 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 9 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 10 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 11 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 12 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 130xffff, 0xffff, 0xffff, 0xffff, 0xffff, 14 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 15 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 16 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 17 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 18 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 19 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 200xffff, 21 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 22 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 23 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 24 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 25 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 26 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 27 0xffff, 0xffff, 0xffff, 280xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 29 0x0000, 0x0000, 0x0820, 0x0000, 0x0000, 0x0820, 0x72c4, 0x72a4, 0x20e1, 0x0000, 30 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 31 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x1060, 0x0000, 0x0000, 0x0000, 0x0000, 32 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 33 0x0000, 0x20e1, 0x72a4, 0x72c4, 0x0820, 0x0000, 0x0000, 0x0820, 0x0000, 0x0000, 34 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 350xffff, 0xffff, 0xffff, 36 0xffff, 0xffff, 0x0000, 0x0000, 0x4124, 0xf3d0, 0xfc10, 0xe38f, 0x69a7, 0x0000, 37 0x0020, 0xa3c6, 0xed69, 0x6a64, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 38 0x0000, 0x0000, 0x1060, 0x41a2, 0x72a4, 0x9ba6, 0xbca7, 0xe5a9, 0xfe4a, 0xfe4a, 39 0xf5e9, 0xd528, 0xb467, 0x93a5, 0x5a23, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 40 0x0000, 0x0000, 0x0000, 0x0000, 0x6a64, 0xed69, 0xa3c6, 0x0020, 0x0000, 0x69a7, 41 0xe38f, 0xfc10, 0xf3d0, 0x4124, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 42 0xffff, 430xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x4104, 0xf3f0, 0xfc10, 44 0xfc10, 0xfc10, 0xfc10, 0xa2ab, 0x0000, 0x0020, 0xc487, 0xed69, 0x8b45, 0x0000, 45 0x0000, 0x0000, 0x0000, 0x0000, 0x18a1, 0x8325, 0xeda9, 0xfe4a, 0xfe4a, 0xfe4a, 46 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xf5e9, 47 0x9bc6, 0x3962, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8325, 0xed69, 0xc487, 48 0x0020, 0x0000, 0xa28a, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xf3f0, 0x4104, 0x0000, 49 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 500xffff, 0xffff, 0xffff, 0x0000, 0x0000, 51 0x0000, 0xdb6e, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0x9249, 0x0000, 52 0x4182, 0xed69, 0xe549, 0x3942, 0x0000, 0x0000, 0x28e1, 0x9366, 0xe569, 0xf5e9, 53 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 54 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xd528, 0x3982, 0x0000, 0x0000, 55 0x3962, 0xe549, 0xed69, 0x4182, 0x0000, 0x8a49, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 56 0xfc10, 0xfc10, 0xdb6e, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 570xffff, 58 0xffff, 0xffff, 0x0000, 0x0000, 0x6186, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 59 0xfc10, 0xfc10, 0xfbf0, 0x28a2, 0x0000, 0x9365, 0x3122, 0x0000, 0x0840, 0x9ba6, 60 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 61 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 62 0xfe4a, 0xfe29, 0x8b85, 0x0820, 0x0000, 0x3142, 0x9b86, 0x0000, 0x28a2, 0xfbf0, 63 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0x6186, 0x0000, 0x0000, 64 0xffff, 0xffff, 0xffff, 650xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xaaab, 0xfc10, 66 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xaaab, 0x0000, 0x0000, 67 0x0000, 0x1881, 0xc487, 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 68 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 69 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xdd48, 0x3962, 0x0000, 70 0x0000, 0x0000, 0xaaab, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 71 0xfc10, 0xaaab, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 720xffff, 0xffff, 0xffff, 73 0x0000, 0x0000, 0xd34d, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 74 0xfc10, 0xe3af, 0x0000, 0x0000, 0x20c1, 0xccc8, 0xed69, 0xed69, 0xed89, 0xfe2a, 75 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 76 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 77 0xfe4a, 0xfe4a, 0xfe09, 0x41a2, 0x0000, 0x0000, 0xe3af, 0xfc10, 0xfc10, 0xfc10, 78 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xd34d, 0x0000, 0x0000, 0xffff, 0xffff, 79 0xffff, 800xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xfbf0, 0xfc10, 0xfc10, 0xfc10, 81 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfbf0, 0x4104, 0x0000, 0x3122, 0xdd08, 0xed69, 82 0xed69, 0xed69, 0xfe09, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 83 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 84 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xf5e9, 0x3142, 0x0000, 85 0x38e4, 0xfbf0, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfbf0, 86 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 870xffff, 0xffff, 0xffff, 0x0000, 0x1041, 88 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0x79e8, 0x0000, 89 0x3142, 0xe549, 0xed69, 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 90 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 91 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 92 0xfe4a, 0xfe4a, 0xedc9, 0x2901, 0x0000, 0x79e8, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 93 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0x1041, 0x0000, 0xffff, 0xffff, 0xffff, 940xffff, 95 0xffff, 0xffff, 0x0000, 0x0000, 0xebaf, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 96 0xfc10, 0xbaec, 0x0000, 0x0000, 0xc487, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe2a, 97 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 98 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 99 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xe5a9, 0x4182, 0x9269, 100 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xebaf, 0x0000, 0x0000, 101 0xffff, 0xffff, 0xffff, 1020xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xbaec, 0xfc10, 103 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfbf0, 0x28c3, 0x0000, 0x6a64, 0xed69, 0xed69, 104 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 105 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 106 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 107 0xfe4a, 0xfe4a, 0xfe4a, 0xfd2d, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 108 0xfc10, 0xbaec, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 1090xffff, 0xffff, 0xffff, 110 0x0000, 0x0000, 0x8a29, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xa2ab, 0x0000, 111 0x1080, 0xdd28, 0xed69, 0xed69, 0xed69, 0xed69, 0xfe09, 0xfe4a, 0xfe4a, 0xfe4a, 112 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 113 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 114 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe2a, 0xa2ea, 0xcb2d, 115 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0x8a29, 0x0000, 0x0000, 0xffff, 0xffff, 116 0xffff, 1170xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x30e3, 0xfc10, 0xfc10, 0xfc10, 118 0xfc10, 0xfbf0, 0x2082, 0x0000, 0x9b86, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 119 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 120 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 121 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 122 0xfe4a, 0xfe29, 0x0000, 0x1861, 0xfbf0, 0xfc10, 0xfc10, 0xfc10, 0xfc10, 0x30e3, 123 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 1240xffff, 0xffff, 0xffff, 0xffff, 0x0000, 125 0x0000, 0xb2cc, 0xfc10, 0xfc10, 0xfc10, 0x9a6a, 0x0000, 0x3942, 0xed69, 0xed69, 126 0xed69, 0xed69, 0xed69, 0xf5e9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 127 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 128 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 129 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x5203, 0x0000, 0x9a6a, 0xfc10, 130 0xfc10, 0xfc10, 0xb2cc, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 1310xffff, 132 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x30c3, 0xfbf0, 0xfc10, 0xfbf0, 0x2082, 133 0x0000, 0xbc47, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe2a, 0xfe4a, 0xfe4a, 134 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 135 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 136 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 137 0xd528, 0x0000, 0x2082, 0xfbf0, 0xfc10, 0xfbf0, 0x30c3, 0x0000, 0x0000, 0xffff, 138 0xffff, 0xffff, 0xffff, 1390xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 140 0x69a6, 0xfc10, 0x9a6a, 0x0000, 0x49c3, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 141 0xf5a9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 142 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 143 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 144 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x5a23, 0x0000, 0x9a6a, 0xfc10, 0x69a6, 145 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 1460xffff, 0xffff, 0xffff, 147 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x79e8, 0x2082, 0x0000, 0xc4a8, 0xed69, 148 0xed69, 0xed69, 0xed69, 0xed69, 0xfe09, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 149 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 150 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 151 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xdd68, 152 0x0000, 0x2082, 0x79e8, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 153 0xffff, 1540xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 155 0x0000, 0x5a23, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe4a, 0xfe4a, 156 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 157 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 158 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 159 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x6284, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 160 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 1610xffff, 0xffff, 0xffff, 0xffff, 0xffff, 162 0xffff, 0xffff, 0x0000, 0x0000, 0x0020, 0xd4e8, 0xed69, 0xed69, 0xed69, 0xed69, 163 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 164 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 165 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 166 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xe589, 0x0820, 167 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 1680xffff, 169 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x6a84, 0xed69, 170 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xfe29, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 171 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 172 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 173 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 174 0xfe4a, 0xfe4a, 0xfe4a, 0x72e4, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 175 0xffff, 0xffff, 0xffff, 1760xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 177 0x0000, 0x28e1, 0xe549, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5c9, 0xfe4a, 178 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 179 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 180 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 181 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe09, 0x2901, 0x0000, 182 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 1830xffff, 0xffff, 0xffff, 184 0xffff, 0xffff, 0x0000, 0x0000, 0x0020, 0xc487, 0xed69, 0xed69, 0xed69, 0xed69, 185 0xed69, 0xed89, 0xfe29, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 186 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 187 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 188 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 189 0xfe4a, 0xfe4a, 0xd528, 0x0020, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 190 0xffff, 1910xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x8325, 0xed69, 192 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 193 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 194 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 195 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 196 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x9385, 0x0000, 0x0000, 197 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 1980xffff, 0xffff, 0xffff, 0xffff, 0x0000, 199 0x0000, 0x4182, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe2a, 200 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 201 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 202 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 203 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 204 0xfe4a, 0xfe4a, 0x49c3, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 2050xffff, 206 0xffff, 0xffff, 0x0000, 0x0000, 0x1060, 0xd4e8, 0xed69, 0xed69, 0xed69, 0xed69, 207 0xed69, 0xed69, 0xf5e9, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 208 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 209 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 210 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 211 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xeda9, 0x1060, 0x0000, 0x0000, 212 0xffff, 0xffff, 0xffff, 2130xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x8b45, 0xed69, 214 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe2a, 0xfe4a, 0xfe4a, 0xfe4a, 215 0xfe4a, 0xfe2a, 0x9ba6, 0x4182, 0x20e1, 0xcd08, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 216 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 217 0xfe4a, 0xfe4a, 0xfe4a, 0x9bc6, 0x41a2, 0x20c1, 0xc4c7, 0xfe4a, 0xfe4a, 0xfe4a, 218 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 219 0xfe4a, 0x9bc6, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 2200xffff, 0xffff, 0x0000, 221 0x0000, 0x3142, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5e9, 222 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe2a, 0x5203, 0x0000, 0x0000, 0x0841, 0x5229, 223 0xac4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 224 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x5a23, 0x0000, 0x0000, 0x0020, 225 0x4a08, 0xac4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 226 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe2a, 0x3962, 0x0000, 0x0000, 0xffff, 227 0xffff, 2280xffff, 0x0000, 0x0000, 0x0000, 0xc467, 0xed69, 0xed69, 0xed69, 0xed69, 229 0xed69, 0xed69, 0xed89, 0xfe2a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x93a5, 0x0000, 230 0x0841, 0x6b2d, 0xef5d, 0xa4f4, 0x524a, 0x18c1, 0xac26, 0xfe4a, 0xfe4a, 0xfe4a, 231 0xfe4a, 0xfe4a, 0xfe8e, 0xfed1, 0xfe8e, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xa3e6, 232 0x0000, 0x0841, 0x62cc, 0xe73d, 0xad35, 0x526b, 0x18c2, 0xa406, 0xfe4a, 0xfe4a, 233 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 234 0xd508, 0x0000, 0x0000, 0x0000, 0xffff, 2350xffff, 0x0000, 0x0000, 0x3942, 0xed69, 236 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5e9, 0xfe4a, 0xfe4a, 0xfe4a, 237 0xfe4a, 0xfe4a, 0x3962, 0x0000, 0x3146, 0xf79e, 0xffff, 0xef5d, 0x4a2a, 0x0000, 238 0x49c2, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4b, 0xff37, 0xff59, 0xff59, 0xff59, 0xfed2, 239 0xfe4a, 0xfe4a, 0xfe4a, 0x41c2, 0x0000, 0x2946, 0xe73c, 0xffff, 0xf79e, 0x524a, 240 0x0000, 0x41a2, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 241 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x3982, 0x0000, 0x0000, 0xffff, 2420xffff, 243 0x0000, 0x0000, 0x9b86, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 244 0xfe29, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x0840, 0x0020, 0x49e9, 0xa4d4, 245 0xef7d, 0xa4f4, 0x5a8c, 0x0000, 0x1080, 0xfe4a, 0xfe4a, 0xfe4a, 0xfef2, 0xff59, 246 0xff59, 0xff59, 0xff59, 0xff58, 0xfe4b, 0xfe4a, 0xfe4a, 0x1080, 0x0000, 0x49e9, 247 0x9493, 0xef7d, 0xad35, 0x5a8c, 0x0020, 0x0860, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 248 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xa406, 249 0x0000, 0x0000, 0xffff, 2500x0000, 0x0000, 0x1060, 0xe549, 0xed69, 0xed69, 0xed69, 251 0xed69, 0xed69, 0xed69, 0xed89, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 252 0x0020, 0x0020, 0x49e9, 0x4a09, 0x5a8c, 0x5a8c, 0x5a8c, 0x0020, 0x0860, 0xfe4a, 253 0xfe4a, 0xfe4a, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xfe8e, 0xfe4a, 254 0xfe4a, 0x0860, 0x0020, 0x49e9, 0x49e9, 0x5a8c, 0x5a8c, 0x5a8c, 0x0821, 0x0020, 255 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 256 0xfe4a, 0xfe4a, 0xfe4a, 0xfe09, 0x1080, 0x0000, 0x0000, 2570x0000, 0x0000, 0x49c3, 258 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xf5c9, 0xfe4a, 0xfe4a, 259 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x0840, 0x0020, 0x49e9, 0x49e9, 0x5a6b, 0x5a8c, 260 0x5a8b, 0x0000, 0x1080, 0xfe4a, 0xfe4a, 0xfe8e, 0xff59, 0xff59, 0xff59, 0xff59, 261 0xff59, 0xff59, 0xfe8e, 0xfe4a, 0xfe4a, 0x1080, 0x0000, 0x49e9, 0x49e9, 0x5a6b, 262 0x5a8c, 0x5a8b, 0x0020, 0x0840, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 263 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x5203, 0x0000, 264 0x0000, 2650x0000, 0x0000, 0x82e5, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 266 0xed69, 0xfe09, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x3962, 0x0000, 267 0x3146, 0x49e9, 0x522a, 0x5a6b, 0x3987, 0x0000, 0x41a2, 0xfe4a, 0xfe4a, 0xff14, 268 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xfeb0, 0xfe4a, 0xfe4a, 0x41a2, 269 0x0000, 0x2946, 0x49e9, 0x4a2a, 0x5a6b, 0x39a7, 0x0000, 0x3962, 0xfe4a, 0xfe4a, 270 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 271 0xfe4a, 0xfe4a, 0x8b65, 0x0000, 0x0000, 2720x0000, 0x0000, 0xb427, 0xed69, 0xed69, 273 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xfe29, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 274 0xfe4a, 0xfe4a, 0x9385, 0x0000, 0x0841, 0x3146, 0x41e9, 0x3146, 0x0841, 0x0000, 275 0x9be6, 0xfe4a, 0xfe4b, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 276 0xfed2, 0xfe4a, 0xfe4a, 0x9be6, 0x0000, 0x0841, 0x3146, 0x41e9, 0x3146, 0x0841, 277 0x0000, 0x9385, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 278 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xc4a7, 0x0000, 0x0000, 2790x0000, 280 0x0000, 0xdd28, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xfe2a, 281 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe29, 0x49c2, 0x0000, 0x0000, 282 0x0000, 0x0000, 0x0000, 0x5203, 0xfe4a, 0xfe4a, 0xfed1, 0xff59, 0xff59, 0xff59, 283 0xff59, 0xff59, 0xff59, 0xff59, 0xff14, 0xfe4a, 0xfe4a, 0xfe4a, 0x5203, 0x0000, 284 0x0000, 0x0000, 0x0000, 0x0000, 0x49c2, 0xfe29, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 285 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 286 0xf5e9, 0x0000, 0x0000, 2870x0000, 0x0000, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 288 0xed69, 0xed69, 0xed89, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 289 0xfe4a, 0xfe2a, 0x93a5, 0x4182, 0x18a1, 0x41a2, 0x9bc6, 0xfe2a, 0xfe4a, 0xfeaf, 290 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff58, 0xfe6d, 291 0xfe4a, 0xfe4a, 0xfe2a, 0x9bc6, 0x41a2, 0x18a1, 0x4182, 0x93a5, 0xfe2a, 0xfe4a, 292 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 293 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x0000, 0x0000, 2940x0000, 0x0820, 0xed69, 295 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe4a, 0xfe4a, 0xfe4a, 296 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 297 0xfe4a, 0xfe4a, 0xfe8d, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 298 0xff59, 0xff59, 0xff59, 0xff36, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 299 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 300 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0x0820, 301 0x0000, 3020x0000, 0x1060, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 303 0xed89, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 304 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe8e, 0xfef4, 0xff58, 0xff59, 0xff59, 0xff59, 305 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff14, 0xfe4a, 306 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 307 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 308 0xfe4a, 0xfe4a, 0xfe4a, 0x1060, 0x0000, 3090x0000, 0x0840, 0xed69, 0xed69, 0xed69, 310 0xed69, 0xed69, 0xed69, 0xed69, 0xed89, 0xfe4a, 0xfe4a, 0xfe8e, 0xfeb0, 0xfed1, 311 0xfed1, 0xfed2, 0xfed2, 0xfef2, 0xfef2, 0xfef2, 0xfef3, 0xff58, 0xff59, 0xff59, 312 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 313 0xff59, 0xff59, 0xff59, 0xff37, 0xfeb0, 0xfe4b, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 314 0xfe6b, 0xfe8e, 0xfeb0, 0xfef2, 0xff14, 0xfef3, 0xfed1, 0xfeaf, 0xfe4a, 0xfe4a, 315 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe2a, 0x0840, 0x0000, 3160x0000, 317 0x0000, 0xcca8, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xed69, 0xedab, 0xfef2, 318 0xff57, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 319 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 320 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 321 0xff37, 0xff36, 0xff36, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 322 0xff59, 0xff59, 0xff58, 0xfef2, 0xfe4b, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 323 0xdd68, 0x0000, 0x0000, 3240x0000, 0x0000, 0x9ba6, 0xed69, 0xed69, 0xed69, 0xed69, 325 0xed69, 0xeded, 0xf6f6, 0xff58, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 326 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 327 0xff59, 0xd634, 0x734b, 0x4a27, 0x2924, 0x2924, 0x4a27, 0x734b, 0xd634, 0xff59, 328 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 329 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff57, 0xfe8d, 330 0xfe4a, 0xfe4a, 0xfe4a, 0xfe4a, 0xac26, 0x0000, 0x0000, 3310x0000, 0x0000, 0x72a4, 332 0xed69, 0xed69, 0xed69, 0xed69, 0xedcc, 0xf6f6, 0xf6f6, 0xff38, 0xff59, 0xff59, 333 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 334 0xff59, 0xff59, 0xff59, 0xe6d7, 0x5268, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 335 0x0000, 0x0000, 0x0000, 0x5268, 0xe6d7, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 336 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 337 0xff59, 0xff59, 0xff59, 0xff58, 0xfe8d, 0xfe4a, 0xfe4a, 0xfe4a, 0x7b04, 0x0000, 338 0x0000, 3390x0000, 0x0000, 0x41a2, 0xed69, 0xed69, 0xe569, 0xc487, 0xa48e, 0x7b6b, 340 0x62c9, 0x5288, 0x4a27, 0x39a5, 0x2944, 0x20e3, 0x2103, 0x2944, 0x2964, 0x3185, 341 0x39a5, 0x4a27, 0xde76, 0xff59, 0xff59, 0xff59, 0xeef7, 0x3185, 0x0000, 0x2082, 342 0x8a6a, 0xd3f0, 0xf493, 0xf493, 0xd3f0, 0x92ab, 0x20a2, 0x0000, 0x3185, 0xeef7, 343 0xff59, 0xff59, 0xff59, 0xde76, 0x4a27, 0x39a5, 0x3185, 0x2964, 0x2944, 0x2103, 344 0x20e3, 0x2944, 0x39a5, 0x4a27, 0x5a88, 0x6b0a, 0x7bac, 0xa4f0, 0xd613, 0xfe2a, 345 0xfe4a, 0xfe4a, 0x49e3, 0x0000, 0x0000, 3460x0000, 0x0000, 0x1060, 0x49c3, 0x20e1, 347 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 348 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbd92, 0xff59, 0xff59, 0xff59, 349 0x7b8c, 0x0000, 0x4925, 0xf3d0, 0xfcb3, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 350 0xf493, 0x4966, 0x0000, 0x7b8c, 0xff59, 0xff59, 0xff59, 0xbd92, 0x0000, 0x0000, 351 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 352 0x0000, 0x0000, 0x0000, 0x0020, 0x2901, 0x5203, 0x1060, 0x0000, 0x0000, 3530x0000, 354 0x0000, 0x0000, 0x0000, 0x0000, 0x1881, 0x41c5, 0x6ae9, 0x940d, 0xacf0, 0xbd51, 355 0xce14, 0xde76, 0xeef7, 0xff58, 0xf738, 0xf718, 0xeef7, 0xe6d7, 0xe696, 0xeed7, 356 0xff59, 0xff59, 0xff59, 0xff59, 0x3185, 0x0000, 0xe38e, 0xfc10, 0xfc93, 0xfcb4, 357 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xe431, 0x0000, 0x3185, 0xff59, 0xff59, 358 0xff59, 0xff59, 0xeed7, 0xe696, 0xe6d7, 0xeef7, 0xf718, 0xf738, 0xff58, 0xeef7, 359 0xde76, 0xce14, 0xc5b3, 0xb531, 0x944e, 0x6b2a, 0x41e6, 0x18a2, 0x0000, 0x0000, 360 0x0000, 0x0000, 0x0000, 3610x0000, 0x0000, 0x0000, 0x3122, 0xdd28, 0xed69, 0xf6f6, 362 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xff38, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 363 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0x2944, 0x0000, 364 0xe38f, 0xfc10, 0xfc52, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xfcb4, 0xe432, 365 0x0000, 0x2944, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 366 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 367 0xff59, 0xff58, 0xf5ea, 0x3962, 0x0000, 0x0000, 0x0000, 3680xffff, 0x0000, 0x0000, 369 0x0000, 0xb447, 0xed69, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf717, 0xff59, 370 0xf738, 0xc5b3, 0x83cc, 0x5ac9, 0x41e6, 0x2103, 0x6b2b, 0xff59, 0xff59, 0xff59, 371 0xff59, 0xff59, 0x736b, 0x0000, 0x4925, 0xf3f0, 0xfc10, 0xfc93, 0xfcb4, 0xfcb4, 372 0xfcb4, 0xfcb4, 0xf493, 0x4965, 0x0000, 0x736b, 0xff59, 0xff59, 0xff59, 0xff59, 373 0xff59, 0x6b2b, 0x2103, 0x41e6, 0x5ac9, 0x83cc, 0xc5b3, 0xf738, 0xff59, 0xff59, 374 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xc4e8, 0x0000, 0x0000, 0x0000, 375 0xffff, 3760xffff, 0xffff, 0x0000, 0x0000, 0x3142, 0xed69, 0xf6f6, 0xf6f6, 0xf6f6, 377 0xf6f6, 0xd613, 0x940d, 0x4a47, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 378 0x5aa9, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xeef7, 0x3164, 0x0000, 0x2082, 379 0xa28a, 0xfbf0, 0xfc52, 0xfcb3, 0xfcb3, 0xa2ec, 0x2082, 0x0000, 0x3164, 0xeef7, 380 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0x5aa9, 0x0000, 0x0000, 0x0000, 0x0000, 381 0x0000, 0x0861, 0x4a48, 0x946e, 0xde75, 0xff59, 0xff59, 0xff59, 0xff59, 0xff58, 382 0x3962, 0x0000, 0x0000, 0xffff, 0xffff, 3830xffff, 0xffff, 0xffff, 0x0000, 0x0000, 384 0xa3a6, 0xf6f6, 0xf6f6, 0xb4f0, 0x2103, 0x0000, 0x0000, 0x0000, 0x0841, 0x4a27, 385 0x8c2e, 0xbd72, 0xd655, 0xf738, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 386 0xff59, 0xe6d7, 0x62e9, 0x0000, 0x0000, 0x28a2, 0x71c7, 0x71c7, 0x28a3, 0x0000, 387 0x0000, 0x62e9, 0xe6d7, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 388 0xf738, 0xd655, 0xb572, 0x8c2e, 0x4a27, 0x0841, 0x0000, 0x0000, 0x0000, 0x2103, 389 0xb552, 0xff59, 0xff59, 0xacef, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 3900xffff, 391 0xffff, 0xffff, 0x0000, 0x0000, 0x1060, 0xd5d1, 0xf6f6, 0x8bec, 0x0000, 0x3164, 392 0x734a, 0xbd31, 0xf717, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 393 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xce14, 0x4206, 0x0000, 394 0x0000, 0x0000, 0x0000, 0x4206, 0xce14, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 395 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xf738, 396 0xbd92, 0x7b8c, 0x3185, 0x0000, 0x8c2e, 0xff59, 0xd655, 0x1061, 0x0000, 0x0000, 397 0xffff, 0xffff, 0xffff, 3980xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x20e2, 399 0xe675, 0xf6f6, 0xeeb5, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xff58, 0xff59, 0xff59, 400 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 401 0xff59, 0xff59, 0xff59, 0xe6b6, 0xacf1, 0xacf1, 0xe6b6, 0xff59, 0xff59, 0xff59, 402 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 403 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xf738, 0xff59, 0xeef7, 404 0x2123, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 4050xffff, 0xffff, 0xffff, 406 0xffff, 0xffff, 0x0000, 0x0000, 0x41e6, 0xf6d6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 407 0xf6f6, 0xf717, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 408 0x630a, 0x5aa9, 0xeef7, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 409 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xeef7, 0x5aa9, 0x630a, 0xff59, 0xff59, 410 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 411 0xff59, 0xff59, 0xf738, 0x4207, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 412 0xffff, 4130xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x39c5, 414 0xe675, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xff38, 0xff59, 0xff59, 0xff59, 415 0xff59, 0xff59, 0xff59, 0xff59, 0x4207, 0x0000, 0x2944, 0xbd92, 0xf718, 0xf738, 416 0xbd92, 0x7b8c, 0x3165, 0x3165, 0x7b8c, 0xbd92, 0xf738, 0xf718, 0xbd92, 0x2944, 417 0x0000, 0x4207, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 418 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xeef7, 0x41e6, 0x0000, 0x0000, 0x0000, 419 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 4200xffff, 0xffff, 0xffff, 0xffff, 0xffff, 421 0xffff, 0x0000, 0x0000, 0x0000, 0x2103, 0xd613, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 422 0xf6f6, 0xff38, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xf738, 0x5a88, 423 0x0000, 0x0000, 0x0020, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 424 0x0841, 0x0020, 0x0000, 0x0000, 0x5a88, 0xf738, 0xff59, 0xff59, 0xff59, 0xff59, 425 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xde75, 0x2123, 426 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 4270xffff, 428 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1081, 429 0x9c6e, 0xf6d6, 0xf6f6, 0xf6f6, 0xf6f6, 0xf6f6, 0xff38, 0xff59, 0xff59, 0xff59, 430 0xff59, 0xff59, 0xff59, 0xff59, 0xa4d0, 0x62c9, 0x2103, 0x18c2, 0x5ac9, 0xa4b0, 431 0xd634, 0xd634, 0xa4b0, 0x5ac9, 0x18c2, 0x2103, 0x62c9, 0xa4d0, 0xff59, 0xff59, 432 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 433 0xff58, 0x9caf, 0x1082, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 434 0xffff, 0xffff, 0xffff, 4350xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 436 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x3185, 0xc592, 0xf6f6, 0xf6f6, 0xf6f6, 437 0xf6f6, 0xff38, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 438 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 439 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 440 0xff59, 0xff59, 0xff59, 0xcdf4, 0x39a5, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 441 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 4420xffff, 0xffff, 0xffff, 443 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 444 0x0000, 0x4a06, 0xa4af, 0xeeb5, 0xf6f6, 0xf6f6, 0xf717, 0xff58, 0xff59, 0xff59, 445 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 446 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 0xff59, 447 0xff59, 0xff59, 0xff59, 0xff59, 0xf738, 0xacf0, 0x4a27, 0x0000, 0x0000, 0x0000, 448 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 449 0xffff, 4500xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 451 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0x5aa8, 0x940d, 452 0xbd31, 0xe675, 0xff38, 0xff59, 0xff59, 0xff59, 0xff59, 0xf718, 0xe6d7, 0xde75, 453 0xd614, 0xc5d3, 0xbd72, 0xbd72, 0xc5d3, 0xd614, 0xde75, 0xe6d7, 0xf718, 0xff59, 454 0xff59, 0xff59, 0xff59, 0xff59, 0xe6d7, 0xbd93, 0x944e, 0x62c9, 0x1061, 0x0000, 455 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 456 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 4570xffff, 0xffff, 0xffff, 0xffff, 0xffff, 458 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 459 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x0841, 0x0841, 0x0840, 460 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 461 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x0841, 0x0861, 0x0861, 0x0000, 0x0000, 462 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 463 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 4640xffff, 465 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 466 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 467 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 468 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 469 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 470 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 471 0xffff, 0xffff, 0xffff, 4720xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 473 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 474 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 475 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 476 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 477 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 478 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }; 479 480 481
PetBit Sketch
arduino
Main source code for PetBit
1/* 2 Name: Pet_Bit.ino 3 Created: 10/4/2020 12:03:28 PM 4 Author: Christopher 5 Cooper 6*/ 7 8// Libraries. 9 10#include <Adafruit_GFX.h> // Core 11 graphics library. 12#include <Adafruit_ST7735.h> // Hardware-specific library 13 for ST7735. 14#include <Fonts/FreeMono9pt7b.h> // Special font for displays. 15#include 16 <SPI.h> // SPI bus for TFT using software SPI. 17#include <ESP8266WiFi.h> // 18 ESP8266 library required for low power mode function. 19#include <eeprom.h> // 20 EEPROM library. 21 22#include "startScreen.h" // Start screen bitmap. 23#include 24 "catStartScreen.h" // Cat start screen bitmap. 25#include "batteryIcons.h" // 26 Battery level bitmaps. 27 28// Special ESP8266 settings. 29 30extern "C" { // 31 Required for ESP8266 sleep mode. 32#include "gpio.h" 33} 34 35extern "C" 36 { // Required for ESP8266 sleep mode. 37#include "user_interface.h" 38} 39 40#define 41 FPM_SLEEP_MAX_TIME 0xFFFFFFF // Sets ESP sleep mode for maximum duration. 42 43// 44 TFT SPI Interface for ESP 8266 using software SPI. 45 46#define TFT_RST 4 47 // Reset // D2 on ESP8266. 48#define TFT_DC 5 // Data command 49 or AO // D1 on ESP8266. 50#define TFT_MOSI 13 // Software data out // 51 D7 on ESP8266. 52#define TFT_SCLK 14 // Software clock out // D5 on ESP8266. 53#define 54 TFT_CS 15 // Chip select // D8 on ESP8266. 55 56// Pin out Configuration. 57 58byte 59 bPlus = 1; // Button + // TX on ESP8266. 60byte bMinus = 3; // 61 Button - // RX on ESP8266. 62 63const int lcdBackLightPin = 16; // 64 D0 on ESP8266. 65const int interruptMenuButton = 0; // D3 on ESP8266. 66const 67 int interruptWakeButton = 2; // D4 on ESP8266. 68const int interruptWheelSensor 69 = 12; // D6 on ESP8266. 70 71// Float map function as inbuilt map function 72 doesnt support floats. 73 74float mapf(float x, float in_min, float in_max, float 75 out_min, float out_max) { 76 float a = x - in_min; 77 float b = out_max - out_min; 78 float 79 c = in_max - in_min; 80 return a * b / c + out_min; 81} 82 83// Configure ST7735 84 display. 85 86Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, 87 TFT_SCLK, TFT_RST); 88boolean screenRedraw = 0; 89 90// Global variables. 91 92int 93 screenMenu; // Screen menu selection. 94byte configurationFlag = 95 0; // Configuration menu flag. 96 97volatile byte displayBackLight = 98 1; // Enable / disable LCD back light. 99volatile byte wakeInterrupt = 1; // 100 Set wake interupt flag. 101volatile unsigned int distanceCounter = 0; // Counting 102 rotations for distance travelled. 103 104volatile unsigned long passedTime; // 105 Setting time to calculate speed. 106volatile unsigned long startTime; // Setting 107 time to calculate speed. 108 109volatile unsigned long lastRotation1; // Checking 110 if wheel is still turning. 111volatile unsigned long lastRotation2; // Checking 112 if wheel is still turning. 113 114float circumference; // Wheel circumference. 115float 116 circImperial; // Conversion into MPH. 117 118float distanceTravelled 119 = 0.00; // Total distance travelled. 120float speedKph = 0.00; 121float speedMph 122 = 0.00; 123float rpm = 0.00; 124 125float maxKphSpeed = 0; // Recording 126 max speed. 127 128char rpmArray[7]; // Holding data in character arrays 129 for formatting reasons. 130char kphArray[7]; 131char mphArray[7]; 132char maxKphArray[7]; 133char 134 averageKphSpeedArray[7]; 135char sessionDistanceArray[7]; 136char currentSessionTimeArray[7]; 137 138// 139 Configure EEEPROM. 140 141int eeMenuAddress = 0; // EEPROM address for 142 start menu position. 143int eeMenuSetting; // Actual commit for writing, 144 4 bytes. 145boolean eeMenuSettingChange = false; // Used for menu scrolling before 146 committing to save EEPROM writes. 147 148int eeCircAddress = 4; // EEPROM 149 address for circumference. 150float eeCircSetting; // Actual commit for 151 writing, 4 bytes. 152boolean eeCircSettingChange = false; // Used for circumference 153 setting before committing to save EEPROM writes. 154 155int eeTotalDistanceAddress 156 = 8; // EEPROM address for total distance. 157unsigned long eeTotalDistance; // 158 Actual commit for writing, 4 bytes. 159boolean eeTotalDistanceChange = false; // 160 Used for total distance before committing to save EEPROM writes. 161 162int eeSessionTimeArray1Address 163 = 16; // EEPROM address for session time 1 164unsigned long eeSessionTime1; // 165 Actual commit for writing, 4 bytes. 166 167int eeSessionTimeArray2Address = 20; // 168 EEPROM address for session time 2 169unsigned long eeSessionTime2; // Actual 170 commit for writing, 4 bytes. 171 172int eeSessionTimeArray3Address = 24; // EEPROM 173 address for session time 3 174unsigned long eeSessionTime3; // Actual commit 175 for writing, 4 bytes. 176 177int eeSessionTimeArray4Address = 28; // EEPROM address 178 for session time 4 179unsigned long eeSessionTime4; // Actual commit for 180 writing, 4 bytes. 181 182int eeSessionTimeArray5Address = 32; // EEPROM address 183 for session time 5 184unsigned long eeSessionTime5; // Actual commit for 185 writing, 4 bytes. 186 187int eeSessionTimeArray6Address = 36; // EEPROM address 188 for session time 6 189unsigned long eeSessionTime6; // Actual commit for 190 writing, 4 bytes. 191 192int eeSessionTimeArray7Address = 40; // EEPROM address 193 for session time 7 194unsigned long eeSessionTime7; // Actual commit for 195 writing, 4 bytes. 196 197int eeSessionDistanceArray1Address = 44; // EEPROM address 198 for session distance 1 199unsigned int eeSessionDistance1; // Actual commit 200 for writing, 4 bytes. 201 202int eeSessionDistanceArray2Address = 48; // EEPROM 203 address for session distance 2 204unsigned int eeSessionDistance2; // Actual 205 commit for writing, 4 bytes. 206 207int eeSessionDistanceArray3Address = 52; // 208 EEPROM address for session distance 3 209unsigned int eeSessionDistance3; // 210 Actual commit for writing, 4 bytes. 211 212int eeSessionDistanceArray4Address = 213 56; // EEPROM address for session distance 4 214unsigned int eeSessionDistance4; // 215 Actual commit for writing, 4 bytes. 216 217int eeSessionDistanceArray5Address = 218 60; // EEPROM address for session distance 5 219unsigned int eeSessionDistance5; // 220 Actual commit for writing, 4 bytes. 221 222int eeSessionDistanceArray6Address = 223 64; // EEPROM address for session distance 6 224unsigned int eeSessionDistance6; // 225 Actual commit for writing, 4 bytes. 226 227int eeSessionDistanceArray7Address = 228 68; // EEPROM address for session distance 7 229unsigned int eeSessionDistance7; // 230 Actual commit for writing, 4 bytes. 231 232boolean eeSessionChange = false; // 233 Used for session time before committing to save EEPROM writes. 234 235int eeResetSettingAddress 236 = 72; // EEPROM address for master reset 237unsigned int eeResetSetting; // 238 Actual commit for writing, 1 byte. 239boolean eeResetSettingChange = false; // 240 Used for reset setting change before committing to save EEPROM writes. 241 242int 243 eeSessionArrayPositionAddress = 76; // EEPROM address for array position. 244unsigned 245 int eeSessionArrayPosition; // Actual commit for writing, 4 bytes. 246 247// 248 Average calculation variables. 249 250const int numReadings = 10; 251 252float readings[numReadings]; // 253 Latest Kph readings. 254int readIndex = 0; // The index of the current 255 reading. 256float total = 0.00; // The running total of the readings. 257float averageKphSpeed 258 = 0.00; // The average speed. 259 260// Session time variables. 261 262unsigned 263 long sessionTimeCap = 10; // Set cap for graph if statements. 264boolean recordSessions 265 = 0; // Flag to trigger the recording of each session. 266volatile boolean 267 sessionTimeFlag = 0; // Flag to trigger the recording of each session. 268volatile 269 unsigned long sessionStartTime; // Time each pt session starts. 270unsigned long 271 sessionTimeArray[7]; // Array for storing 7 sessions. 272byte sessionArrayPosition 273 = 0; // Array position, this is also used for the distance array position. 274volatile 275 unsigned long sessionTimeMillis; // Time each pt session in millis. 276volatile 277 unsigned int sessionTime; // Time each pt session in minutes. 278 279unsigned 280 int sessionTimeArray1; // These variables are needed for the Kris Kasprzak 281 charts. 282unsigned int sessionTimeArray2; 283unsigned int sessionTimeArray3; 284unsigned 285 int sessionTimeArray4; 286unsigned int sessionTimeArray5; 287unsigned int sessionTimeArray6; 288unsigned 289 int sessionTimeArray7; 290 291// Session distance variables. 292 293unsigned int 294 distanceGraphCap = 20; // Set cap for graph if statements. 295float sessionStartDistance 296 = 0.00; 297float sessionDistance; // Session distance. 298unsigned 299 int distanceTravelledArray[7]; // Array for storing 7 sessions. 300 301unsigned 302 int distanceTravelledArray1; // These variables are needed for the Kris Kasprzak 303 charts. 304unsigned int distanceTravelledArray2; 305unsigned int distanceTravelledArray3; 306unsigned 307 int distanceTravelledArray4; 308unsigned int distanceTravelledArray5; 309unsigned 310 int distanceTravelledArray6; 311unsigned int distanceTravelledArray7; 312 313// 314 Battery measurement variables. 315 316#define sensitivity (4 / 1024.0) // Battery 317 sensitivity setting. 318unsigned long batteryMeasureInterval = 600000; // Battery 319 measuring interval. 320unsigned long batteryMeasureNow; 321float sensorValue; 322float 323 sensorValueVolts; 324float sensorValuePerc; 325 326// Kris Kasprzak Variables. 327 328boolean 329 dial_1 = true; // XPH dial. 330 331boolean graph_1 = true; // Bar 332 graph. 333boolean graph_2 = true; 334boolean graph_3 = true; 335boolean graph_4 336 = true; 337boolean graph_5 = true; 338boolean graph_6 = true; 339boolean graph_7 340 = true; 341 342boolean graph_8 = true; // Bar graph. 343boolean graph_9 = 344 true; 345boolean graph_10 = true; 346boolean graph_11 = true; 347boolean graph_12 348 = true; 349boolean graph_13 = true; 350boolean graph_14 = true; 351 352// Define 353 colours. 354 355// http://www.barth-dev.de/online/rgb565-color-picker/ 356#define 357 LTBLUE 0xB6DF 358#define LTTEAL 0xBF5F 359#define LTGREEN 0xBFF7 360#define 361 LTCYAN 0xC7FF 362#define LTRED 0xFD34 363#define LTMAGENTA 0xFD5F 364#define 365 LTYELLOW 0xFFF8 366#define LTORANGE 0xFE73 367#define LTPINK 0xFDDF 368#define 369 LTPURPLE 0xCCFF 370#define LTGREY 0xE71C 371 372#define BLUE 0x001F 373#define 374 TEAL 0x0438 375#define GREEN 0x07E0 376#define CYAN 0x07FF 377#define 378 RED 0xF800 379#define MAGENTA 0xF81F 380#define YELLOW 0xFFE0 381#define 382 ORANGE 0xFD20 383#define PINK 0xF81F 384#define PURPLE 0x801F 385#define 386 GREY 0xC618 387#define WHITE 0xFFFF 388#define BLACK 0x0000 389 390#define 391 DKBLUE 0x000D 392#define DKTEAL 0x020C 393#define DKGREEN 0x03E0 394#define 395 DKCYAN 0x03EF 396#define DKRED 0x6000 397#define DKMAGENTA 0x8008 398#define 399 DKYELLOW 0x8400 400#define DKORANGE 0x8200 401#define DKPINK 0x9009 402#define 403 DKPURPLE 0x4010 404#define DKGREY 0x4A49 405 406// Define fonts. 407 408#include 409 <Fonts/FreeMonoBoldOblique12pt7b.h> 410#include <Fonts/FreeSans9pt7b.h> 411 412/*-----------------------------------------------------------------*/ 413 414void 415 setup() { 416 417 // Set pin modes. 418 419 pinMode(interruptMenuButton, INPUT_PULLUP); // 420 Menu selection interrupt button. 421 pinMode(interruptWakeButton, INPUT_PULLUP); // 422 Wake up and sleep interrupt button. 423 pinMode(interruptWheelSensor, INPUT_PULLUP); // 424 Wheel sensor (REED switch). 425 pinMode(bPlus, INPUT_PULLUP); // Menu 426 button 1. 427 pinMode(bMinus, INPUT_PULLUP); // Menu button 2. 428 pinMode(lcdBackLightPin, 429 OUTPUT); // Output for LCD back light. 430 digitalWrite(lcdBackLightPin, 431 HIGH); // Outout for LCD back light. 432 433 // Configure interrupts. 434 435 attachInterrupt(digitalPinToInterrupt(interruptMenuButton), 436 screenMenuISR, FALLING); 437 attachInterrupt(digitalPinToInterrupt(interruptWakeButton), 438 wakeInterruptISR, FALLING); 439 gpio_pin_wakeup_enable(GPIO_ID_PIN(interruptWakeButton), 440 GPIO_PIN_INTR_LOLEVEL); 441 attachInterrupt(digitalPinToInterrupt(interruptWheelSensor), 442 rotationInterruptISR, FALLING); 443 444 // Configure EEPROM. 445 446 EEPROM.begin(512); 447 EEPROM.get(eeResetSettingAddress, 448 eeResetSetting); 449 450 /* 451 * 452 * This line is used for initial ESP8266 453 power on from manufacture to set EEPROM, comment out once uploaded and re-upload. 454 * 455 456 * resetSystemDemoData(); 457 */ 458 459 if (eeResetSetting == 1) { 460 461 resetSystemData(); 462 } 463 464 else 465 if (eeResetSetting == 2) { 466 467 resetSystemDemoData(); 468 } 469 470 // 471 Load previous settings and last recorded data. 472 473 EEPROM.get(eeMenuAddress, 474 eeMenuSetting); 475 EEPROM.get(eeCircAddress, eeCircSetting); 476 EEPROM.get(eeMenuAddress, 477 screenMenu); 478 EEPROM.get(eeCircAddress, circumference); 479 EEPROM.get(eeTotalDistanceAddress, 480 distanceCounter); 481 EEPROM.get(eeSessionArrayPositionAddress, sessionArrayPosition); 482 483 EEPROM.commit(); 484 485 EEPROM.get(eeSessionTimeArray1Address, 486 sessionTimeArray[0]); 487 EEPROM.get(eeSessionTimeArray2Address, sessionTimeArray[1]); 488 EEPROM.get(eeSessionTimeArray3Address, 489 sessionTimeArray[2]); 490 EEPROM.get(eeSessionTimeArray4Address, sessionTimeArray[3]); 491 EEPROM.get(eeSessionTimeArray5Address, 492 sessionTimeArray[4]); 493 EEPROM.get(eeSessionTimeArray6Address, sessionTimeArray[5]); 494 EEPROM.get(eeSessionTimeArray7Address, 495 sessionTimeArray[6]); 496 497 EEPROM.commit(); 498 499 sessionTimeArray1 = sessionTimeArray[0] 500 / 1000 / 60; 501 sessionTimeArray2 = sessionTimeArray[1] / 1000 / 60; 502 sessionTimeArray3 503 = sessionTimeArray[2] / 1000 / 60; 504 sessionTimeArray4 = sessionTimeArray[3] 505 / 1000 / 60; 506 sessionTimeArray5 = sessionTimeArray[4] / 1000 / 60; 507 sessionTimeArray6 508 = sessionTimeArray[5] / 1000 / 60; 509 sessionTimeArray7 = sessionTimeArray[6] 510 / 1000 / 60; 511 512 EEPROM.get(eeSessionDistanceArray1Address, distanceTravelledArray[0]); 513 EEPROM.get(eeSessionDistanceArray2Address, 514 distanceTravelledArray[1]); 515 EEPROM.get(eeSessionDistanceArray3Address, distanceTravelledArray[2]); 516 EEPROM.get(eeSessionDistanceArray4Address, 517 distanceTravelledArray[3]); 518 EEPROM.get(eeSessionDistanceArray5Address, distanceTravelledArray[4]); 519 EEPROM.get(eeSessionDistanceArray6Address, 520 distanceTravelledArray[5]); 521 EEPROM.get(eeSessionDistanceArray7Address, distanceTravelledArray[6]); 522 523 EEPROM.commit(); 524 525 distanceTravelledArray1 526 = distanceTravelledArray[0]; 527 distanceTravelledArray2 = distanceTravelledArray[1]; 528 distanceTravelledArray3 529 = distanceTravelledArray[2]; 530 distanceTravelledArray4 = distanceTravelledArray[3]; 531 distanceTravelledArray5 532 = distanceTravelledArray[4]; 533 distanceTravelledArray6 = distanceTravelledArray[5]; 534 distanceTravelledArray7 535 = distanceTravelledArray[6]; 536 537 // Ensure menu position, circumference & array 538 position are within parametres. 539 540 if (screenMenu < 0 || screenMenu > 4) { 541 542 screenMenu 543 = 0; 544 545 } // Close if. 546 547 if (circumference < 0 || circumference > 2) 548 { 549 550 circumference = 1.0; 551 552 } // Close if. 553 554 if (sessionArrayPosition 555 < 0 || sessionArrayPosition > 6) { 556 557 sessionArrayPosition = 0; 558 559 } 560 // Close if. 561 562 // Initialise TFT display. 563 564 tft.initR(INITR_BLACKTAB); 565 // Init ST7735S chip, black tab. 566 tft.setRotation(1); 567 tft.setCursor(0, 568 0); 569 tft.fillScreen(ST77XX_BLACK); 570 571 // Start up screen, hamster image. 572 573 tft.fillScreen(ST77XX_WHITE); 574 575 int 576 h = 80, w = 112, row, col, buffidx = 0; 577 578 for (row = 16; row < h; row++) 579 { // For each scanline. 580 581 for (col = 48; col < w; col++) { // 582 For each pixel, read from Flash Memory, since image is stored as uint16_t, pgm_read_word 583 is used as it uses 16bit address. 584 tft.drawPixel(col, row, pgm_read_word(startScreen 585 + buffidx)); 586 buffidx++; 587 588 } // End for loop. 589 590 } // 591 End for loop. 592 593 tft.setFont(&FreeSans9pt7b); 594 tft.setTextSize(1); 595 tft.setTextColor(ST77XX_BLACK); 596 tft.setCursor(55, 597 105); 598 tft.println("PetBit"); 599 600 delay(2000); 601 602 tft.fillScreen(ST77XX_BLACK); 603 604 // 605 Configure rotation parametres. 606 607 circImperial = circumference * 0.62137; 608 // convert metric to imperial for MPH calculations. 609 610 // Blank speed & distance 611 variables. 612 613 rpm = 0.00; 614 speedKph = 0.00; 615 speedMph = 0.00; 616 maxKphSpeed 617 = 0.00; 618 averageKphSpeed = 0.00; 619 sessionDistance = 0.00; 620 621 // Set 622 average array to 0. 623 624 for (int thisReading = 0; thisReading < numReadings; 625 thisReading++) { 626 readings[thisReading] = 0; 627 } 628 629 // Set battery 630 measuring period and check initial capacity. 631 632 batteryMeasureNow = millis() 633 - batteryMeasureInterval; // Set initial level so first measurement is made. 634 batteryLevel(); // 635 Calculates battery level. 636 batteryMeasureNow = millis(); // Reset 637 measurement to match interval. 638 639} // Close setup. 640 641/*-----------------------------------------------------------------*/ 642 643void 644 loop() { 645 646 mainData(); // Calculates main data. 647 batteryLevel(); // 648 Calculates battery level. 649 lcdBackLight(); // Interrupt to disable 650 back light. 651 lightSleep(); // Interrupt to send ESP to sleep. 652 averageSpeed(); // 653 Calculate average speed. 654 655 if (screenMenu == 0) { 656 657 if (screenRedraw 658 == 1) { 659 660 tft.fillScreen(ST77XX_BLACK); 661 screenRedraw = 0; 662 663 } 664 // Close if. 665 666 configurationDisplay(); // Start up display. 667 668 } 669 // Close if. 670 671 if (screenMenu == 1) { 672 673 if (screenRedraw == 1) { 674 675 tft.fillScreen(ST77XX_BLACK); 676 screenRedraw 677 = 0; 678 679 } // Close if. 680 681 XphDialScreen(tft, 80, 64, 60, 0, 20, 682 2, 210, speedKph, 2, 0, RED, WHITE, BLACK, "Xph", dial_1); // XPH dial screen 683 function. 684 685 } // Close if. 686 687 if (screenMenu == 2) { 688 689 if 690 (screenRedraw == 1) { 691 692 tft.fillScreen(ST77XX_BLACK); 693 screenRedraw 694 = 0; 695 696 } // Close if. 697 698 CurrentExerciseScreen(); // Current exercise 699 screen. 700 701 } // Close if. 702 703 if (screenMenu == 3) { 704 705 if (screenRedraw 706 == 1) { 707 708 tft.fillScreen(ST77XX_BLACK); 709 screenRedraw = 0; 710 711 } 712 // Close if. 713 714 // Session time bar graphs. 715 716 if (sessionTimeArray1 717 <= 10) { 718 719 ptSessionTimeV1(tft, 1, 110, 8, 80, 0, 10, 1, sessionTimeArray1, 720 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "1", graph_1); 721 722 } // Close 723 if. 724 725 else ((ptSessionTimeV1(tft, 1, 110, 8, 80, 0, 10, 1, sessionTimeCap, 726 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "1", graph_1))); 727 728 if (sessionTimeArray2 729 <= 10) { 730 731 ptSessionTimeV2(tft, 21, 110, 8, 80, 0, 10, 1, sessionTimeArray2, 732 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "2", graph_2); 733 734 } // Close 735 if. 736 737 else ((ptSessionTimeV2(tft, 21, 110, 8, 80, 0, 10, 1, sessionTimeCap, 738 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "2", graph_2))); 739 740 if (sessionTimeArray3 741 <= 10) { 742 743 ptSessionTimeV2(tft, 41, 110, 8, 80, 0, 10, 1, sessionTimeArray3, 744 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "3", graph_3); 745 746 } // Close 747 if. 748 749 else ((ptSessionTimeV2(tft, 41, 110, 8, 80, 0, 10, 1, sessionTimeCap, 750 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "3", graph_3))); 751 752 if (sessionTimeArray4 753 <= 10) { 754 755 ptSessionTimeV2(tft, 61, 110, 8, 80, 0, 10, 1, sessionTimeArray4, 756 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "4", graph_4); 757 758 } // Close 759 if. 760 761 else ((ptSessionTimeV2(tft, 61, 110, 8, 80, 0, 10, 1, sessionTimeCap, 762 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "4", graph_4))); 763 764 if (sessionTimeArray5 765 <= 10) { 766 767 ptSessionTimeV2(tft, 81, 110, 8, 80, 0, 10, 1, sessionTimeArray5, 768 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "5", graph_5); 769 770 } // Close 771 if. 772 773 else ((ptSessionTimeV2(tft, 81, 110, 8, 80, 0, 10, 1, sessionTimeCap, 774 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "5", graph_5))); 775 776 if (sessionTimeArray6 777 <= 10) { 778 779 ptSessionTimeV2(tft, 101, 110, 8, 80, 0, 10, 1, sessionTimeArray6, 780 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "6", graph_6); 781 782 } // Close 783 if. 784 785 else ((ptSessionTimeV2(tft, 101, 110, 8, 80, 0, 10, 1, sessionTimeCap, 786 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "6", graph_6))); 787 788 if (sessionTimeArray7 789 <= 10) { 790 791 ptSessionTimeV3(tft, 121, 110, 8, 80, 0, 10, 1, sessionTimeArray7, 792 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "7", graph_7); 793 794 } // Close 795 if. 796 797 else ((ptSessionTimeV3(tft, 121, 110, 8, 80, 0, 10, 1, sessionTimeCap, 798 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "7", graph_7))); 799 800 } // Close if. 801 802 if 803 (screenMenu == 4) { 804 805 if (screenRedraw == 1) { 806 807 tft.fillScreen(ST77XX_BLACK); 808 screenRedraw 809 = 0; 810 811 } // Close if. 812 813 // Distance bar graphs. 814 815 if 816 (distanceTravelledArray1 <= 15) { 817 818 ptSessionDistanceV1(tft, 1, 110, 819 8, 80, 0, 20, 2, distanceTravelledArray1, 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, 820 "1", graph_8); 821 822 } // Close if. 823 824 else if (distanceTravelledArray1 825 >= 20) { 826 827 ptSessionDistanceV1(tft, 1, 110, 8, 80, 0, 20, 2, distanceGraphCap, 828 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "1", graph_8); 829 830 } // Close else 831 if. 832 833 else ((ptSessionDistanceV1(tft, 1, 110, 8, 80, 0, 20, 2, distanceTravelledArray1, 834 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "1", graph_8))); 835 836 if (distanceTravelledArray2 837 <= 15) { 838 839 ptSessionDistanceV2(tft, 21, 110, 8, 80, 0, 20, 2, distanceTravelledArray2, 840 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "2", graph_9); 841 842 } // Close 843 if. 844 845 else if (distanceTravelledArray2 >= 20) { 846 847 ptSessionDistanceV2(tft, 848 21, 110, 8, 80, 0, 20, 2, distanceGraphCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, 849 "2", graph_9); 850 851 } // Close else if. 852 853 else ((ptSessionDistanceV2(tft, 854 21, 110, 8, 80, 0, 20, 2, distanceTravelledArray2, 3, 0, RED, DKGREY, WHITE, WHITE, 855 BLACK, "2", graph_9))); 856 857 if (distanceTravelledArray3 <= 15) { 858 859 ptSessionDistanceV2(tft, 860 41, 110, 8, 80, 0, 20, 2, distanceTravelledArray3, 3, 0, CYAN, DKGREY, WHITE, WHITE, 861 BLACK, "3", graph_10); 862 863 } // Close if. 864 865 else if (distanceTravelledArray3 866 >= 20) { 867 868 ptSessionDistanceV2(tft, 41, 110, 8, 80, 0, 20, 2, distanceGraphCap, 869 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "3", graph_10); 870 871 } // Close 872 else if. 873 874 else ((ptSessionDistanceV2(tft, 41, 110, 8, 80, 0, 20, 2, distanceTravelledArray3, 875 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "3", graph_10))); 876 877 if (distanceTravelledArray4 878 <= 15) { 879 880 ptSessionDistanceV2(tft, 61, 110, 8, 80, 0, 20, 2, distanceTravelledArray4, 881 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "4", graph_11); 882 883 } // Close 884 if. 885 886 else if (distanceTravelledArray4 >= 20) { 887 888 ptSessionDistanceV2(tft, 889 61, 110, 8, 80, 0, 20, 2, distanceGraphCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, 890 "4", graph_11); 891 892 } // Close else if. 893 894 else ((ptSessionDistanceV2(tft, 895 61, 110, 8, 80, 0, 20, 2, distanceTravelledArray4, 3, 0, RED, DKGREY, WHITE, WHITE, 896 BLACK, "4", graph_11))); 897 898 if (distanceTravelledArray5 <= 15) { 899 900 ptSessionDistanceV2(tft, 901 81, 110, 8, 80, 0, 20, 2, distanceTravelledArray5, 3, 0, CYAN, DKGREY, WHITE, WHITE, 902 BLACK, "5", graph_12); 903 904 } // Close if. 905 906 else if (distanceTravelledArray5 907 >= 20) { 908 909 ptSessionDistanceV2(tft, 81, 110, 8, 80, 0, 20, 2, distanceGraphCap, 910 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "5", graph_12); 911 912 } // Close 913 else if. 914 915 else ((ptSessionDistanceV2(tft, 81, 110, 8, 80, 0, 20, 2, distanceTravelledArray5, 916 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "5", graph_12))); 917 918 if (distanceTravelledArray6 919 <= 15) { 920 921 ptSessionDistanceV2(tft, 101, 110, 8, 80, 0, 20, 2, distanceTravelledArray6, 922 3, 0, CYAN, DKGREY, WHITE, WHITE, BLACK, "6", graph_13); 923 924 } // Close 925 if. 926 927 else if (distanceTravelledArray6 >= 20) { 928 929 ptSessionDistanceV2(tft, 930 101, 110, 8, 80, 0, 20, 2, distanceGraphCap, 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, 931 "6", graph_13); 932 933 } // Close else if. 934 935 else ((ptSessionDistanceV2(tft, 936 101, 110, 8, 80, 0, 20, 2, distanceTravelledArray6, 3, 0, RED, DKGREY, WHITE, WHITE, 937 BLACK, "6", graph_13))); 938 939 if (distanceTravelledArray7 <= 15) { 940 941 ptSessionDistanceV3(tft, 942 121, 110, 8, 80, 0, 20, 2, distanceTravelledArray7, 3, 0, CYAN, DKGREY, WHITE, WHITE, 943 BLACK, "7", graph_14); 944 945 } // Close if. 946 947 else if (distanceTravelledArray7 948 >= 20) { 949 950 ptSessionDistanceV3(tft, 121, 110, 8, 80, 0, 20, 2, distanceGraphCap, 951 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "7", graph_14); 952 953 } // Close 954 else if. 955 956 else ((ptSessionDistanceV3(tft, 121, 110, 8, 80, 0, 20, 2, distanceTravelledArray7, 957 3, 0, RED, DKGREY, WHITE, WHITE, BLACK, "7", graph_14))); 958 959 } // Close 960 if. 961 962 // Check for new max speed. 963 964 if (speedKph > maxKphSpeed) { 965 966 maxKphSpeed 967 = speedKph; 968 969 } // Close if. 970 971 // Calculate average speed & remove 972 any minus calculations. 973 974 averageKphSpeed = total / numReadings; 975 976 if 977 (averageKphSpeed < 0.99) { 978 979 averageKphSpeed = 0.00; 980 981 } // Close 982 if. 983 984} // Close loop. 985 986/*-----------------------------------------------------------------*/ 987 988void 989 batteryLevel() { 990 991 if (millis() >= batteryMeasureNow + batteryMeasureInterval) 992 { 993 994 // Battery voltage level detection. 995 996 sensorValue = analogRead(A0); 997 sensorValueVolts 998 = sensorValue * sensitivity; 999 1000 // mapf(input_value, in_min, in_max, out_min, 1001 out_max). 1002 sensorValuePerc = mapf(sensorValueVolts, 3.0, 4.0, 0, 100); 1003 1004 batteryMeasureNow 1005 = millis(); 1006 1007 } // Close if. 1008 1009} // Close function. 1010 1011/*-----------------------------------------------------------------*/ 1012 1013void 1014 mainData() { 1015 1016 // Set speed variables to "0.00" if the wheel doesnt turn 1017 for X period (currently 4000ms). 1018 1019 if (lastRotation2 < millis()) { 1020 1021 rpm 1022 = 0.00; 1023 speedKph = 0.00; 1024 speedMph = 0.00; 1025 recordSessions = 1026 1; 1027 eeSessionChange = true; 1028 1029 } // Close if. 1030 1031 else { 1032 1033 // 1034 Calculate current session time. 1035 1036 sessionTimeMillis = millis() - sessionStartTime; 1037 sessionTime 1038 = sessionTimeMillis / 10 / 60; 1039 1040 } // Close else. 1041 1042 1043 // Ensure 1044 data is always "0" or greater, if not set to "0" 1045 1046 if ((rpm >= 0) || 1047 (speedKph >= 0) || (speedMph >= 0)) { 1048 1049 } // Close if. 1050 1051 else { 1052 rpm 1053 = 0.00; 1054 speedKph = 0.00; 1055 speedMph = 0.00; 1056 1057 } // Close else. 1058 1059 if 1060 ((sessionTimeFlag == 1) && (recordSessions == 1)) { // Calculate session 1061 duration. 1062 1063 sessionTimeArray[sessionArrayPosition] = millis() - sessionStartTime; // 1064 Calculate last session time in millis & store into array. 1065 distanceTravelledArray[sessionArrayPosition] 1066 = distanceTravelled - sessionStartDistance; // Store distance travelled into array. 1067 1068 if 1069 (eeSessionChange == true) { 1070 1071 switch (sessionArrayPosition) { 1072 1073 case 1074 0: 1075 1076 sessionTimeArray1 = sessionTimeArray[0] / 1000 / 60; // 1077 Divided by 1000 for millis to seconds, then divided by 60 for minutes. 1078 distanceTravelledArray1 1079 = distanceTravelledArray[0]; // Update chart data. 1080 EEPROM.put(eeSessionTimeArray1Address, 1081 sessionTimeArray[0]); // Record the chart data in EEPROM. 1082 EEPROM.put(eeSessionDistanceArray1Address, 1083 distanceTravelledArray[0]); // Record the chart data in EEPROM. 1084 EEPROM.commit(); 1085 eeSessionChange 1086 = false; 1087 1088 case 1: 1089 1090 sessionTimeArray2 = sessionTimeArray[1] 1091 / 1000 / 60; 1092 distanceTravelledArray2 = distanceTravelledArray[1]; 1093 EEPROM.put(eeSessionTimeArray2Address, 1094 sessionTimeArray[1]); 1095 EEPROM.put(eeSessionDistanceArray2Address, distanceTravelledArray[1]); 1096 EEPROM.commit(); 1097 eeSessionChange 1098 = false; 1099 1100 case 2: 1101 1102 sessionTimeArray3 = sessionTimeArray[2] 1103 / 1000 / 60; 1104 distanceTravelledArray3 = distanceTravelledArray[2]; 1105 EEPROM.put(eeSessionTimeArray3Address, 1106 sessionTimeArray[2]); 1107 EEPROM.put(eeSessionDistanceArray3Address, distanceTravelledArray[2]); 1108 EEPROM.commit(); 1109 eeSessionChange 1110 = false; 1111 1112 case 3: 1113 1114 sessionTimeArray4 = sessionTimeArray[3] 1115 / 1000 / 60; 1116 distanceTravelledArray4 = distanceTravelledArray[3]; 1117 EEPROM.put(eeSessionTimeArray4Address, 1118 sessionTimeArray[3]); 1119 EEPROM.put(eeSessionDistanceArray4Address, distanceTravelledArray[3]); 1120 EEPROM.commit(); 1121 eeSessionChange 1122 = false; 1123 1124 case 4: 1125 1126 sessionTimeArray5 = sessionTimeArray[4] 1127 / 1000 / 60; 1128 distanceTravelledArray5 = distanceTravelledArray[4]; 1129 EEPROM.put(eeSessionTimeArray5Address, 1130 sessionTimeArray[4]); 1131 EEPROM.put(eeSessionDistanceArray5Address, distanceTravelledArray[4]); 1132 EEPROM.commit(); 1133 eeSessionChange 1134 = false; 1135 1136 case 5: 1137 1138 sessionTimeArray6 = sessionTimeArray[5] 1139 / 1000 / 60; 1140 distanceTravelledArray6 = distanceTravelledArray[5]; 1141 EEPROM.put(eeSessionTimeArray6Address, 1142 sessionTimeArray[5]); 1143 EEPROM.put(eeSessionDistanceArray6Address, distanceTravelledArray[5]); 1144 1145 EEPROM.commit(); 1146 eeSessionChange = false; 1147 1148 case 1149 6: 1150 1151 sessionTimeArray7 = sessionTimeArray[6] / 1000 / 60; 1152 distanceTravelledArray7 1153 = distanceTravelledArray[6]; 1154 EEPROM.put(eeSessionTimeArray7Address, 1155 sessionTimeArray[6]); 1156 EEPROM.put(eeSessionDistanceArray7Address, distanceTravelledArray[6]); 1157 EEPROM.commit(); 1158 eeSessionChange 1159 = false; 1160 1161 } // Close switch case. 1162 1163 } // Close if. 1164 1165 sessionArrayPosition++; // 1166 Increment sessionTimeArrayPosition. 1167 1168 if (sessionArrayPosition >= 7) { // 1169 Check array position is within parametres. 1170 1171 sessionArrayPosition = 0; 1172 1173 } 1174 // Close if. 1175 1176 EEPROM.put(eeSessionArrayPositionAddress, sessionArrayPosition); // 1177 Record the next array position in EEPROM. 1178 EEPROM.commit(); 1179 1180 sessionTimeFlag 1181 = 0; 1182 recordSessions = 0; 1183 1184 if (eeTotalDistanceChange == true) { 1185 1186 EEPROM.put(eeTotalDistanceAddress, 1187 distanceCounter); 1188 EEPROM.commit(); 1189 eeTotalDistanceChange = false; 1190 1191 } 1192 // Close if. 1193 1194 } // Close if. 1195 1196 // Calculate current session distance 1197 travelled. 1198 1199 sessionDistance = distanceTravelled - sessionStartDistance; 1200 1201 if 1202 (maxKphSpeed == 0) { // Reset start up session distance displayed to zero, 1203 otherwise it displays current total distance. 1204 1205 sessionDistance = 0; 1206 1207 } 1208 // Close if. 1209 1210 if (sessionTime == 0) { 1211 1212 // Reset max speed. 1213 1214 maxKphSpeed 1215 = 0; 1216 1217 } // Close if. 1218 1219 /* 1220 Configure speed varibales to the 1221 same format for screen layout using dtostrf. 1222 1223 dtostrf(floatvar, StringLengthIncDecimalPoint, 1224 numVarsAfterDecimal, charbuf); 1225 1226 where 1227 1228 floatvar float 1229 variable. 1230 StringLengthIncDecimalPoint This is the length of the string that 1231 will be created. 1232 numVarsAfterDecimal The number of digits after the 1233 deimal point to print. 1234 charbuf The array to store the results*/ 1235 1236 dtostrf(rpm, 1237 6, 2, rpmArray); 1238 dtostrf(speedKph, 6, 2, kphArray); 1239 dtostrf(speedMph, 1240 6, 2, mphArray); 1241 dtostrf(maxKphSpeed, 6, 2, maxKphArray); 1242 dtostrf(averageKphSpeed, 1243 6, 2, averageKphSpeedArray); 1244 dtostrf(sessionDistance, 6, 0, sessionDistanceArray); 1245 dtostrf(sessionTime, 1246 6, 0, currentSessionTimeArray); 1247 1248 } // Close function. 1249 1250/*-----------------------------------------------------------------*/ 1251 1252void 1253 configurationDisplay() { 1254 1255 // Drawing thicker rectangle with for loop, function, 1256 X, Y, W, H, colour. 1257 1258 for (uint16_t a = 0; a < 2; a++) { 1259 1260 tft.drawRect(0 1261 + a, 0 + a, 158, 127, WHITE); 1262 1263 } // Close for loop. 1264 1265 EEPROM.get(eeMenuAddress, 1266 eeMenuSetting); 1267 EEPROM.get(eeCircAddress, eeCircSetting); 1268 EEPROM.get(eeResetSettingAddress, 1269 eeResetSetting); 1270 tft.setCursor(0, 0); 1271 1272 tft.setFont(&FreeSans9pt7b); 1273 tft.setTextSize(1); 1274 tft.setTextColor(ST77XX_WHITE); 1275 tft.setCursor(27, 1276 20); 1277 tft.println("Battery Level"); 1278 1279 tft.setFont(); 1280 tft.setTextSize(1); 1281 tft.setTextColor(ST77XX_WHITE, 1282 ST77XX_BLACK); 1283 tft.setCursor(35, 28); 1284 tft.print("V: "); 1285 tft.println(sensorValueVolts); 1286 tft.setCursor(35, 1287 38); 1288 tft.print("%: "); 1289 tft.println(int(sensorValuePerc)); 1290 tft.println(); 1291 1292 if 1293 (sensorValuePerc > 95) { 1294 1295 drawBatteryBitmap(27, 90, ccBatt100, 32, 18); 1296 1297 } 1298 1299 else 1300 if (sensorValuePerc > 79 && sensorValuePerc < 95) { 1301 1302 drawBatteryBitmap(27, 1303 90, ccBatt80, 32, 18); 1304 1305 } 1306 1307 else if (sensorValuePerc > 59 && sensorValuePerc 1308 < 80) { 1309 1310 drawBatteryBitmap(27, 90, ccBatt60, 32, 18); 1311 1312 } 1313 1314 else 1315 if (sensorValuePerc > 39 && sensorValuePerc < 60) { 1316 1317 drawBatteryBitmap(27, 1318 90, ccBatt40, 32, 18); 1319 1320 } 1321 1322 else if (sensorValuePerc > 19 && sensorValuePerc 1323 < 40) { 1324 1325 drawBatteryBitmap(27, 90, ccBatt20, 32, 18); 1326 1327 } 1328 1329 else 1330 if (sensorValuePerc < 20) { 1331 1332 drawBatteryBitmap(27, 90, ccBatt00, 32, 18); 1333 1334 } 1335 1336 tft.setFont(&FreeSans9pt7b); 1337 tft.setTextSize(1); 1338 tft.setTextColor(ST77XX_WHITE); 1339 tft.setCursor(27, 1340 65); 1341 tft.println("Configuration"); 1342 1343 tft.setFont(); 1344 tft.setTextSize(1); 1345 tft.setTextColor(ST77XX_WHITE, 1346 ST77XX_BLACK); 1347 1348 if (configurationFlag == 3) { 1349 1350 tft.setTextColor(ST77XX_RED, 1351 ST77XX_BLACK); 1352 1353 } // Close if. 1354 1355 else tft.setTextColor(ST77XX_WHITE, 1356 ST77XX_BLACK); 1357 1358 tft.setCursor(15, 70); 1359 tft.print("System Reset : 1360 "); 1361 tft.println(eeResetSetting); 1362 1363 if (configurationFlag == 2) { 1364 1365 tft.setTextColor(ST77XX_RED, 1366 ST77XX_BLACK); 1367 1368 } // Close if. 1369 1370 else tft.setTextColor(ST77XX_WHITE, 1371 ST77XX_BLACK); 1372 1373 tft.setCursor(15, 80); 1374 tft.print("Circumference : 1375 "); 1376 tft.println(eeCircSetting); 1377 tft.println(); 1378 tft.setCursor(15, 1379 90); 1380 1381 if (configurationFlag == 1) { 1382 1383 tft.setTextColor(ST77XX_RED, 1384 ST77XX_BLACK); 1385 1386 } // Close if. 1387 1388 else tft.setTextColor(ST77XX_WHITE, 1389 ST77XX_BLACK); 1390 1391 tft.print("Screen Menu Strt : "); 1392 tft.println(eeMenuSetting); 1393 tft.setCursor(15, 1394 105); 1395 1396 tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK); 1397 tft.print("Total 1398 Distance To Date"); 1399 tft.setCursor(70, 115); 1400 tft.println(distanceTravelled 1401 = distanceCounter * circumference); 1402 1403 if (digitalRead(bPlus) == LOW && (digitalRead(bMinus) 1404 == LOW)) { 1405 1406 if (configurationFlag == 4) { 1407 1408 configurationFlag 1409 = 0; 1410 1411 } 1412 1413 configurationFlag++; 1414 1415 } // Close if. 1416 1417 if 1418 (digitalRead(bPlus) == LOW && configurationFlag == 1) 1419 { 1420 if (eeMenuSetting 1421 == 4) 1422 { 1423 eeMenuSetting = 0; 1424 eeMenuSettingChange = true; 1425 1426 } 1427 else 1428 { 1429 eeMenuSetting++; 1430 eeMenuSettingChange 1431 = true; 1432 } 1433 1434 } // Close if. 1435 1436 if (digitalRead(bMinus) == LOW 1437 && configurationFlag == 1) 1438 { 1439 if (eeMenuSetting == 0) 1440 { 1441 eeMenuSetting 1442 = 4; 1443 eeMenuSettingChange = true; 1444 } 1445 else 1446 { 1447 eeMenuSetting--; 1448 eeMenuSettingChange 1449 = true; 1450 } 1451 1452 } // Close if. 1453 1454 // Write menu setting to EEPROM. 1455 1456 if 1457 (eeMenuSettingChange == true) { 1458 1459 EEPROM.put(eeMenuAddress, eeMenuSetting); 1460 EEPROM.commit(); 1461 eeMenuSettingChange 1462 = false; 1463 1464 } // Close if. 1465 1466 if (digitalRead(bPlus) == LOW && configurationFlag 1467 == 2) 1468 { 1469 if (eeCircSetting > 2.00) 1470 { 1471 eeCircSetting = 1472 0.00; 1473 eeCircSettingChange = true; 1474 1475 } 1476 else 1477 { 1478 eeCircSetting 1479 = eeCircSetting + 0.01; 1480 eeCircSettingChange = true; 1481 } 1482 1483 } 1484 // Close if. 1485 1486 if (digitalRead(bMinus) == LOW && configurationFlag == 2) 1487 { 1488 if 1489 (eeCircSetting < 0.00) 1490 { 1491 eeCircSetting = 2.00; 1492 eeCircSettingChange 1493 = true; 1494 } 1495 else 1496 { 1497 eeCircSetting = eeCircSetting - 0.01; 1498 eeCircSettingChange 1499 = true; 1500 } 1501 1502 } // Close if. 1503 1504 // Write debug setting to EEPROM. 1505 1506 if 1507 (eeCircSettingChange == true) { 1508 1509 EEPROM.put(eeCircAddress, eeCircSetting); 1510 EEPROM.commit(); 1511 eeCircSettingChange 1512 = false; 1513 1514 } // Close if. 1515 1516 if (digitalRead(bPlus) == LOW && configurationFlag 1517 == 3) 1518 { 1519 if (eeResetSetting == 2) 1520 { 1521 eeResetSetting = 1522 0; 1523 eeResetSettingChange = true; 1524 1525 } 1526 else 1527 { 1528 eeResetSetting++; 1529 eeResetSettingChange 1530 = true; 1531 } 1532 1533 } // Close if. 1534 1535 if (digitalRead(bMinus) == LOW 1536 && configurationFlag == 3) 1537 { 1538 if (eeResetSetting == 0) 1539 { 1540 eeResetSetting 1541 = 2; 1542 eeResetSettingChange = true; 1543 } 1544 else 1545 { 1546 eeResetSetting--; 1547 eeResetSettingChange 1548 = true; 1549 } 1550 1551 } // Close if. 1552 1553 // Write menu setting to EEPROM. 1554 1555 if 1556 (eeResetSettingChange == true) { 1557 1558 EEPROM.put(eeResetSettingAddress, eeResetSetting); 1559 EEPROM.commit(); 1560 eeResetSettingChange 1561 = false; 1562 1563 } // Close if. 1564 1565} // Close function. 1566 1567/*-----------------------------------------------------------------*/ 1568 1569void 1570 CurrentExerciseScreen() { 1571 1572 // Drawing thicker rectangle with Foor Loop, 1573 function, X, Y, W, H, colour. 1574 1575 for (uint16_t a = 0; a < 2; a++) { 1576 1577 tft.drawRect(0 1578 + a, 0 + a, 159, 127, WHITE); 1579 1580 } // Close for loop. 1581 1582 tft.setFont(&FreeSans9pt7b); 1583 tft.setTextSize(1); 1584 tft.setTextColor(ST77XX_WHITE); 1585 tft.setCursor(14, 1586 20); 1587 tft.print("Current Session"); 1588 1589 tft.setTextSize(1); 1590 tft.setTextColor(ST77XX_WHITE); 1591 1592 tft.setCursor(15, 1593 40); 1594 tft.print("Xph: "); 1595 tft.setCursor(15, 60); 1596 tft.print("Ave: 1597 "); 1598 tft.setCursor(15, 80); 1599 tft.print("Max: "); 1600 tft.setCursor(15, 1601 100); 1602 tft.print("Dis: "); 1603 tft.setCursor(15, 120); 1604 tft.print("Time: 1605 "); 1606 1607 tft.setFont(); 1608 tft.setTextSize(2); 1609 tft.setTextColor(ST77XX_WHITE, 1610 ST77XX_BLACK); 1611 1612 tft.setCursor(72, 28); 1613 tft.println(kphArray); 1614 1615 tft.setCursor(72, 1616 48); 1617 tft.println(averageKphSpeedArray); 1618 1619 tft.setCursor(72, 68); 1620 tft.println(maxKphArray); 1621 1622 tft.setCursor(72, 1623 88); 1624 tft.println(sessionDistanceArray); 1625 1626 tft.setCursor(72, 108); 1627 tft.println(currentSessionTimeArray); 1628 1629} 1630 // Close function. 1631 1632/*-----------------------------------------------------------------*/ 1633 1634void 1635 XphDialScreen(Adafruit_ST7735& Screen, int cx, int cy, int r, int loval, double 1636 hival, double inc, double sa, double curval, int dig, int dec, unsigned int needlecolor, 1637 unsigned int dialcolor, unsigned int textcolor, String label, boolean& redraw) 1638 { 1639 1640 double ix, iy, ox, oy, tx, ty, lx, rx, ly, ry, i, offset, stepval, data, 1641 angle; 1642 double degtorad = .0174532778; 1643 static double px = cx, py = cy, 1644 pix = cx, piy = cy, plx = cx, ply = cy, prx = cx, pry = cy; 1645 1646 // Draw the 1647 dial only one time--this will minimize flicker. 1648 1649 if (redraw == true) { 1650 redraw 1651 = false; 1652 Screen.fillCircle(cx, cy, r - 2, dialcolor); 1653 Screen.drawCircle(cx, 1654 cy, r, needlecolor); 1655 Screen.drawCircle(cx, cy, r - 1, needlecolor); 1656 Screen.setTextColor(textcolor, 1657 dialcolor); 1658 Screen.setTextSize(1); 1659 Screen.setFont(&FreeSans9pt7b); 1660 Screen.setCursor(cx 1661 - 15, cy + 30); 1662 Screen.println(label); 1663 Screen.setFont(); 1664 } 1665 1666 // 1667 Draw the current value. 1668 1669 Screen.setTextSize(1); 1670 Screen.setTextColor(textcolor, 1671 dialcolor); 1672 Screen.setCursor(cx - 7, cy + 40); 1673 Screen.println(Format(curval, 1674 dig, dec)); 1675 1676 // Center the scale about the vertical axis--and use this to 1677 offset the needle, and scale text. 1678 1679 offset = (270 + sa / 2) * degtorad; 1680 1681 // 1682 Find the scale step value based on the hival low val and the scale sweep angle. 1683 // 1684 Deducting a small value to eliminate round off errors, this val may need to be adjusted. 1685 1686 stepval 1687 = (inc) * (double(sa) / (double(hival - loval))) + .00; 1688 1689 // Draw the scale 1690 and numbers, note draw this each time to repaint where the needle was. 1691 1692 for 1693 (i = 0; i <= sa; i += stepval) { 1694 angle = (i * degtorad); 1695 angle = offset 1696 - angle; 1697 ox = (r - 2) * cos(angle) + cx; 1698 oy = (r - 2) * sin(angle) 1699 + cy; 1700 ix = (r - 10) * cos(angle) + cx; 1701 iy = (r - 10) * sin(angle) 1702 + cy; 1703 tx = (r - 10) * cos(angle) + cx; 1704 ty = (r - 15) * sin(angle) 1705 + cy; 1706 Screen.drawLine(ox, oy, ix, iy, textcolor); 1707 Screen.setTextSize(1.5); 1708 Screen.setTextColor(textcolor, 1709 dialcolor); 1710 Screen.setCursor(tx - 7, ty); 1711 data = hival - (i * (inc 1712 / stepval)); 1713 Screen.println(Format(data, dig, dec)); 1714 } 1715 1716 // Compute 1717 and draw the needle. 1718 1719 angle = (sa * (1 - (((curval - loval) / (hival - loval))))); 1720 angle 1721 = angle * degtorad; 1722 angle = offset - angle; 1723 ix = (r - 10) * cos(angle) 1724 + cx; 1725 iy = (r - 10) * sin(angle) + cy; 1726 1727 // Draw a triangle for the 1728 needle (compute and store 3 vertiticies). 1729 1730 lx = 5 * cos(angle - 90 * degtorad) 1731 + cx; 1732 ly = 5 * sin(angle - 90 * degtorad) + cy; 1733 rx = 5 * cos(angle + 90 1734 * degtorad) + cx; 1735 ry = 5 * sin(angle + 90 * degtorad) + cy; 1736 1737 // First 1738 draw the previous needle in dial color to hide it, note draw performance for triangle 1739 is pretty bad. 1740 1741 //d.fillTriangle (pix, piy, plx, ply, prx, pry, dialcolor); 1742 //d.fillTriangle 1743 (pix, piy, plx, ply, prx, pry, dialcolor); 1744 1745 //d.fillTriangle (pix, piy, 1746 plx, ply, prx - 20, pry - 20, dialcolor); 1747 //d.fillTriangle (pix, piy, prx, 1748 pry, prx + 20, pry + 20, dialcolor); 1749 1750 Screen.fillTriangle(pix, piy, plx, 1751 ply, prx, pry, dialcolor); 1752 Screen.drawTriangle(pix, piy, plx, ply, prx, pry, 1753 dialcolor); 1754 1755 // Then draw the old needle in need color to display it. 1756 1757 Screen.fillTriangle(ix, 1758 iy, lx, ly, rx, ry, needlecolor); 1759 Screen.drawTriangle(ix, iy, lx, ly, rx, ry, 1760 textcolor); 1761 1762 // Draw a cute little dial center. 1763 1764 Screen.fillCircle(cx, 1765 cy, 8, textcolor); 1766 1767 //Save all current to old so the previous dial can be 1768 hidden. 1769 1770 pix = ix; 1771 piy = iy; 1772 plx = lx; 1773 ply = ly; 1774 prx 1775 = rx; 1776 pry = ry; 1777 1778} // Close function. 1779 1780/*-----------------------------------------------------------------*/ 1781 1782void 1783 ptSessionTimeV1(Adafruit_ST7735& Screen, double x, double y, double w, double h, 1784 double loval, double hival, double inc, double curval, int dig, int dec, unsigned 1785 int barcolor, unsigned int voidcolor, unsigned int bordercolor, unsigned int textcolor, 1786 unsigned int backcolor, String label, boolean& redraw) { 1787 1788 Screen.setFont(&FreeSans9pt7b); 1789 Screen.setTextSize(1); 1790 Screen.setTextColor(ST77XX_WHITE); 1791 Screen.setCursor(20, 1792 20); 1793 Screen.println("Session Times"); 1794 Screen.setFont(); 1795 1796 double 1797 stepval, range; 1798 double my, level; 1799 double i, data; 1800 // draw the border, 1801 scale, and label once. 1802 // avoid doing this on every update to minimize flicker. 1803 if 1804 (redraw == true) { 1805 redraw = false; 1806 1807 Screen.drawRect(x - 1, y - 1808 h - 1, w + 2, h + 2, bordercolor); 1809 Screen.setTextColor(textcolor, backcolor); 1810 Screen.setTextSize(1); 1811 Screen.setCursor(x 1812 + 2, y + 7); 1813 Screen.println(label); 1814 // step val basically scales the 1815 hival and low val to the height 1816 // deducting a small value to eliminate round 1817 off errors 1818 // this val may need to be adjusted. 1819 stepval = (inc) * 1820 (double(h) / (double(hival - loval))) - 0; 1821 for (i = 0; i <= h; i += stepval) 1822 { 1823 my = y - h + i; 1824 Screen.drawFastHLine(x + w + 1, my + 1, 5, textcolor); 1825 // 1826 draw lables 1827 Screen.setTextSize(1); 1828 Screen.setTextColor(BLACK, 1829 backcolor); 1830 Screen.setCursor(x + w + 12, my - 3); 1831 data = hival 1832 - (i * (inc / stepval)); 1833 Screen.println(Format(data, dig, dec)); 1834 Screen.setFont(); 1835 } 1836 } 1837 // 1838 compute level of bar graph that is scaled to the height and the hi and low vals 1839 // 1840 this is needed to accompdate for +/- range 1841 level = (h * (((curval - loval) 1842 / (hival - loval)))); 1843 // draw the bar graph 1844 // write a upper and lower 1845 bar to minimize flicker cause by blanking out bar and redraw on update 1846 Screen.fillRect(x, 1847 y - h, w, h - level, voidcolor); 1848 Screen.fillRect(x, y - level + 1, w, level, 1849 barcolor); 1850 // write the current value 1851 /* 1852 tft.setTextColor(textcolor, 1853 backcolor); 1854 tft.setTextSize(1); 1855 tft.setCursor(x , y - h - 23); 1856 1857 tft.println(Format(curval, dig, dec)); 1858 */ 1859 1860} // Close function. 1861 1862/*-----------------------------------------------------------------*/ 1863 1864void 1865 ptSessionTimeV2(Adafruit_ST7735& Screen, double x, double y, double w, double h, 1866 double loval, double hival, double inc, double curval, int dig, int dec, unsigned 1867 int barcolor, unsigned int voidcolor, unsigned int bordercolor, unsigned int textcolor, 1868 unsigned int backcolor, String label, boolean& redraw) { 1869 1870 double stepval, 1871 range; 1872 double my, level; 1873 double i, data; 1874 // draw the border, scale, 1875 and label once 1876 // avoid doing this on every update to minimize flicker 1877 if 1878 (redraw == true) { 1879 redraw = false; 1880 1881 Screen.drawRect(x - 1, y - 1882 h - 1, w + 2, h + 2, bordercolor); 1883 Screen.setTextColor(textcolor, backcolor); 1884 Screen.setTextSize(1); 1885 Screen.setCursor(x 1886 + 2, y + 7); 1887 Screen.println(label); 1888 // step val basically scales the 1889 hival and low val to the height 1890 // deducting a small value to eliminate round 1891 off errors 1892 // this val may need to be adjusted 1893 stepval = (inc) * (double(h) 1894 / (double(hival - loval))) - 0; 1895 for (i = 0; i <= h; i += stepval) { 1896 my 1897 = y - h + i; 1898 Screen.drawFastHLine(x + w + 1, my + 1, 5, textcolor); 1899 // 1900 draw lables 1901 Screen.setTextSize(1); 1902 Screen.setTextColor(BLACK, 1903 backcolor); 1904 Screen.setCursor(x + w + 12, my - 3); 1905 data = hival 1906 - (i * (inc / stepval)); 1907 Screen.println(Format(data, dig, dec)); 1908 } 1909 } 1910 // 1911 compute level of bar graph that is scaled to the height and the hi and low vals 1912 // 1913 this is needed to accompdate for +/- range 1914 level = (h * (((curval - loval) 1915 / (hival - loval)))); 1916 // draw the bar graph 1917 // write a upper and lower 1918 bar to minimize flicker cause by blanking out bar and redraw on update 1919 Screen.fillRect(x, 1920 y - h, w, h - level, voidcolor); 1921 Screen.fillRect(x, y - level + 1, w, level, 1922 barcolor); 1923 // write the current value 1924 /* 1925 tft.setTextColor(textcolor, 1926 backcolor); 1927 tft.setTextSize(1); 1928 tft.setCursor(x , y - h - 23); 1929 1930 tft.println(Format(curval, dig, dec)); 1931 */ 1932 1933} // Close function. 1934 1935/*-----------------------------------------------------------------*/ 1936 1937void 1938 ptSessionTimeV3(Adafruit_ST7735& Screen, double x, double y, double w, double h, 1939 double loval, double hival, double inc, double curval, int dig, int dec, unsigned 1940 int barcolor, unsigned int voidcolor, unsigned int bordercolor, unsigned int textcolor, 1941 unsigned int backcolor, String label, boolean& redraw) { 1942 1943 double stepval, 1944 range; 1945 double my, level; 1946 double i, data; 1947 // draw the border, scale, 1948 and label once 1949 // avoid doing this on every update to minimize flicker 1950 if 1951 (redraw == true) { 1952 redraw = false; 1953 1954 Screen.drawRect(x - 1, y - 1955 h - 1, w + 2, h + 2, bordercolor); 1956 Screen.setTextColor(textcolor, backcolor); 1957 Screen.setTextSize(1); 1958 Screen.setCursor(x 1959 + 2, y + 7); 1960 Screen.println(label); 1961 // step val basically scales the 1962 hival and low val to the height 1963 // deducting a small value to eliminate round 1964 off errors 1965 // this val may need to be adjusted 1966 stepval = (inc) * (double(h) 1967 / (double(hival - loval))) - 0; 1968 for (i = 0; i <= h; i += stepval) { 1969 my 1970 = y - h + i; 1971 Screen.drawFastHLine(x + w + 1, my + 1, 5, textcolor); 1972 // 1973 draw lables 1974 Screen.setTextSize(1); 1975 Screen.setTextColor(textcolor, 1976 backcolor); 1977 Screen.setCursor(x + w + 12, my - 3); 1978 data = hival 1979 - (i * (inc / stepval)); 1980 Screen.println(Format(data, dig, dec)); 1981 } 1982 } 1983 // 1984 compute level of bar graph that is scaled to the height and the hi and low vals 1985 // 1986 this is needed to accompdate for +/- range 1987 level = (h * (((curval - loval) 1988 / (hival - loval)))); 1989 // draw the bar graph 1990 // write a upper and lower 1991 bar to minimize flicker cause by blanking out bar and redraw on update 1992 Screen.fillRect(x, 1993 y - h, w, h - level, voidcolor); 1994 Screen.fillRect(x, y - level + 1, w, level, 1995 barcolor); 1996 // write the current value 1997 /* 1998 tft.setTextColor(textcolor, 1999 backcolor); 2000 tft.setTextSize(1); 2001 tft.setCursor(x , y - h - 23); 2002 2003 tft.println(Format(curval, dig, dec)); 2004 */ 2005 2006} // Close function. 2007 2008/*-----------------------------------------------------------------*/ 2009 2010void 2011 ptSessionDistanceV1(Adafruit_ST7735& Screen, double x, double y, double w, double 2012 h, double loval, double hival, double inc, double curval, int dig, int dec, unsigned 2013 int barcolor, unsigned int voidcolor, unsigned int bordercolor, unsigned int textcolor, 2014 unsigned int backcolor, String label, boolean& redraw) 2015{ 2016 2017 Screen.setFont(&FreeSans9pt7b); 2018 Screen.setTextSize(1); 2019 Screen.setTextColor(ST77XX_WHITE); 2020 Screen.setCursor(4, 2021 20); 2022 Screen.println("Session Distances"); 2023 Screen.setFont(); 2024 2025 double 2026 stepval, range; 2027 double my, level; 2028 double i, data; 2029 // draw the border, 2030 scale, and label once. 2031 // avoid doing this on every update to minimize flicker. 2032 if 2033 (redraw == true) { 2034 redraw = false; 2035 2036 Screen.drawRect(x - 1, y - 2037 h - 1, w + 2, h + 2, bordercolor); 2038 Screen.setTextColor(textcolor, backcolor); 2039 Screen.setTextSize(1); 2040 Screen.setCursor(x 2041 + 2, y + 7); 2042 Screen.println(label); 2043 // step val basically scales the 2044 hival and low val to the height 2045 // deducting a small value to eliminate round 2046 off errors 2047 // this val may need to be adjusted. 2048 stepval = (inc) * 2049 (double(h) / (double(hival - loval))) - 0; 2050 for (i = 0; i <= h; i += stepval) 2051 { 2052 my = y - h + i; 2053 Screen.drawFastHLine(x + w + 1, my, 5, textcolor); 2054 // 2055 draw lables 2056 Screen.setTextSize(1); 2057 Screen.setTextColor(BLACK, 2058 backcolor); 2059 Screen.setCursor(x + w + 12, my - 3); 2060 data = hival 2061 - (i * (inc / stepval)); 2062 Screen.println(Format(data, dig, dec)); 2063 Screen.setFont(); 2064 } 2065 } 2066 // 2067 compute level of bar graph that is scaled to the height and the hi and low vals 2068 // 2069 this is needed to accompdate for +/- range 2070 level = (h * (((curval - loval) 2071 / (hival - loval)))); 2072 // draw the bar graph 2073 // write a upper and lower 2074 bar to minimize flicker cause by blanking out bar and redraw on update 2075 Screen.fillRect(x, 2076 y - h, w, h - level, voidcolor); 2077 Screen.fillRect(x, y - level + 1, w, level, 2078 barcolor); 2079 // write the current value 2080 /* 2081 tft.setTextColor(textcolor, 2082 backcolor); 2083 tft.setTextSize(1); 2084 tft.setCursor(x , y - h - 23); 2085 2086 tft.println(Format(curval, dig, dec)); 2087 */ 2088 2089} // Close function. 2090 2091/*-----------------------------------------------------------------*/ 2092 2093void 2094 ptSessionDistanceV2(Adafruit_ST7735& Screen, double x, double y, double w, double 2095 h, double loval, double hival, double inc, double curval, int dig, int dec, unsigned 2096 int barcolor, unsigned int voidcolor, unsigned int bordercolor, unsigned int textcolor, 2097 unsigned int backcolor, String label, boolean& redraw) 2098{ 2099 2100 double stepval, 2101 range; 2102 double my, level; 2103 double i, data; 2104 // draw the border, scale, 2105 and label once 2106 // avoid doing this on every update to minimize flicker 2107 if 2108 (redraw == true) { 2109 redraw = false; 2110 2111 Screen.drawRect(x - 1, y - 2112 h - 1, w + 2, h + 2, bordercolor); 2113 Screen.setTextColor(textcolor, backcolor); 2114 Screen.setTextSize(1); 2115 Screen.setCursor(x 2116 + 2, y + 7); 2117 Screen.println(label); 2118 // step val basically scales the 2119 hival and low val to the height 2120 // deducting a small value to eliminate round 2121 off errors 2122 // this val may need to be adjusted 2123 stepval = (inc) * (double(h) 2124 / (double(hival - loval))) - 0; 2125 for (i = 0; i <= h; i += stepval) { 2126 my 2127 = y - h + i; 2128 Screen.drawFastHLine(x + w + 1, my, 5, textcolor); 2129 // 2130 draw lables 2131 Screen.setTextSize(1); 2132 Screen.setTextColor(BLACK, 2133 backcolor); 2134 Screen.setCursor(x + w + 12, my - 3); 2135 data = hival 2136 - (i * (inc / stepval)); 2137 Screen.println(Format(data, dig, dec)); 2138 } 2139 } 2140 // 2141 compute level of bar graph that is scaled to the height and the hi and low vals 2142 // 2143 this is needed to accompdate for +/- range 2144 level = (h * (((curval - loval) 2145 / (hival - loval)))); 2146 // draw the bar graph 2147 // write a upper and lower 2148 bar to minimize flicker cause by blanking out bar and redraw on update 2149 Screen.fillRect(x, 2150 y - h, w, h - level, voidcolor); 2151 Screen.fillRect(x, y - level + 1, w, level, 2152 barcolor); 2153 // write the current value 2154 /* 2155 tft.setTextColor(textcolor, 2156 backcolor); 2157 tft.setTextSize(1); 2158 tft.setCursor(x , y - h - 23); 2159 2160 tft.println(Format(curval, dig, dec)); 2161 */ 2162 2163} // Close function. 2164 2165/*-----------------------------------------------------------------*/ 2166 2167void 2168 ptSessionDistanceV3(Adafruit_ST7735& Screen, double x, double y, double w, double 2169 h, double loval, double hival, double inc, double curval, int dig, int dec, unsigned 2170 int barcolor, unsigned int voidcolor, unsigned int bordercolor, unsigned int textcolor, 2171 unsigned int backcolor, String label, boolean& redraw) 2172{ 2173 2174 double stepval, 2175 range; 2176 double my, level; 2177 double i, data; 2178 // draw the border, scale, 2179 and label once 2180 // avoid doing this on every update to minimize flicker 2181 if 2182 (redraw == true) { 2183 redraw = false; 2184 2185 Screen.drawRect(x - 1, y - 2186 h - 1, w + 2, h + 2, bordercolor); 2187 Screen.setTextColor(textcolor, backcolor); 2188 Screen.setTextSize(1); 2189 Screen.setCursor(x 2190 + 2, y + 7); 2191 Screen.println(label); 2192 // step val basically scales the 2193 hival and low val to the height 2194 // deducting a small value to eliminate round 2195 off errors 2196 // this val may need to be adjusted 2197 stepval = (inc) * (double(h) 2198 / (double(hival - loval))) - 0; 2199 for (i = 0; i <= h; i += stepval) { 2200 my 2201 = y - h + i; 2202 Screen.drawFastHLine(x + w + 1, my, 5, textcolor); 2203 // 2204 draw lables 2205 Screen.setTextSize(1); 2206 Screen.setTextColor(textcolor, 2207 backcolor); 2208 Screen.setCursor(x + w + 7, my - 3); 2209 data = hival 2210 - (i * (inc / stepval)); 2211 Screen.println(Format(data, dig, dec)); 2212 } 2213 } 2214 // 2215 compute level of bar graph that is scaled to the height and the hi and low vals 2216 // 2217 this is needed to accompdate for +/- range 2218 level = (h * (((curval - loval) 2219 / (hival - loval)))); 2220 // draw the bar graph 2221 // write a upper and lower 2222 bar to minimize flicker cause by blanking out bar and redraw on update 2223 Screen.fillRect(x, 2224 y - h, w, h - level, voidcolor); 2225 Screen.fillRect(x, y - level + 1, w, level, 2226 barcolor); 2227 // write the current value 2228 /* 2229 tft.setTextColor(textcolor, 2230 backcolor); 2231 tft.setTextSize(1); 2232 tft.setCursor(x , y - h - 23); 2233 2234 tft.println(Format(curval, dig, dec)); 2235 */ 2236 2237} // Close function. 2238 2239/*-----------------------------------------------------------------*/ 2240 2241String 2242 Format(double val, int dec, int dig) { 2243 int addpad = 0; 2244 char sbuf[20]; 2245 String 2246 condata = (dtostrf(val, dec, dig, sbuf)); 2247 2248 2249 int slen = condata.length(); 2250 for 2251 (addpad = 1; addpad <= dec + dig - slen; addpad++) { 2252 condata = " " + condata; 2253 } 2254 return 2255 (condata); 2256 2257} // Close function. 2258 2259/*-----------------------------------------------------------------*/ 2260 2261void 2262 averageSpeed() { 2263 2264 // Subtract the last reading. 2265 2266 total = total - 2267 readings[readIndex]; 2268 2269 // Get latest Kph. 2270 2271 readings[readIndex] = 2272 speedKph; 2273 2274 // Add the reading to the total. 2275 2276 total = total + readings[readIndex]; 2277 2278 // 2279 Advance to the next position in the average array. 2280 2281 readIndex = readIndex 2282 + 1; 2283 2284 // If we're at the end of the array. 2285 2286 if (readIndex >= numReadings) 2287 { 2288 2289 readIndex = 0; 2290 2291 } // Close if. 2292 2293} // Close function. 2294 2295/*-----------------------------------------------------------------*/ 2296 2297void 2298 lcdBackLight() { 2299 2300 if (displayBackLight == 0) { 2301 2302 digitalWrite(lcdBackLightPin, 2303 LOW); 2304 2305 } // Close if. 2306 2307 else digitalWrite(lcdBackLightPin, HIGH); 2308 2309} 2310 // Close function. 2311 2312/*-----------------------------------------------------------------*/ 2313 2314ICACHE_RAM_ATTR 2315 void screenMenuISR() { 2316 2317 static unsigned long last_interrupt_time = 0; // 2318 Function to solve debounce 2319 unsigned long interrupt_time = millis(); 2320 2321 if 2322 (interrupt_time - last_interrupt_time > 800) 2323 { 2324 2325 detachInterrupt(interruptMenuButton); 2326 2327 if 2328 (screenMenu == 0) { 2329 2330 screenMenu = 1; 2331 dial_1 = true; 2332 screenRedraw 2333 = 1; 2334 2335 } // Close if. 2336 2337 else if (screenMenu == 1) { 2338 2339 screenMenu 2340 = 2; 2341 screenRedraw = 1; 2342 configurationFlag = 0; 2343 2344 } // 2345 Close else 2346 2347 else if (screenMenu == 2) { 2348 2349 screenMenu = 3; 2350 graph_1 2351 = true; 2352 graph_2 = true; 2353 graph_3 = true; 2354 graph_4 = true; 2355 graph_5 2356 = true; 2357 graph_6 = true; 2358 graph_7 = true; 2359 screenRedraw 2360 = 1; 2361 2362 } // Close else 2363 2364 else if (screenMenu == 3) { 2365 2366 screenMenu 2367 = 4; 2368 graph_8 = true; 2369 graph_9 = true; 2370 graph_10 = true; 2371 graph_11 2372 = true; 2373 graph_12 = true; 2374 graph_13 = true; 2375 graph_14 = 2376 true; 2377 screenRedraw = 1; 2378 2379 } // Close else 2380 2381 else if 2382 (screenMenu == 4) { 2383 2384 screenMenu = 0; 2385 screenRedraw = 1; 2386 2387 } 2388 // Close else 2389 2390 } // Close if. 2391 2392 attachInterrupt(digitalPinToInterrupt(interruptMenuButton), 2393 screenMenuISR, FALLING); 2394 last_interrupt_time = interrupt_time; 2395 2396} // 2397 Close function. 2398 2399/*-----------------------------------------------------------------*/ 2400 2401ICACHE_RAM_ATTR 2402 void wakeInterruptISR() { 2403 2404 static unsigned long last_interrupt_time = 0; 2405 // Function to solve debounce 2406 unsigned long interrupt_time 2407 = millis(); 2408 2409 if (interrupt_time - last_interrupt_time > 50) 2410 { 2411 if 2412 (wakeInterrupt == 1) { 2413 2414 wakeInterrupt = 0; 2415 displayBackLight 2416 = 0; 2417 2418 } // Close if. 2419 2420 else ( 2421 wakeInterrupt = 1, 2422 displayBackLight 2423 = 1 2424 2425 ); // Close else. 2426 2427 } // Close if. 2428 2429 last_interrupt_time 2430 = interrupt_time; 2431 2432} // Close function. 2433 2434/*-----------------------------------------------------------------*/ 2435 2436ICACHE_RAM_ATTR 2437 void rotationInterruptISR() { 2438 2439 static unsigned long last_interrupt_time 2440 = 0; // Function to solve debounce 2441 unsigned long interrupt_time 2442 = millis(); 2443 2444 if (interrupt_time - last_interrupt_time > 100) { 2445 2446 detachInterrupt(interruptWheelSensor); 2447 2448 passedTime 2449 = millis() - startTime; 2450 startTime = millis(); 2451 2452 rpm = (60000 * circumference) 2453 / passedTime; // Revs per minute. 2454 speedKph = (3600 * circumference) 2455 / passedTime; // km/h. 2456 speedMph = (3600 * circImperial) / passedTime; // 2457 Miles per hour. 2458 2459 distanceCounter++; 2460 eeTotalDistanceChange = true; 2461 distanceTravelled 2462 = distanceCounter * circumference; 2463 2464 if (sessionTimeFlag == 0) { // 2465 Set session timer to start. 2466 2467 sessionTimeFlag = 1; 2468 sessionStartTime 2469 = millis(); 2470 sessionStartDistance = distanceTravelled; 2471 recordSessions 2472 = 0; 2473 2474 } // Close if. 2475 2476 lastRotation1 = millis(); 2477 lastRotation2 2478 = lastRotation1 + 4000; 2479 2480 attachInterrupt(digitalPinToInterrupt(interruptWheelSensor), 2481 rotationInterruptISR, FALLING); 2482 2483 } // Close if. 2484 2485 last_interrupt_time 2486 = interrupt_time; 2487 2488} // Close function. 2489 2490/*-----------------------------------------------------------------*/ 2491 2492void 2493 lightSleep() { 2494 2495 if (wakeInterrupt == 0) { 2496 2497 wifi_station_disconnect(); 2498 wifi_set_opmode_current(NULL_MODE); 2499 wifi_fpm_set_sleep_type(LIGHT_SLEEP_T); 2500 wifi_fpm_open(); 2501 // Enables force sleep 2502 wifi_fpm_do_sleep(FPM_SLEEP_MAX_TIME); // Sleep for 2503 longest possible time 2504 delay(200); 2505 2506 } // Close if. 2507 2508 else {} 2509 // Do nothing 2510 2511} // Close function. 2512 2513/*-----------------------------------------------------------------*/ 2514 2515void 2516 drawBatteryBitmap(int x, int y, const uint16_t* bitmap, int bw, int bh) { 2517 2518 //int 2519 h = 64, w = 64, row, col, buffidx = 0; 2520 int buffidx = 0; 2521 int row; 2522 int 2523 col; 2524 int w = bw + y; 2525 int h = bh + x; 2526 2527 for (row = x; row < h; row++) 2528 { // For each scanline... 2529 for (col = y; col < w; col++) { // For each pixel... 2530 2531 //To read from Flash Memory, pgm_read_XXX is required. 2532 //Since image 2533 is stored as uint16_t, pgm_read_word is used as it uses 16bit address 2534 tft.drawPixel(col, 2535 row, pgm_read_word(bitmap + buffidx)); 2536 buffidx++; 2537 } // end pixel 2538 } 2539 2540} 2541 // Close function. 2542 2543/*-----------------------------------------------------------------*/ 2544 2545void 2546 resetSystemData() { 2547 2548 eeMenuSetting = 0; 2549 EEPROM.put(eeMenuAddress, eeMenuSetting); 2550 EEPROM.commit(); 2551 2552 eeCircSetting 2553 = 1.00; 2554 EEPROM.put(eeCircAddress, eeCircSetting); 2555 EEPROM.commit(); 2556 2557 eeTotalDistance 2558 = 0.00; 2559 EEPROM.put(eeTotalDistanceAddress, eeTotalDistance); 2560 EEPROM.commit(); 2561 2562 eeSessionArrayPosition 2563 = 0; 2564 EEPROM.put(eeSessionArrayPositionAddress, eeSessionArrayPosition); 2565 2566 EEPROM.put(eeSessionTimeArray1Address, 2567 0); // Populate arrays with zero data. 2568 EEPROM.put(eeSessionTimeArray2Address, 2569 0); 2570 EEPROM.put(eeSessionTimeArray3Address, 0); 2571 EEPROM.put(eeSessionTimeArray4Address, 2572 0); 2573 EEPROM.put(eeSessionTimeArray5Address, 0); 2574 EEPROM.put(eeSessionTimeArray6Address, 2575 0); 2576 EEPROM.put(eeSessionTimeArray7Address, 0); 2577 EEPROM.commit(); 2578 2579 EEPROM.put(eeSessionDistanceArray1Address, 2580 0); 2581 EEPROM.put(eeSessionDistanceArray2Address, 0); 2582 EEPROM.put(eeSessionDistanceArray3Address, 2583 0); 2584 EEPROM.put(eeSessionDistanceArray4Address, 0); 2585 EEPROM.put(eeSessionDistanceArray5Address, 2586 0); 2587 EEPROM.put(eeSessionDistanceArray6Address, 0); 2588 EEPROM.put(eeSessionDistanceArray7Address, 2589 0); 2590 EEPROM.commit(); 2591 2592 eeResetSetting = 0; 2593 EEPROM.put(eeResetSettingAddress, 2594 0); 2595 EEPROM.commit(); 2596 2597 EEPROM.get(eeMenuAddress, eeMenuSetting); 2598 EEPROM.get(eeCircAddress, 2599 eeCircSetting); 2600 EEPROM.get(eeMenuAddress, screenMenu); 2601 EEPROM.get(eeCircAddress, 2602 circumference); 2603 EEPROM.get(eeTotalDistanceAddress, distanceCounter); 2604 2605 EEPROM.commit(); 2606 2607 EEPROM.get(eeSessionTimeArray1Address, 2608 sessionTimeArray[0]); 2609 EEPROM.get(eeSessionTimeArray2Address, sessionTimeArray[1]); 2610 EEPROM.get(eeSessionTimeArray3Address, 2611 sessionTimeArray[2]); 2612 EEPROM.get(eeSessionTimeArray4Address, sessionTimeArray[3]); 2613 EEPROM.get(eeSessionTimeArray5Address, 2614 sessionTimeArray[4]); 2615 EEPROM.get(eeSessionTimeArray6Address, sessionTimeArray[5]); 2616 EEPROM.get(eeSessionTimeArray7Address, 2617 sessionTimeArray[6]); 2618 2619 EEPROM.commit(); 2620 2621 sessionTimeArray1 = sessionTimeArray[0] 2622 / 1000 / 60; // Times to be updated, needs to be divided by 1000. 2623 sessionTimeArray2 2624 = sessionTimeArray[1] / 1000 / 60; 2625 sessionTimeArray3 = sessionTimeArray[2] 2626 / 1000 / 60; 2627 sessionTimeArray4 = sessionTimeArray[3] / 1000 / 60; 2628 sessionTimeArray5 2629 = sessionTimeArray[4] / 1000 / 60; 2630 sessionTimeArray6 = sessionTimeArray[5] 2631 / 1000 / 60; 2632 sessionTimeArray7 = sessionTimeArray[6] / 1000 / 60; 2633 2634 EEPROM.get(eeSessionDistanceArray1Address, 2635 distanceTravelledArray[0]); 2636 EEPROM.get(eeSessionDistanceArray2Address, distanceTravelledArray[1]); 2637 EEPROM.get(eeSessionDistanceArray3Address, 2638 distanceTravelledArray[2]); 2639 EEPROM.get(eeSessionDistanceArray4Address, distanceTravelledArray[3]); 2640 EEPROM.get(eeSessionDistanceArray5Address, 2641 distanceTravelledArray[4]); 2642 EEPROM.get(eeSessionDistanceArray6Address, distanceTravelledArray[5]); 2643 EEPROM.get(eeSessionDistanceArray7Address, 2644 distanceTravelledArray[6]); 2645 2646 EEPROM.commit(); 2647 2648 distanceTravelledArray1 2649 = distanceTravelledArray[0]; 2650 distanceTravelledArray2 = distanceTravelledArray[1]; 2651 distanceTravelledArray3 2652 = distanceTravelledArray[2]; 2653 distanceTravelledArray4 = distanceTravelledArray[3]; 2654 distanceTravelledArray5 2655 = distanceTravelledArray[4]; 2656 distanceTravelledArray6 = distanceTravelledArray[5]; 2657 distanceTravelledArray7 2658 = distanceTravelledArray[6]; 2659 2660} // Close function. 2661 2662/*-----------------------------------------------------------------*/ 2663 2664void 2665 resetSystemDemoData() { 2666 2667 eeMenuSetting = 0; 2668 EEPROM.put(eeMenuAddress, 2669 eeMenuSetting); 2670 EEPROM.commit(); 2671 2672 eeCircSetting = 0.75; 2673 EEPROM.put(eeCircAddress, 2674 eeCircSetting); 2675 EEPROM.commit(); 2676 2677 eeTotalDistance = 5000.00; 2678 EEPROM.put(eeTotalDistanceAddress, 2679 eeTotalDistance); 2680 EEPROM.commit(); 2681 2682 eeSessionArrayPosition = 0; 2683 EEPROM.put(eeSessionArrayPositionAddress, 2684 eeSessionArrayPosition); 2685 2686 EEPROM.put(eeSessionTimeArray1Address, 240000); // 2687 Populate arrays with demo data. 2688 EEPROM.put(eeSessionTimeArray2Address, 300000); 2689 EEPROM.put(eeSessionTimeArray3Address, 2690 360000); 2691 EEPROM.put(eeSessionTimeArray4Address, 420000); 2692 EEPROM.put(eeSessionTimeArray5Address, 2693 480000); 2694 EEPROM.put(eeSessionTimeArray6Address, 540000); 2695 EEPROM.put(eeSessionTimeArray7Address, 2696 660000); 2697 EEPROM.commit(); 2698 2699 EEPROM.put(eeSessionDistanceArray1Address, 2700 8); 2701 EEPROM.put(eeSessionDistanceArray2Address, 10); 2702 EEPROM.put(eeSessionDistanceArray3Address, 2703 12); 2704 EEPROM.put(eeSessionDistanceArray4Address, 14); 2705 EEPROM.put(eeSessionDistanceArray5Address, 2706 16); 2707 EEPROM.put(eeSessionDistanceArray6Address, 18); 2708 EEPROM.put(eeSessionDistanceArray7Address, 2709 20); 2710 EEPROM.commit(); 2711 2712 eeResetSetting = 0; 2713 EEPROM.put(eeResetSettingAddress, 2714 0); 2715 EEPROM.commit(); 2716 2717 EEPROM.get(eeMenuAddress, eeMenuSetting); 2718 EEPROM.get(eeCircAddress, 2719 eeCircSetting); 2720 EEPROM.get(eeMenuAddress, screenMenu); 2721 EEPROM.get(eeCircAddress, 2722 circumference); 2723 EEPROM.get(eeTotalDistanceAddress, distanceCounter); 2724 2725 EEPROM.commit(); 2726 2727 EEPROM.get(eeSessionTimeArray1Address, 2728 sessionTimeArray[0]); 2729 EEPROM.get(eeSessionTimeArray2Address, sessionTimeArray[1]); 2730 EEPROM.get(eeSessionTimeArray3Address, 2731 sessionTimeArray[2]); 2732 EEPROM.get(eeSessionTimeArray4Address, sessionTimeArray[3]); 2733 EEPROM.get(eeSessionTimeArray5Address, 2734 sessionTimeArray[4]); 2735 EEPROM.get(eeSessionTimeArray6Address, sessionTimeArray[5]); 2736 EEPROM.get(eeSessionTimeArray7Address, 2737 sessionTimeArray[6]); 2738 2739 EEPROM.commit(); 2740 2741 sessionTimeArray1 = sessionTimeArray[0] 2742 / 100 / 60; // Times to be updated, needs to be divided by 1000. 2743 sessionTimeArray2 2744 = sessionTimeArray[1] / 100 / 60; 2745 sessionTimeArray3 = sessionTimeArray[2] / 2746 100 / 60; 2747 sessionTimeArray4 = sessionTimeArray[3] / 100 / 60; 2748 sessionTimeArray5 2749 = sessionTimeArray[4] / 100 / 60; 2750 sessionTimeArray6 = sessionTimeArray[5] / 2751 100 / 60; 2752 sessionTimeArray7 = sessionTimeArray[6] / 100 / 60; 2753 2754 EEPROM.get(eeSessionDistanceArray1Address, 2755 distanceTravelledArray[0]); 2756 EEPROM.get(eeSessionDistanceArray2Address, distanceTravelledArray[1]); 2757 EEPROM.get(eeSessionDistanceArray3Address, 2758 distanceTravelledArray[2]); 2759 EEPROM.get(eeSessionDistanceArray4Address, distanceTravelledArray[3]); 2760 EEPROM.get(eeSessionDistanceArray5Address, 2761 distanceTravelledArray[4]); 2762 EEPROM.get(eeSessionDistanceArray6Address, distanceTravelledArray[5]); 2763 EEPROM.get(eeSessionDistanceArray7Address, 2764 distanceTravelledArray[6]); 2765 2766 EEPROM.commit(); 2767 2768 distanceTravelledArray1 2769 = distanceTravelledArray[0]; 2770 distanceTravelledArray2 = distanceTravelledArray[1]; 2771 distanceTravelledArray3 2772 = distanceTravelledArray[2]; 2773 distanceTravelledArray4 = distanceTravelledArray[3]; 2774 distanceTravelledArray5 2775 = distanceTravelledArray[4]; 2776 distanceTravelledArray6 = distanceTravelledArray[5]; 2777 distanceTravelledArray7 2778 = distanceTravelledArray[6]; 2779 2780} // Close function. 2781 2782/*-----------------------------------------------------------------*/
PetBit Battery Images
arduino
This is the hex code for the battery % images which are on the configuration screen
1#pragma once 2 3#define batteryIcons_h 4 5const uint16_t ccBatt100[] PROGMEM = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 60x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x630c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 70x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 80x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x39c7, 0x5acb, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 90x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x0901, 0x0000, 0x18a3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 100x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55aa, 0x5e4b, 0x11e3, 0x20c4, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 110x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d49, 0x55ca, 0x11a2, 0x20c4, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 120x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x55eb, 0x11c2, 0x20c4, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 130x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x55eb, 0x11c2, 0x20c4, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 140x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x55eb, 0x11c2, 0x20c4, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 150x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x55eb, 0x11c2, 0x20c4, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 160x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d49, 0x55ca, 0x11a2, 0x20c4, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 170x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55aa, 0x5e4b, 0x11e3, 0x20c4, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 180x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x0901, 0x0000, 0x18a3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 190x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x39c7, 0x5acb, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 200x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 210x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x5aeb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 220x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; 23 24 25const uint16_t ccBatt80[] PROGMEM = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 260x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x630c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 270x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 280x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x31a7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 290x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x08c0, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 300x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x4deb, 0x6549, 0xf820, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 310x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d49, 0x458a, 0x5ce8, 0xf000, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 320x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d69, 0x458a, 0x5ce9, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 330x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d69, 0x458a, 0x5ce9, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 340x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d69, 0x458a, 0x5ce9, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 350x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d69, 0x458a, 0x5ce9, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 360x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d49, 0x458a, 0x5ce8, 0xf000, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 370x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x4deb, 0x6549, 0xf820, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 380x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x08c0, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 390x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x31a7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 400x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 410x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x5aeb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 420x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; 43 44 45const uint16_t ccBatt60[] PROGMEM = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 460x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x630c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 470x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 480x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x31c7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 490x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x0100, 0x1820, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 500x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55aa, 0x464b, 0xaae5, 0xf800, 0xf820, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 510x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d49, 0x3dca, 0xa2a4, 0xf800, 0xf000, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 520x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x3dea, 0xa2a4, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 530x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x3dea, 0xa2a4, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 540x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x3dea, 0xa2a4, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 550x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d6a, 0x4d49, 0x3dea, 0xa2a4, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 560x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d49, 0x3dca, 0xa2a4, 0xf800, 0xf000, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 570x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55aa, 0x464b, 0xaae5, 0xf800, 0xf820, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 580x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x0100, 0x1820, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 590x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x31c7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 600x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 610x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x5aeb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 620x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; 63 64 65const uint16_t ccBatt40[] PROGMEM = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 660x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x630c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 670x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 680x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x29c7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 690x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x2800, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 700x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ea, 0x55aa, 0xf881, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 710x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d49, 0x4d69, 0x4d49, 0xe860, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 720x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d69, 0x4d8a, 0x5549, 0xe860, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 730x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d69, 0x4d8a, 0x5549, 0xe860, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 740x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d69, 0x4d8a, 0x5549, 0xe860, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 750x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d69, 0x4d6a, 0x4d6a, 0x4d69, 0x4d8a, 0x5549, 0xe860, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 760x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d49, 0x4d69, 0x4d69, 0x4d49, 0x4d69, 0x4d49, 0xe860, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 770x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55ca, 0x55ca, 0x55ca, 0x55ca, 0x55ea, 0x55aa, 0xf881, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 780x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x2800, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 790x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x3987, 0x29c7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 800x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 810x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x5aeb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 820x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; 83 84 85const uint16_t ccBatt20[] PROGMEM = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 860x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x630c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 870x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 880x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x31a7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 890x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x0100, 0x1060, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 900x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55aa, 0x464b, 0x9b86, 0xf800, 0xf820, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 910x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d29, 0x3dca, 0x8b25, 0xf800, 0xf000, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 920x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d49, 0x3dea, 0x9346, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 930x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d49, 0x3dea, 0x9346, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 940x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d49, 0x3dea, 0x9346, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 950x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55eb, 0x4d49, 0x3dea, 0x9346, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 960x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0961, 0x55ca, 0x4d29, 0x3dca, 0x8b25, 0xf800, 0xf000, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 970x0020, 0x0000, 0xc638, 0xffff, 0x2925, 0x1182, 0x5e4b, 0x55aa, 0x464b, 0x9b86, 0xf800, 0xf820, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 980x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x0901, 0x00e0, 0x0100, 0x1060, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 990x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x39a7, 0x3987, 0x3987, 0x31a7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 1000x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1010x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x5aeb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1020x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; 103 104 105const uint16_t ccBatt00[] PROGMEM = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1060x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x630c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1070x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1080x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x31e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 1090x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x2800, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 1100x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x09a2, 0xf183, 0xf800, 0xf820, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 1110x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0981, 0xe162, 0xf800, 0xf000, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 1120x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0982, 0xe162, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 1130x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0982, 0xe162, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 1140x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0982, 0xe162, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xc638, 0x0000, 0x0020, 1150x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0982, 0xe162, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffdf, 0xffff, 0xc618, 0x0000, 0x0020, 1160x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x0981, 0xe162, 0xf800, 0xf000, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf000, 0xf800, 0x5000, 0x1124, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x0000, 0x0020, 1170x0020, 0x0000, 0xc638, 0xffff, 0x2905, 0x09a2, 0xf183, 0xf800, 0xf820, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf800, 0xf820, 0x5800, 0x1145, 0xffff, 0xffff, 0xd6ba, 0xbdf7, 0x94b2, 0x0000, 0x0000, 1180x0020, 0x0000, 0xc618, 0xffff, 0x2104, 0x0000, 0x2800, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x2800, 0x3000, 0x0000, 0x10c3, 0xffff, 0xf79e, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 1190x0000, 0x0000, 0xce59, 0xffff, 0x5b0b, 0x39c7, 0x31e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x29e7, 0x31e7, 0x39e7, 0x5aaa, 0xffff, 0xce59, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 1200x0020, 0x0000, 0x6b4d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1210x0000, 0x0000, 0x0841, 0xa534, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xbdf7, 0xc618, 0x5aeb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 1220x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
Downloadable files
PetBit Bottom Circuit Board
Bottom circuit board for ESP 8266 D1 Mini, D1 Mini Battery Shield, LIPO battery, voltage divider and 3.5mm jack plug for the external sensor.
PetBit Bottom Circuit Board
PetBit Bottom Circuit Board
Bottom circuit board for ESP 8266 D1 Mini, D1 Mini Battery Shield, LIPO battery, voltage divider and 3.5mm jack plug for the external sensor.
PetBit Bottom Circuit Board
PetBit Top Circuit Board
Top circuit board for TFT screen and control switches.
PetBit Top Circuit Board
Documentation
PetBit PCB Bottom Board
PetBit PCB Bottom Board
PetBit PCB Top Board
PetBit PCB Top Board
PetBit PCB Top Board
PetBit PCB Top Board
PetBit PCB Bottom Board
PetBit PCB Bottom Board
Comments
Only logged in users can leave comments