Dans ce tutoriel nous allons apprendre comment créer des menus (et des menus défilants) et naviguer entre les pages d’une application à l’aide de la librairie TFT_eSPI. Ce tutoriel est destiné en priorité aux montres ESP32 TTGO T-Watch de LilyGo. Moyennant quelques petites adaptations du code, vous pourrez l’utiliser pour d’autres projets Arduino avec un écran TFT classique.
La librairie TFT_eSPI est très facile à utiliser pour créer des menus et des éléments d’interface.
Il est tout à fait possible d’utiliser conjointement la librairie TFT_eSPI et LVGL dans un projet d’application pour T-Watch.
Activer la librairie TFT_eSPI
Par défaut la librairie TFT_eSPI est intégrée et activée par la librairie LilyGoWatch. C’est d’ailleurs le cas quelque soit le modèle de T-Watch que vous utilisé. Il n’y a donc rien à faire de plus.
Au niveau programmation, il est plus facile de déclarer un pointeur vers l’objet au début du projet. De cette façon vous n’aurez pas besoin de re-déclarer à chaque fois la classe pour accéder aux fonctions de la librairie TFT_eSPI
TTGOClass *ttgo; // Pointeur vers l'API des périphériques de la montre
TFT_eSPI *tft; // Pointeur vers les fonctions de la librairie TFT_eSPI
Dans le setup, on créé les objets ttgo et tft que l’on place dans les pointeurs créés au début du projet
void setup(){
...
ttgo = TTGOClass::getWatch();
ttgo->begin();
tft = ttgo->tft;
...
}
Maintenant, vous pouvez accéder aux fonctions de gestion de l’écran n’importe où dans le projet.
Comment porter du code d’un projet Arduino avec la librairie TFT_eSPI ?
Il est tout à fait possible de porter du code développé pour un Arduino et l’adapter à la T-Watch.
Il faudra simplement remplacer tous les appels aux fonctions qui sont fait avec l’opérateur point (.) par l’opérateur flèche (->).
Préparer les icônes (images) XBM
Avant toute chose, il est nécessaire de convertir les images au format XBM de chaque icônes, et ce pour chaque résolution. En effet, la librairie TFT_eSPI ne propose aucune fonction pour redimensionner les images.
Vous trouverez sur le dépôt GitHub du projet plusieurs icônes aux formats PNG et XBM que vous pouvez utiliser dans vos projets. Elles sont disponibles dans plusieurs résolutions.
Icône | Nom du fichier | 80×80 | 32×32 | 30×30 |
Menu | main | |||
WiFi | wifi | |||
Bluetooth | bluetooth | |||
Accéléromètre | accel | |||
GPS | gps | |||
Réglages | settings | |||
Horloge | clock | |||
Musique | music | |||
Outils | tools | |||
Sortie | exit |
Il est très facile de fabriquer vos propres icônes monochrome en convertissant une image au format XBM. Lisez ce tutoriel qui explique en détail comment faire.
Organisation des pages et menus de l’application T-Watch
Bien évidemment, nous n’allons pas développer l’intégralité de l’application dans ce tutoriel. Nous allons nous concentrer sur les menus et la navigation entre les pages (écrans) de l’application que voici.
- Le haut de la page principale est occupée par une barre d’état. L’icône de gauche permet d’accéder au menu défilant pour accéder à une page de l’application. Le menu de droite est identique. Chaque option est précédée d’un icône de 30×30 pixels monochrome.
- Au centre de la page, on trouve une icône qui permet d’accéder au menu pleine page
- Chaque page de l’application affiche simplement le titre dans la barre d’état
Créer un menu en pleine page
Le premier menu que nous allons créer et un menu qui s’affiche en pleine page. Il est constitué de 4 boutons. Ici, pour sortir du menu, une icône est réservée à cette usage. On pourrait également utiliser un bouton ou l’accéléromètre (secouer pour revenir en arrière par exemple).
Pour créé un menu en pleine page, il suffit de dessiner les 4 boutons à leur position à l’aide de la méthode drawXBitmap() dont les paramètres sont les suivants :
- Origine x, y de l’image
- Tableau de point de l’image au format XBM (const unsigned char)
- La largeur et la hauteur de l’image
- La couleur de l’icône
- La couleur de fond. En général, il est identique au fond de l’écran. Il suffit d’inverser les couleurs en cas de rendu erroné.
On reste dans une boucle while jusqu’à ce que la variable exitMenu passe à False.
En testant la position du doigt sur l’écran renvoyé par la fonction getTouch(), on peut en déterminer le bouton qui a été touché et renvoyer l’index correspondant.
int toolPageMenu(){
tft->fillScreen(TFT_BLACK); // efface la page précédente
tft->drawXBitmap(25, 25, wifi, icon_width, icon_height, TFT_WHITE, TFT_BLACK);
tft->drawXBitmap(130, 25, bluetooth, icon_width, icon_height, TFT_WHITE, TFT_BLACK);
tft->drawXBitmap(25, 130, gps, icon_width, icon_height, TFT_WHITE, TFT_BLACK);
tft->drawXBitmap(130, 130, menuexit, icon_width, icon_height, TFT_WHITE, TFT_BLACK);
int16_t x, y, tx, ty;
int mSelect;
// Permet de maintenir la page TFT_eSPI ouverte jusqu'à ce que l'utilisateur touche une option
boolean exitMenu = false;
while (!exitMenu) {
// Attend que l'utilisateur touche l'écran
if (ttgo->getTouch(x, y)) {
while (ttgo->getTouch(tx, ty)) {}
int index = 0;
if ( x < w / 2 && y < h / 2 ) {
mSelect = 1;
exitMenu = true;
} else if ( x > w / 2 && y < h / 2 ) {
mSelect = 2;
exitMenu = true;
} else if ( x < w / 2 && y > h / 2 ) {
mSelect = 6;
exitMenu = true;
} else {
exitMenu = true;
}
}
}
menuOpened = false;
// Renvoie l'index de la page désirée
return mSelect;
}
Voici ce qu’on obtient avec cette fonction
Menu défilant avec icône à gauche (ou pas)
Contrairement à la librairie LVGL, la librairie TFT_eSPI ne “permet” (c’est déjà beaucoup !) que de dessiner des formes géométriques simples. Pour créer un menu vertical défilent, l’astuce consiste à redessiner le menu lorsqu’on touche le haut ou le bas de l’écran.
La fonction displayScrollingMenu() permet de surveiller l’action de l’utilisateur sur l’écran. Ici, le menu est constitué de trois cellules. On récupère les libellés des cellules à l’aide d’un pointeur. Dès que l’utilisateur touche une ligne du menu, on reconstruit celui-ci en modifiant la position du curseur mSelect à l’aide des méthodes createMenuList() ou createMenuListIcon().
refreshMenu().
int displayScrollingMenu(){
int16_t x, y, tx, ty;
int mSelect = menuSelected; // l'option sélectionnée, cellule centrale du menu
boolean exitMenu = false; // permet de laisser le menu à l'écran
refreshMenu(menuSelected); // affiche le menu défilant vertical
while (!exitMenu) {
if (ttgo->getTouch(x, y)) {
// ON attend que l'écran soit relâché avant de se déplacer
while (ttgo->getTouch(tx, ty)) {}
// L'utilisateur se déplace vers le bas du menu
if (y >= 160 ) {
mSelect += 1;
if (mSelect == appMax) mSelect = 0;
refreshMenu(mSelect);
}
// L'utilisateur se déplace vers le haut du menu
if (y <= 80 ) {
mSelect -= 1;
if (mSelect < 0) mSelect = appMax - 1;
refreshMenu(mSelect);
}
// L'utilisateur à sélectionné l'option centrale, on sort du menu et on ouvre la page correspondante
if (y > 80 && y <160 ) {
exitMenu = true;
}
}
delay(5);
}
menuOpened = false;
// Renvoi l'option sélectionnée par l'utilisateur lorsqu'on sort du menu
return mSelect;
}
La méthode createMenuListIcon() créé un menu défilant vertical. Chaque option est précédée de l’icône de l’application. L’icône n’est rien d’autre qu’une image XBM dessinée avec la méthode drawXBitmap() comme précédemment.
void createMenuListIcon(int mSel) {
menuOpened = true;
int curSel = 0;
// Créé un fond bleu avec une ligne noire au milieu
ttgo->tft->fillScreen(TFT_BLUE);
ttgo->tft->fillRect(0, 80, 240, 80, TFT_BLACK);
// Première ligne du menu déroulant
if (mSel == 0) curSel = appMax - 1;
else curSel = mSel - 1;
ttgo->tft->setTextSize(2);
ttgo->tft->setTextColor(TFT_WHITE);
ttgo->tft->drawXBitmap(10, 20, getMenuIcon(curSel), 32, 32, TFT_WHITE, TFT_BLUE);
ttgo->tft->setCursor(50, 30);
ttgo->tft->println(appName[curSel]);
// Ligne centrale (option sélectionnée)
ttgo->tft->setTextSize(3);
ttgo->tft->setTextColor(TFT_RED);
ttgo->tft->drawXBitmap(10, 100, getMenuIcon(mSel), 32, 32, TFT_WHITE, TFT_BLACK);
ttgo->tft->setCursor(50, 110); // 40
ttgo->tft->println(appName[mSel]);
// Dernière ligne du menu
if (mSel == appMax - 1) curSel = 0;
else curSel = mSel + 1;
ttgo->tft->setTextSize(2);
ttgo->tft->setTextColor(TFT_WHITE);
ttgo->tft->drawXBitmap(10, 180, getMenuIcon(curSel), 32, 32, TFT_WHITE, TFT_BLUE);
ttgo->tft->setCursor(50, 190);
ttgo->tft->print(appName[curSel]);
}
Comment naviguer entre les pages, passer et renvoyer des paramètres ?
Là aussi, la librairie TFT_eSPI n’offre aucune solution avancée pour gérer les pages de l’application ESP32. En fait lorsqu’on passe d’un écran à l’autre sur la montre, on ne fait que reconstruire l’écran de toute pièce à chaque fois.
Chaque page (écran) est une simple fonction C++. Lorsqu’on souhaite passer des paramètres à un écran, il suffit de déclarer des variables ou utiliser des variables globales (attention aux bugs !).
Par exemple ici, on passe l’index de la page affichée qui permettra de récupérer son titre. Pour créer le nouvel écran, on commence par l’effacer avec la couleur de fond souhaitée (ici en noir).
Lisez cet article qui détaille les éléments de base de la librairie TFT_eSPI
void createPage(int pageindex){
tft->fillScreen(TFT_BLACK); // colorie le fond de l'écran en noir
tft->setTextDatum(TL_DATUM);
tft->setTextColor(TFT_WHITE);
tft->setTextSize(2);
tft->drawString(appName[pageindex], menuSize + 2 * menuPadding, menuPadding, 1);
tft->drawFastHLine(0, menuSize + menuPadding, w, TFT_DARKGREY);
createLeftMenuButton();
createRightMenuButton();
}
Comme un écran est une simple fonction, on peut renvoyer simplement des paramètres la commande return. C’est ce qu’on fait par exemple pour sélectionner une option du menu.
int displayScrollingMenu(){
...
return mSelect;
}
Code complet du projet
Le code complet du projet est disponible sur GitHub.
- twatch.ino
- toolPageMenu.ino
- icones.h
/* Arduino IDE - un-comment your watch */
#define LILYGO_WATCH_2019_WITH_TOUCH
//#define LILYGO_WATCH_2019_NO_TOUCH
//#define LILYGO_WATCH_BLOCK
//#define LILYGO_WATCH_2020_V1
#include <LilyGoWatch.h>
#include "icones.h"
// Pointeurs
TTGOClass *ttgo;
TFT_eSPI *tft;
//*************************//
//* Prototypes *//
//*************************//
void goToPage(int pageindex);
void createMainPage();
void createPage(int pageindex);
void createLeftMenuButton();
void createRightMenuButton();
String isMenuTouched(int x, int y);
int displayScrollingMenu();
void createMenuList(int mSel);
void createMenuListIcon(int mSel);
const unsigned char* getMenuIcon(int icoIndex);
//*************************//
//* STATIC VARIABLES *//
//*************************//
int w, h; // résolution de l'écran
int pageindex = 0; // page à afficher
#define menuSize 30
#define menuPadding 10
bool menuOpened = false;
// Pages de l'application
const int appMax = 9;
String appName[appMax] = {"Main", "WiFi", "Bluetooth", "Accel", "Settings", "Clock", "GPS", "Music", "Tools"};
int menuSelected = 0;
String menuType = "list"; // Type de menu à afficher (liste ou icone)
void setup() {
Serial.begin(115200);
// Get ttgo object and set up the display | Récupère l'objet et allume l'écran
ttgo = TTGOClass::getWatch();
ttgo->begin();
ttgo->openBL();
// Accès facile aux fonctions de la librairie TFT
tft = ttgo->tft;
//tft->setRotation(0);
tft->fillScreen(TFT_BLACK);
// Récupère le résolution de l'écran
w = tft->width(); // width | largeur
h = tft->height(); // height | hauteur
createMainPage(); // affiche la page principale au démarrage
}
void loop() {
// Attend que l'utilisateur touche un bouton de menu
int16_t x, y, tx, ty;
if (ttgo->getTouch(x, y)) {
while (ttgo->getTouch(tx, ty)) {} // wait until you stop touching
String menuindex = isMenuTouched(x, y);
// Left menu, scrolling list
// Menu de gauche, liste défilante
if ( menuindex == "leftmenu" ) {
menuType = "list";
menuSelected = displayScrollingMenu();
goToPage(menuSelected);
// Ouvre le menu droit (liste avec icone)
} else if ( menuindex == "rightmenu" ) {
Serial.println("right menu ");
menuType = "icon";
menuSelected = displayScrollingMenu();
goToPage(menuSelected);
// Menu central en pleine page constitué de 4 boutons
} else if ( menuindex == "mainmenu" ) {
Serial.println("display tool page");
menuSelected = toolPageMenu();
goToPage(menuSelected);
}
}
}
//*************************//
//* Scrolling Menu *//
//*************************//
// Affiche le menu défilant
int displayScrollingMenu(){
int16_t x, y, tx, ty;
int mSelect = menuSelected; // The currently highlighted app
boolean exitMenu = false; // used to stay in the menu until user selects app
refreshMenu(menuSelected); // affiche le menu défilant vertical
while (!exitMenu) {
if (ttgo->getTouch(x, y)) { // If you have touched something...
while (ttgo->getTouch(tx, ty)) {} // wait until you stop touching
// L'utilisateur se déplace vers le bas du menu
if (y >= 160 ) {
mSelect += 1;
if (mSelect == appMax) mSelect = 0;
refreshMenu(mSelect);
}
// L'utilisateur se déplace vers le haut du menu
if (y <= 80 ) {
mSelect -= 1;
if (mSelect < 0) mSelect = appMax - 1;
refreshMenu(mSelect);
}
// L'utilisateur à sélectionné l'option centrale, on sort du menu et on ouvre la page correspondante
if (y > 80 && y <160 ) {
exitMenu = true;
}
}
delay(5);
}
//Return with mSelect containing the desired mode
ttgo->tft->fillScreen(TFT_BLACK);
menuOpened = false;
return mSelect;
}
//*************************//
//* Menus Helpers *//
//*************************//
// L'utilisateur s'est déplacé dans le menu, on reconstruit le menu
void refreshMenu(int selectPosition){
if ( menuType == "list" ) {
// List menu | Menu liste
createMenuList(selectPosition);
} else {
// Icon | menu icône
createMenuListIcon(selectPosition);
}
}
// Construit les 3 lignes visibles du menu défilant liste
void createMenuList(int mSel) {
Serial.printf("createMenuList %u", mSel);
menuOpened = true;
// Application
int curSel = 0;
// On colorie le fond de l'écran en bleue
ttgo->tft->fillScreen(TFT_BLUE);
// The central rectangle in black to simulate the list
// Le rectangle central en noir pour simuler la liste
ttgo->tft->fillRect(0, 80, 239, 80, TFT_BLACK);
// Affiche le libellé des 3 applications à l'écran
if (mSel == 0) curSel = appMax - 1;
else curSel = mSel - 1;
// Première ligne du menu déroulant
ttgo->tft->setTextSize(2);
ttgo->tft->setTextColor(TFT_GREEN);
ttgo->tft->setCursor(50, 30);
ttgo->tft->println(appName[curSel]);
// Ligne centrale (option sélectionnée)
ttgo->tft->setTextSize(3);
ttgo->tft->setTextColor(TFT_RED);
ttgo->tft->setCursor(40, 110);
ttgo->tft->println(appName[mSel]);
// Dernière ligne du menu
if (mSel == appMax - 1) curSel = 0;
else curSel = mSel + 1;
ttgo->tft->setTextSize(2);
ttgo->tft->setTextColor(TFT_GREEN);
ttgo->tft->setCursor(50, 190);
ttgo->tft->print(appName[curSel]);
}
// Construit les 3 lignes visibles du menu défilant liste avec icône monochrome (fichier XMB)
void createMenuListIcon(int mSel) {
menuOpened = true;
int curSel = 0;
// Créé un fond bleu avec une ligne noire au milieu
ttgo->tft->fillScreen(TFT_BLUE);
ttgo->tft->fillRect(0, 80, 240, 80, TFT_BLACK);
// Première ligne du menu déroulant
if (mSel == 0) curSel = appMax - 1;
else curSel = mSel - 1;
ttgo->tft->setTextSize(2);
ttgo->tft->setTextColor(TFT_WHITE);
ttgo->tft->drawXBitmap(10, 20, getMenuIcon(curSel), 32, 32, TFT_WHITE, TFT_BLUE);
ttgo->tft->setCursor(50, 30);
ttgo->tft->println(appName[curSel]);
// Ligne centrale (option sélectionnée)
ttgo->tft->setTextSize(3);
ttgo->tft->setTextColor(TFT_RED);
ttgo->tft->drawXBitmap(10, 100, getMenuIcon(mSel), 32, 32, TFT_WHITE, TFT_BLACK);
ttgo->tft->setCursor(50, 110); // 40
ttgo->tft->println(appName[mSel]);
// Dernière ligne du menu
if (mSel == appMax - 1) curSel = 0;
else curSel = mSel + 1;
ttgo->tft->setTextSize(2);
ttgo->tft->setTextColor(TFT_WHITE);
ttgo->tft->drawXBitmap(10, 180, getMenuIcon(curSel), 32, 32, TFT_WHITE, TFT_BLUE);
ttgo->tft->setCursor(50, 190);
ttgo->tft->print(appName[curSel]);
}
// Renvoie l'index du menu qui vient d'être touché
String isMenuTouched(int x, int y){
String menuindex = "no";
Serial.printf("isMenuTouched at %u:%u \n", x, y);
if ( x <= menuSize + 2 * menuPadding && y <= menuSize + 2 * menuPadding) {
menuindex = "leftmenu";
} else if ( x >= w - 30 - 2 * menuPadding && y <= menuSize + 2 * menuPadding) {
menuindex = "rightmenu";
} else if (x >= w / 2 - icon_width / 2 && x <= w / 2 + icon_width / 2 && y >= h / 2 && y <= h / 2 + icon_height ) {
menuindex = "mainmenu";
}
return menuindex;
}
//*************************//
//* Pages *//
//*************************//
// Renvoie le nom de fichier de l'icone du menu
const unsigned char* getMenuIcon(int icoIndex){
Serial.printf("getMenuIcon %u \n", icoIndex);
switch (icoIndex) {
case 0:
return main32;
break;
case 1:
return wifi32;
break;
case 2:
return bluetooth32;
break;
case 3:
return accel32;
break;
case 4:
return settings32;
break;
case 5:
return clock32;
break;
case 6:
return gps32;
break;
case 7:
return music32;
break;
case 8:
return tools32;
break;
default:
return main32;
}
}
void goToPage(int pageindex){
Serial.printf("displayPage %u \n", pageindex);
switch (pageindex){
case 0:
createMainPage(); // Main page
break;
default:
createPage(pageindex);
}
}
// Page principale de l'application
void createMainPage(){
tft->fillScreen(TFT_BLACK); // Fill background in black | colorie le fond de l'écran en noir
tft->setTextDatum(MC_DATUM);
tft->setTextColor(TFT_WHITE);
tft->setTextSize(2);
tft->drawString("Main Page", w / 2, h / 3, 1);
tft->drawXBitmap(w / 2 - icon_width / 2 , h / 2, menu, icon_width, icon_height, TFT_WHITE, TFT_BLACK);
createLeftMenuButton();
createRightMenuButton();
}
// Créé une page lambda de l'application
void createPage(int pageindex){
tft->fillScreen(TFT_BLACK); // Fill background in black | colorie le fond de l'écran en noir
tft->setTextDatum(TL_DATUM);
tft->setTextColor(TFT_WHITE);
tft->setTextSize(2);
tft->drawString(appName[pageindex], menuSize + 2 * menuPadding, menuPadding, 1);
tft->drawFastHLine(0, menuSize + menuPadding, w, TFT_DARKGREY);
createLeftMenuButton();
createRightMenuButton();
}
void createLeftMenuButton(){
for (size_t i = 0; i < 3; i++) {
tft->fillRoundRect(menuPadding, menuPadding + i*8, menuSize, 4, 2, TFT_WHITE);
}
}
void createRightMenuButton(){
tft->drawXBitmap(w - 30 - menuPadding, menuPadding , menu30, 30, 30, TFT_WHITE, TFT_BLACK);
}
// Menu central en plein écran avec uniquement 4 boutons (wifi, bluetooth, GPS, sortie)
int toolPageMenu(){
tft->fillScreen(TFT_BLACK); // colorie le fond de l'écran en noir
tft->drawXBitmap(25, 25, wifi, icon_width, icon_height, TFT_WHITE, TFT_BLACK);
tft->drawXBitmap(130, 25, bluetooth, icon_width, icon_height, TFT_WHITE, TFT_BLACK);
tft->drawXBitmap(25, 130, gps, icon_width, icon_height, TFT_WHITE, TFT_BLACK);
tft->drawXBitmap(130, 130, menuexit, icon_width, icon_height, TFT_WHITE, TFT_BLACK);
int16_t x, y, tx, ty;
int mSelect = 0;
// Permet de maintenir la page TFT_eSPI ouverte jusqu'à ce que l'utilisateur touche une option
boolean exitMenu = false;
while (!exitMenu) {
// Attend que l'utilisateur touche l'écran
if (ttgo->getTouch(x, y)) {
while (ttgo->getTouch(tx, ty)) {}
Serial.printf("toolPageMenu clicked %u %u\n", x, y);
int index = 0;
if ( x < w / 2 && y < h / 2 ) {
mSelect = 1;
exitMenu = true;
} else if ( x > w / 2 && y < h / 2 ) {
mSelect = 2;
exitMenu = true;
} else if ( x < w / 2 && y > h / 2 ) {
mSelect = 6;
exitMenu = true;
} else {
mSelect = 0;
exitMenu = true;
}
}
}
ttgo->tft->fillScreen(TFT_BLACK);
menuOpened = false;
// Renvoie l'index de la page désirée
return mSelect;
}
#include // PROGMEM support header
#define icon_width 80
#define icon_height 80
PROGMEM const unsigned char menu[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00,
0x80, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0xC0, 0xFF,
0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0x01, 0xE0, 0xFF, 0xFF, 0xFF,
0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xF8,
0xFF, 0xFF, 0xFF, 0x07, 0xF0, 0xFF, 0xFF, 0xFF, 0x1F, 0xF8, 0xFF, 0xFF,
0xFF, 0x07, 0xF0, 0x07, 0x00, 0xC0, 0x1F, 0xF8, 0x01, 0x00, 0xE0, 0x07,
0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03,
0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80,
0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC,
0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00,
0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F,
0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03,
0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80,
0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC,
0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00,
0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F,
0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03,
0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80,
0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC,
0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00,
0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F,
0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x07,
0x00, 0xC0, 0x1F, 0xF8, 0x01, 0x00, 0xE0, 0x07, 0xF0, 0xFF, 0xFF, 0xFF,
0x1F, 0xF8, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xF8,
0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF,
0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0x01,
0x80, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFE,
0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8,
0xFF, 0x3F, 0x00, 0x00, 0xFE, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0x01, 0x80, 0xFF, 0xFF, 0x7F, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x03, 0xE0,
0xFF, 0xFF, 0xFF, 0x01, 0xC0, 0xFF, 0xFF, 0xFF, 0x07, 0xF0, 0xFF, 0xFF,
0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0x03,
0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xF8, 0xFF, 0xFF, 0xFF, 0x07, 0xF0, 0x07,
0x00, 0xC0, 0x1F, 0xF8, 0x03, 0x00, 0xF0, 0x07, 0xF0, 0x03, 0x00, 0x80,
0x1F, 0xFC, 0x01, 0x00, 0xE0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC,
0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00,
0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F,
0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03,
0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80,
0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC,
0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00,
0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F,
0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03,
0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80,
0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC,
0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00,
0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F,
0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03,
0x00, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80,
0x1F, 0xFC, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x03, 0x00, 0x80, 0x1F, 0xFC,
0x01, 0x00, 0xE0, 0x07, 0xF0, 0x07, 0x00, 0xC0, 0x1F, 0xF8, 0x03, 0x00,
0xF0, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xF8, 0xFF, 0xFF, 0xFF, 0x07,
0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xFF,
0xFF, 0xFF, 0x07, 0xF0, 0xFF, 0xFF, 0xFF, 0x03, 0x80, 0xFF, 0xFF, 0xFF,
0x03, 0xE0, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x80,
0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xFC, 0xFF,
0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const unsigned char menuexit[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x1F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00,
0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0x9B, 0xA6, 0x55, 0x69, 0xB9,
0x7F, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00,
0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0xFC, 0x01, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x03,
0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00,
0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00,
0x7F, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00,
0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00,
0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x01,
0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00,
0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00,
0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFC, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0xFC, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFE, 0x07, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0x1F, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00,
0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0xFC, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0xFC, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC0, 0xFF, 0x01, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x07, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x07,
0xFC, 0x01, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC, 0x03,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFC, 0x01, 0x00, 0x80,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFC, 0x03, 0x00, 0x80, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x3F, 0xFC, 0x03, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x3F, 0xFC, 0x01, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F,
0xFC, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFC, 0x01,
0x00, 0x00, 0xDC, 0xDD, 0xB7, 0xDB, 0xFF, 0x0F, 0xFC, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x07, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0xFF, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xFF, 0x01, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00,
0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0xFC, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0xFC, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0x0F, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0x07, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00,
0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0xFC, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0xFC, 0x01,
0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00,
0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00,
0x7F, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00,
0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00,
0xFC, 0x03, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x03,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00,
0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00,
0x7F, 0x00, 0x00, 0x00, 0xFC, 0x5B, 0xB5, 0xA5, 0x59, 0xAA, 0x7F, 0x00,
0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x3F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00,
0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const unsigned char wifi[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF,
0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF,
0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xF8,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0xFF, 0xFF,
0x2B, 0xE4, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00,
0xFC, 0xFF, 0xFF, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF,
0xFF, 0x01, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07,
0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0xF8, 0xFF,
0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0xFC, 0xFF, 0x03, 0x00,
0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x7F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFC, 0x3F, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F,
0xF8, 0x0F, 0x00, 0x00, 0x68, 0x09, 0x00, 0x00, 0xF0, 0x0F, 0xF0, 0x07,
0x00, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0xE0, 0x07, 0xC0, 0x03, 0x00, 0xF0,
0xFF, 0xFF, 0x0F, 0x00, 0x80, 0x03, 0xC0, 0x00, 0x00, 0xFE, 0xFF, 0xFF,
0x7F, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00,
0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00,
0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x00, 0x00,
0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x03,
0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00,
0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E,
0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00,
0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x1F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const unsigned char bluetooth[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF,
0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x1F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xEF, 0x7F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0xDF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0x9F, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC0, 0x0F, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F,
0xFE, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0xFC, 0x0F,
0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x80, 0x0F, 0xF0, 0x0F, 0x00, 0x00,
0x00, 0x00, 0x7E, 0x00, 0xC0, 0x1F, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00,
0xFE, 0x01, 0xC0, 0x1F, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01,
0xC0, 0x0F, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x03, 0xC0, 0x1F,
0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0xC0, 0x0F, 0xC0, 0x7F,
0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0x00, 0x00,
0x00, 0x00, 0xF0, 0x1F, 0xC0, 0x1F, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00,
0xE0, 0x7F, 0xC0, 0x1F, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F,
0xC0, 0x0F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xC0, 0x1F,
0xFE, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC3, 0x1F, 0xFF, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xC3, 0xCF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xCF, 0xDF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF8, 0xCF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0,
0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF,
0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF8, 0x8F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0xC7, 0xDF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0xC7, 0xCF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC1, 0x1F,
0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xC1, 0x0F, 0xFE, 0x03,
0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0xC0, 0x1F, 0xFC, 0x07, 0x00, 0x00,
0x00, 0x00, 0xE0, 0x7F, 0xC0, 0x0F, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0x00,
0xF0, 0x1F, 0xC0, 0x1F, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F,
0xC0, 0x1F, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0xC0, 0x1F,
0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x03, 0xC0, 0x0F, 0x80, 0x7F,
0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0xC0, 0x1F, 0x80, 0x7F, 0x00, 0x00,
0x00, 0x00, 0xFE, 0x00, 0xC0, 0x1F, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00,
0xFE, 0x00, 0xC0, 0x0F, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00,
0xC0, 0x1F, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F,
0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0xFE, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0xFF, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0x9F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0xCF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF,
0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x0F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const unsigned char gps[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xf8, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xfe, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfe, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff,
0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x87, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc0, 0xff, 0x83, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0xff, 0xe1, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xf8, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xfc, 0xff, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x9f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x3f, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
0xfe, 0x3f, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfd, 0x3f,
0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf9, 0x0f, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xf7, 0x0f, 0xff, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0xfc, 0xe7, 0xc3, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0xfc, 0xcf, 0xc3, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x9f, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0xf0,
0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0xf0, 0xff, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x7f, 0xe0, 0xff, 0x7f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7e, 0x80, 0xff, 0xff, 0x01, 0x00, 0x0e, 0x1c, 0x0c, 0x00,
0x38, 0x00, 0xff, 0xff, 0x03, 0x00, 0x0c, 0x18, 0x1c, 0x00, 0x00, 0x00,
0xfe, 0xff, 0x07, 0x00, 0x0e, 0x38, 0x3c, 0x00, 0x00, 0x00, 0xfc, 0xff,
0x0f, 0x00, 0x1c, 0x38, 0x78, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x1f, 0x00,
0x1c, 0x30, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x3f, 0x00, 0x18, 0x70,
0xe0, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x38, 0xf0, 0x80, 0x00,
0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0x38, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x80, 0xff, 0xff, 0x01, 0x70, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff,
0xff, 0x03, 0x70, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x07,
0xe0, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x0f, 0xe0, 0x01,
0xfe, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x1f, 0xc0, 0x01, 0xf0, 0x00,
0x00, 0x00, 0x00, 0xf0, 0xff, 0x1f, 0x80, 0x03, 0x80, 0x00, 0x00, 0x00,
0x00, 0xe0, 0xff, 0x07, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0xff, 0x07, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x01,
0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xf0, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
PROGMEM const unsigned char accel[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xdf, 0xe7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce,
0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xf8, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xf8, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xfc, 0x01,
0x00, 0x7e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x7c,
0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x7c, 0x00, 0x00,
0x80, 0x3f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x80, 0x3f,
0x00, 0x00, 0xfc, 0xf0, 0x1f, 0x7c, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00,
0xfc, 0xf8, 0x3f, 0x7c, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xf8,
0x3f, 0x7c, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0x7c,
0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0x7c, 0x00, 0x00,
0xf8, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0x7c, 0x00, 0x00, 0xf0, 0xff,
0xff, 0xff, 0xff, 0xf8, 0x3f, 0x7c, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x3f, 0x7c, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0xfc, 0xf0,
0x3f, 0x7c, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0xfc, 0xf0, 0x1f, 0x7c,
0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x7c, 0x00, 0x00,
0x00, 0x7e, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x3c,
0x00, 0x00, 0xf8, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
0xf8, 0x01, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x7f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xc1, 0x01, 0x00, 0x00,
0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xe3, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf8, 0xe7, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf0, 0xef, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xe0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const unsigned char clockico[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x1B, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF,
0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F,
0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xEF, 0xFB, 0xFF, 0x1F, 0x00, 0x00,
0x00, 0x00, 0xFE, 0x7F, 0xC0, 0x01, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x1F, 0xC0, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07,
0xC0, 0x03, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0xC0, 0x01,
0xE0, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0x06, 0x80, 0x01, 0x30, 0xFF,
0x03, 0x00, 0x00, 0xF0, 0x3F, 0x0C, 0x00, 0x00, 0x10, 0xFE, 0x0F, 0x00,
0x00, 0xF8, 0x1F, 0x08, 0x00, 0x00, 0x10, 0xF8, 0x0F, 0x00, 0x00, 0xFC,
0x0F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xFC, 0x07, 0x00,
0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x00, 0x00,
0x00, 0xC0, 0x3F, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0,
0x7F, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00,
0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x80, 0xFF,
0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x80, 0xFF, 0x0F, 0x00,
0x00, 0x00, 0x00, 0xF0, 0xFF, 0x01, 0xC0, 0xBF, 0x0F, 0x00, 0x00, 0x00,
0x00, 0xF8, 0xFE, 0x01, 0xC0, 0x3F, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x70,
0xFC, 0x01, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x20, 0xFC, 0x03,
0xE0, 0x1F, 0x80, 0x07, 0x00, 0x00, 0xE0, 0x01, 0xF8, 0x03, 0xE0, 0x0F,
0xC0, 0x1F, 0x00, 0x00, 0xF8, 0x01, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3F,
0x00, 0x00, 0xFF, 0x01, 0xF8, 0x07, 0xE0, 0x0F, 0x00, 0xFF, 0x00, 0x00,
0xFF, 0x00, 0xF8, 0x07, 0xF0, 0x0F, 0x00, 0xFE, 0x03, 0xE0, 0x3F, 0x00,
0xF0, 0x07, 0xF0, 0x07, 0x00, 0xF8, 0x0F, 0xF8, 0x1F, 0x00, 0xF0, 0x07,
0xF0, 0x07, 0x00, 0xE0, 0xBF, 0xFD, 0x07, 0x00, 0xF0, 0x07, 0xF0, 0x07,
0x00, 0xC0, 0xFF, 0xFF, 0x01, 0x00, 0xF0, 0x07, 0xF0, 0x07, 0x00, 0x00,
0xFE, 0x7F, 0x00, 0x00, 0xF0, 0x0F, 0xF0, 0x7F, 0x00, 0x00, 0xFC, 0x1F,
0x00, 0x00, 0xFF, 0x07, 0xF0, 0x7F, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00,
0xFE, 0x0F, 0xF0, 0x07, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0xF0, 0x07,
0xF0, 0x07, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xF0, 0x07, 0xF0, 0x0F,
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xF0, 0x07, 0xE0, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF0, 0x07, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0x07, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03,
0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0xE0, 0x1F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0xC0, 0x1F, 0x04, 0x00,
0x00, 0x00, 0x00, 0x10, 0xFC, 0x03, 0xC0, 0x3F, 0x0F, 0x00, 0x00, 0x00,
0x00, 0x78, 0xFC, 0x03, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF8,
0xFF, 0x01, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x01,
0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0xFF, 0x01, 0x00,
0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00,
0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0,
0x3F, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00,
0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xF8,
0x1F, 0x08, 0x00, 0x00, 0x10, 0xFC, 0x0F, 0x00, 0x00, 0xF0, 0x3F, 0x0C,
0x00, 0x00, 0x30, 0xFE, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0x06, 0xC0, 0x01,
0x30, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0xC0, 0x03, 0xE0, 0xFF,
0x01, 0x00, 0x00, 0x80, 0xFF, 0x07, 0xC0, 0x01, 0xF0, 0xFF, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x1F, 0xC0, 0x01, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00,
0xFE, 0xFF, 0xC1, 0x81, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF,
0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF0, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x05,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const unsigned char music[] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
PROGMEM const unsigned char settings[] = {
0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5F, 0xF9, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0F, 0xF0, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x0F, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x0F, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x80,
0x07, 0xF0, 0x01, 0xF0, 0x01, 0x00, 0x00, 0xC0, 0x3F, 0xC0, 0x07, 0xE0,
0x01, 0xFC, 0x03, 0x00, 0x00, 0xE0, 0x7F, 0xE0, 0x07, 0xE0, 0x07, 0xFE,
0x07, 0x00, 0x00, 0xF0, 0xFF, 0xFC, 0x07, 0xE0, 0xBF, 0xFF, 0x0F, 0x00,
0x00, 0xF8, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xBF, 0x1F, 0x00, 0x00, 0xFC,
0xF8, 0xFF, 0x03, 0xC0, 0xFF, 0x1F, 0x3F, 0x00, 0x00, 0x7E, 0xE0, 0x7F,
0x00, 0x00, 0xFE, 0x07, 0x7F, 0x00, 0x00, 0x7F, 0xC0, 0x0F, 0x00, 0x00,
0xF0, 0x03, 0xFC, 0x00, 0x00, 0x1F, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00,
0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00,
0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3F, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x1F, 0x00,
0x00, 0xF8, 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x80, 0x1F, 0x00, 0x00, 0xF0,
0x01, 0x80, 0xFF, 0xFF, 0x01, 0x80, 0x0F, 0x00, 0x00, 0xF8, 0x00, 0xE0,
0xFF, 0xFF, 0x07, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0xF0, 0x5F, 0xFA,
0x0F, 0x00, 0x1F, 0x00, 0x00, 0x7C, 0x00, 0xF8, 0x07, 0xE0, 0x1F, 0x00,
0x1E, 0x00, 0x00, 0x7C, 0x00, 0xFC, 0x01, 0x80, 0x3F, 0x00, 0x3E, 0x00,
0x00, 0x7C, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0xE0, 0x3F,
0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0xFC, 0x07, 0xFC, 0x3F, 0x00, 0x3F,
0x00, 0x00, 0xFC, 0x00, 0xFC, 0x3F, 0xFE, 0x3F, 0x00, 0x1F, 0x00, 0x00,
0xF8, 0x00, 0xF8, 0x7F, 0xFE, 0x1F, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00,
0xF8, 0xFF, 0xFF, 0x02, 0x80, 0x0F, 0x00, 0x00, 0xF0, 0x01, 0x80, 0xFF,
0x0F, 0x00, 0x80, 0x0F, 0x00, 0x00, 0xF0, 0x01, 0x00, 0xF8, 0x1F, 0x00,
0x80, 0x07, 0x00, 0x00, 0xF0, 0x01, 0x00, 0xF0, 0x0F, 0x00, 0x80, 0x07,
0x00, 0x00, 0xE0, 0x01, 0x00, 0xF8, 0x1F, 0x00, 0x80, 0x0F, 0x00, 0x00,
0xE0, 0x01, 0x00, 0xF0, 0x1F, 0x00, 0x80, 0x0F, 0x00, 0x00, 0xE0, 0x01,
0x00, 0xF0, 0x0F, 0x00, 0x80, 0x07, 0x00, 0x00, 0xF0, 0x01, 0x00, 0xF8,
0x1F, 0x00, 0x80, 0x07, 0x00, 0x00, 0xE0, 0x01, 0x00, 0xF0, 0x0F, 0x00,
0x80, 0x0F, 0x00, 0x00, 0xF0, 0x01, 0x00, 0xF8, 0x7F, 0x00, 0x80, 0x0F,
0x00, 0x00, 0xF0, 0x01, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x1F, 0x00, 0x00,
0xF8, 0x00, 0xF8, 0xFF, 0xFE, 0x3F, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00,
0xFC, 0x7F, 0xFC, 0x3F, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x3F,
0xF0, 0x3F, 0x00, 0x7E, 0x00, 0x00, 0x7C, 0x00, 0xFC, 0x07, 0x00, 0x7E,
0x00, 0x7C, 0x00, 0x00, 0x3F, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0xFC,
0x01, 0x80, 0x3F, 0x00, 0x3E, 0x00, 0x00, 0x78, 0x00, 0xF8, 0x07, 0xE0,
0x1F, 0x00, 0x3E, 0x00, 0x00, 0xF8, 0x00, 0xF0, 0x3F, 0xFC, 0x0F, 0x00,
0x1F, 0x00, 0x00, 0xF8, 0x00, 0xE0, 0xFF, 0xFF, 0x07, 0x00, 0x1F, 0x00,
0x00, 0xF0, 0x01, 0x80, 0xFF, 0xFF, 0x01, 0x80, 0x0F, 0x00, 0x00, 0xF0,
0x01, 0x00, 0xFF, 0xFF, 0x00, 0x80, 0x0F, 0x00, 0x00, 0xF8, 0x01, 0x00,
0xF8, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00,
0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x03, 0x00, 0x00,
0xC0, 0x00, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x0F, 0x00, 0x00, 0xF0, 0x03,
0xFE, 0x00, 0x00, 0x7E, 0xE0, 0x7F, 0x00, 0x00, 0xFE, 0x07, 0x7E, 0x00,
0x00, 0xFC, 0xF0, 0xFF, 0x03, 0xC0, 0xFF, 0x0F, 0x3F, 0x00, 0x00, 0xF8,
0xFD, 0xFF, 0x07, 0xC0, 0xFF, 0xBF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0xFD,
0x07, 0xE0, 0xBF, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0x7F, 0xF0, 0x07, 0xE0,
0x07, 0xFE, 0x07, 0x00, 0x00, 0xC0, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xFC,
0x03, 0x00, 0x00, 0x80, 0x1F, 0x80, 0x07, 0xF0, 0x01, 0xF0, 0x01, 0x00,
0x00, 0x00, 0x00, 0x80, 0x0F, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x0F, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x0F, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xF5,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const unsigned char tools[] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
PROGMEM const unsigned char main32[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0xF8, 0x0F,
0xFC, 0x3F, 0xFC, 0x1F, 0x0C, 0x70, 0x0E, 0x30, 0x0C, 0x20, 0x06, 0x30,
0x0C, 0x30, 0x06, 0x30, 0x0C, 0x60, 0x06, 0x30, 0x0E, 0x70, 0x06, 0x30,
0x0C, 0x20, 0x06, 0x30, 0x0C, 0x30, 0x06, 0x30, 0x0C, 0x60, 0x06, 0x30,
0x0C, 0x70, 0x06, 0x30, 0xFC, 0x3F, 0xFE, 0x3F, 0xF8, 0x3F, 0xFC, 0x0F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x0D, 0xB0, 0x09,
0xF8, 0x3F, 0xFC, 0x1F, 0x1C, 0x30, 0x4E, 0x3A, 0x0C, 0x70, 0x06, 0x30,
0x0C, 0x20, 0x06, 0x30, 0x0C, 0x30, 0x06, 0x30, 0x0C, 0x60, 0x06, 0x30,
0x0C, 0x60, 0x06, 0x30, 0x0C, 0x30, 0x06, 0x30, 0x0E, 0x60, 0x06, 0x30,
0x0C, 0x60, 0x06, 0x30, 0x4C, 0x3A, 0x9E, 0x39, 0xF8, 0x3F, 0xFC, 0x1F,
0xD0, 0x06, 0xA0, 0x09, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const unsigned char wifi32[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x05, 0x00, 0x00, 0xFE, 0x7F, 0x00,
0x80, 0xFF, 0xFF, 0x01, 0xE0, 0xFF, 0xFF, 0x07, 0xF0, 0x0F, 0xF0, 0x1F,
0xFC, 0x01, 0x80, 0x3F, 0x7E, 0x00, 0x00, 0x7E, 0x1E, 0x00, 0x00, 0x7C,
0x0C, 0xE0, 0x0B, 0x30, 0x04, 0xFC, 0x3F, 0x20, 0x00, 0xFF, 0x7F, 0x00,
0x80, 0xFF, 0xFF, 0x01, 0xC0, 0x1F, 0xF8, 0x03, 0xC0, 0x07, 0xE0, 0x03,
0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00,
0x00, 0xE0, 0x07, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0xF0, 0x0F, 0x00,
0x00, 0xF0, 0x0F, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0xE0, 0x07, 0x00,
0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const unsigned char bluetooth32[] = {
0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x0F, 0x00,
0x00, 0x80, 0x1F, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x3B, 0x00,
0x00, 0x80, 0xF3, 0x00, 0x80, 0x81, 0xE3, 0x01, 0x80, 0x03, 0xC3, 0x01,
0x00, 0x8F, 0xE3, 0x01, 0x00, 0x9E, 0x73, 0x00, 0x00, 0x9C, 0x7B, 0x00,
0x00, 0x78, 0x3F, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xE0, 0x0F, 0x00,
0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0xE0, 0x07, 0x00,
0x00, 0xF0, 0x0F, 0x00, 0x00, 0xB8, 0x3F, 0x00, 0x00, 0x3C, 0x7B, 0x00,
0x00, 0x8E, 0xF3, 0x00, 0x00, 0x8F, 0xE3, 0x01, 0x80, 0x03, 0xC3, 0x01,
0x80, 0x81, 0xE3, 0x01, 0x00, 0x80, 0x73, 0x00, 0x00, 0x00, 0x7B, 0x00,
0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x80, 0x0F, 0x00,
0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00,
};
PROGMEM const unsigned char gps32[] = {
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x7c, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00,
0xf8, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00,
0xc0, 0x1f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00,
0x00, 0x9e, 0x03, 0x00, 0x00, 0xcc, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00,
0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xee, 0x07, 0x00,
0x00, 0xfc, 0x33, 0x00, 0x00, 0xb8, 0x79, 0x00, 0x00, 0x78, 0xfc, 0x00,
0x00, 0x60, 0xfc, 0x01, 0x80, 0x40, 0xf8, 0x03, 0x12, 0x01, 0xf0, 0x07,
0x22, 0x03, 0xe0, 0x0f, 0x42, 0x00, 0xc0, 0x1f, 0xc4, 0x00, 0x80, 0x3f,
0x08, 0x01, 0x00, 0x3f, 0x18, 0x00, 0x00, 0x1e, 0x20, 0x00, 0x00, 0x1c,
0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const unsigned char accel32[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3c, 0x00,
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x5a, 0x00,
0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x80, 0xff, 0x01, 0x20, 0xc0, 0x81, 0x03, 0x30, 0xc0, 0x00, 0x03,
0x38, 0xc0, 0x3c, 0x03, 0xfc, 0xff, 0x3c, 0x03, 0xfc, 0xff, 0x3c, 0x03,
0x38, 0xc0, 0x3c, 0x03, 0x30, 0xc0, 0x00, 0x03, 0x00, 0x80, 0x83, 0x03,
0x00, 0x80, 0xff, 0x03, 0x00, 0x00, 0x7e, 0x37, 0x00, 0x00, 0x00, 0x3e,
0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0
};
PROGMEM const unsigned char settings32[] = {
0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x06, 0x00, 0x00, 0x20, 0x04, 0x00,
0xc0, 0x30, 0x0c, 0x03, 0xe0, 0x35, 0xcc, 0x07, 0x70, 0x1f, 0xf8, 0x0c,
0x18, 0x04, 0x40, 0x18, 0x18, 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, 0x0c,
0x20, 0xc0, 0x03, 0x0c, 0x60, 0xf0, 0x0f, 0x04, 0x30, 0x18, 0x18, 0x0c,
0x18, 0x0c, 0x30, 0x2c, 0x1f, 0x0c, 0x20, 0xf8, 0x03, 0x06, 0x60, 0xc0,
0x03, 0x06, 0x60, 0xc0, 0x03, 0x06, 0x60, 0x80, 0x03, 0x06, 0x60, 0xc0,
0x1f, 0x04, 0x20, 0xf8, 0x38, 0x0c, 0x30, 0x1c, 0x30, 0x18, 0x1c, 0x0c,
0x60, 0xf0, 0x0f, 0x04, 0x20, 0xc0, 0x03, 0x0e, 0x30, 0x00, 0x00, 0x0c,
0x18, 0x00, 0x00, 0x18, 0x18, 0x02, 0x00, 0x18, 0x30, 0x1f, 0xf8, 0x0c,
0xe0, 0x39, 0xac, 0x07, 0xc0, 0x20, 0x0c, 0x03, 0x00, 0x20, 0x04, 0x00,
0x00, 0xe0, 0x06, 0x00, 0x00, 0xc0, 0x07, 0x00,
};
PROGMEM const unsigned char clock32[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00,
0x00, 0xFE, 0x7F, 0x00, 0x00, 0xBF, 0xFD, 0x00, 0xC0, 0x87, 0xE1, 0x01,
0xE0, 0x03, 0xA0, 0x03, 0xE0, 0x00, 0x80, 0x07, 0x70, 0x00, 0x00, 0x0F,
0x78, 0x00, 0x00, 0x1E, 0xF8, 0x00, 0x00, 0x1F, 0x1C, 0x00, 0x00, 0x1C,
0x1C, 0x06, 0x60, 0x38, 0x1C, 0x1C, 0x38, 0x38, 0x0C, 0x30, 0x0C, 0x38,
0x1C, 0xE0, 0x07, 0x38, 0x0C, 0x80, 0x03, 0x38, 0x1C, 0x00, 0x00, 0x38,
0x1C, 0x00, 0x00, 0x38, 0x1C, 0x00, 0x00, 0x18, 0x98, 0x00, 0x00, 0x1D,
0xF8, 0x00, 0x00, 0x1E, 0x38, 0x00, 0x00, 0x0E, 0x70, 0x00, 0x00, 0x0E,
0xE0, 0x00, 0x00, 0x07, 0xC0, 0x07, 0xE0, 0x03, 0xC0, 0x87, 0xE0, 0x03,
0x00, 0xBF, 0xFF, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0xF8, 0x0F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const unsigned char music32[] = {
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x3f, 0x00, 0x00, 0xff, 0x7f,
0x00, 0xf8, 0xff, 0x3f, 0x00, 0xf8, 0xff, 0x7f, 0x00, 0xf8, 0xff, 0x3f,
0x00, 0xf8, 0xff, 0x7f, 0x00, 0xf8, 0x3f, 0x30, 0x00, 0xb8, 0x00, 0x60,
0x00, 0x38, 0x00, 0x30, 0x00, 0x18, 0x00, 0x30, 0x00, 0x18, 0x00, 0x30,
0x00, 0x38, 0x00, 0x30, 0x00, 0x18, 0x00, 0x30, 0x00, 0x38, 0x00, 0x30,
0x00, 0x18, 0x00, 0x30, 0x00, 0x38, 0x00, 0x30, 0x00, 0x18, 0x00, 0x30,
0x00, 0x38, 0x00, 0x30, 0x00, 0x18, 0x00, 0x31, 0x00, 0x38, 0xc0, 0x7f,
0x00, 0x18, 0xf0, 0x3f, 0xc0, 0x3b, 0xf8, 0x3f, 0xf0, 0x1f, 0xf8, 0x7f,
0xf8, 0x3f, 0xfc, 0x3f, 0xfc, 0x1f, 0xf8, 0x3f, 0xfc, 0x1f, 0xfc, 0x1f,
0xfc, 0x1f, 0xf8, 0x0f, 0xfe, 0x1f, 0xf0, 0x07, 0xfc, 0x0f, 0x00, 0x00,
0xf8, 0x03, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00,
};
PROGMEM const unsigned char tools32[] = {
0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x07, 0x00, 0xE0, 0x07, 0x3E, 0x00,
0xE0, 0x0F, 0xF0, 0x00, 0xC2, 0x0F, 0xE0, 0x01, 0x0E, 0x1F, 0xE0, 0x03,
0x0E, 0x0F, 0xE0, 0x07, 0x3E, 0x1F, 0xE0, 0x07, 0xFE, 0x1F, 0xE0, 0x0F,
0xFC, 0x1F, 0xF0, 0x1F, 0xFC, 0x3F, 0xF8, 0x1F, 0xF8, 0xFF, 0x3C, 0x7C,
0x60, 0x7F, 0x1E, 0x78, 0x00, 0x3C, 0x0F, 0x38, 0x00, 0xB8, 0x07, 0x08,
0x00, 0xC0, 0x03, 0x00, 0x00, 0xE0, 0x09, 0x00, 0x00, 0xE0, 0x1C, 0x00,
0x00, 0x5C, 0x3E, 0x00, 0x00, 0x3E, 0xFF, 0x03, 0x00, 0x3F, 0xFE, 0x1F,
0x80, 0x1F, 0xFC, 0x1F, 0xC0, 0x0F, 0xFC, 0x3F, 0xE0, 0x07, 0xF0, 0x7F,
0xF0, 0x03, 0xF0, 0x7C, 0xFC, 0x03, 0xF8, 0x70, 0xFE, 0x00, 0xF8, 0x71,
0xFE, 0x00, 0xF0, 0x21, 0x7C, 0x00, 0xE0, 0x03, 0x3C, 0x00, 0xE0, 0x0F,
0x10, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const unsigned char menu30[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0xFC, 0x07,
0xFC, 0x1F, 0xFF, 0x0F, 0x0C, 0x38, 0x03, 0x0C, 0x04, 0x30, 0x03, 0x0C,
0x0E, 0x30, 0x03, 0x0C, 0x0C, 0x30, 0x03, 0x18, 0x0E, 0x30, 0x03, 0x0C,
0x04, 0x30, 0x03, 0x0C, 0x0C, 0x30, 0x03, 0x1C, 0x0C, 0x30, 0x03, 0x0C,
0xFC, 0x1F, 0xFE, 0x0F, 0xFC, 0x1F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x07, 0xBC, 0x01, 0xFC, 0x1F, 0xFE, 0x0F,
0x8C, 0x38, 0x07, 0x0E, 0x0C, 0x30, 0x03, 0x0C, 0x04, 0x30, 0x03, 0x08,
0x0E, 0x30, 0x03, 0x0C, 0x0C, 0x30, 0x03, 0x1C, 0x04, 0x10, 0x03, 0x0C,
0x0E, 0x30, 0x03, 0x08, 0x04, 0x30, 0x03, 0x0C, 0x4C, 0x39, 0x47, 0x0E,
0xFC, 0x1F, 0xFE, 0x0F, 0x70, 0x07, 0x78, 0x01, 0x00, 0x00, 0x00, 0x00,
};
Le code source a été testé sur la T-Watch Touch 2019
Ainsi que sur la T-Watch 2020
Démonstration
Pour conclure cet article, voici une petite vidéo de démonstration. Même si la création des menus fait un peu bricolage avec TFT_eSPI, le rendu est efficace et rapide à faire.
Mises à jour
25/11/2020 Publication de l’article
- T-Watch. Code simplifié pour extinction et réveil avec BMA423 ou AXP202 de l’ESP32
- T-Watch. Mise en veille et réveil de l’ESP32 avec accéléromètre BMA423 ou AXP202
- T-Watch. Menu, pages, navigation entre écrans avec TFT_eSPI
- T-Watch. Dessiner des fractales de Mandelbrot ou Julia avec un ESP32
- T-Watch. Afficher des images XBM (TFT_eSPI) et C++ (LVGL). Compatible ESP32, Arduino
Bonjour,
J’ai parcouru plusieurs de vos très bons tutos sans trouver le moyen de déactiver un bouton sur un afficheur TFT tactile pour l’inerter puis le rendre actif par la suite ! La bibliothèque utilisée est Adafruit_ILI9341esp.h. De part cette bibliothèque je suis hors sujet, je n’ai pas trouver de tuto pour y commenter !
La question: quels seraient les syntaxes pour de cette librairie pour arriver à mes fins ?
Merci d’avance pour vos conseils.
L’Arsène.