#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <DHT.h>
#define btn_cancel 15
#define btn_ok 14
#define btn_up 32
#define btn_down 2
#define WIRE Wire
#define NOTE_E5 659
#define NOTE_D5 587
#define NOTE_G5 784
#define NOTE_A5 880
#define NOTE_C5 523
TaskHandle_t Task1;
const byte PROGMEM clockFrames[][288] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,127,0,3,255,0,0,255,192,7,14,0,0,112,224,14,28,0,0,56,112,28,56,31,248,28,56,24,112,255,255,14,24,48,227,224,7,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,0,0,28,236,62,112,0,0,14,124,60,224,0,0,7,60,57,192,0,0,3,156,17,130,0,0,1,136,3,7,0,0,0,192,3,3,128,0,0,192,6,1,192,0,0,96,6,0,224,0,0,96,6,0,112,0,0,96,12,0,56,0,0,48,12,0,28,0,0,48,12,0,14,0,0,48,12,0,7,0,0,48,12,1,255,128,0,48,12,1,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,112,0,0,14,0,0,120,0,0,30,0,0,254,0,0,127,0,1,199,0,0,227,128,3,131,224,7,193,192,7,0,255,255,0,224,6,0,31,248,0,96,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,127,0,3,255,0,0,255,192,7,14,0,0,112,224,14,28,0,0,56,112,28,56,31,248,28,56,24,112,255,255,14,24,48,227,224,7,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,0,0,28,236,62,112,0,0,14,124,60,224,0,0,7,60,57,192,0,0,3,156,17,131,128,0,1,136,3,1,128,0,0,192,3,0,192,0,0,192,6,0,96,0,0,96,6,0,112,0,0,96,6,0,56,0,0,96,12,0,28,0,0,48,12,0,12,0,0,48,12,0,6,0,0,48,12,0,3,0,0,48,12,1,255,128,0,48,12,1,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,112,0,0,14,0,0,120,0,0,30,0,0,254,0,0,127,0,1,199,0,0,227,128,3,131,224,7,193,192,7,0,255,255,0,224,6,0,31,248,0,96,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,127,0,3,255,0,0,255,192,7,14,0,0,112,224,14,28,0,0,56,112,28,56,31,248,28,56,24,112,255,255,14,24,48,227,224,7,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,0,0,28,236,62,112,0,0,14,124,60,224,0,0,7,60,57,192,192,0,3,156,17,128,192,0,1,136,3,0,96,0,0,192,3,0,112,0,0,192,6,0,48,0,0,96,6,0,24,0,0,96,6,0,28,0,0,96,12,0,12,0,0,48,12,0,6,0,0,48,12,0,7,0,0,48,12,0,3,0,0,48,12,1,255,128,0,48,12,1,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,112,0,0,14,0,0,120,0,0,30,0,0,254,0,0,127,0,1,199,0,0,227,128,3,131,224,7,193,192,7,0,255,255,0,224,6,0,31,248,0,96,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,127,0,3,255,0,0,255,192,7,14,0,0,112,224,14,28,0,0,56,112,28,56,31,248,28,56,24,112,255,255,14,24,48,227,224,7,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,0,0,28,236,62,112,0,0,14,124,60,224,96,0,7,60,57,192,96,0,3,156,17,128,112,0,1,136,3,0,48,0,0,192,3,0,24,0,0,192,6,0,24,0,0,96,6,0,12,0,0,96,6,0,12,0,0,96,12,0,6,0,0,48,12,0,6,0,0,48,12,0,3,0,0,48,12,0,3,0,0,48,12,1,255,128,0,48,12,1,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,112,0,0,14,0,0,120,0,0,30,0,0,254,0,0,127,0,1,199,0,0,227,128,3,131,224,7,193,192,7,0,255,255,0,224,6,0,31,248,0,96,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,127,0,3,255,0,0,255,192,7,14,0,0,112,224,14,28,0,0,56,112,28,56,31,248,28,56,24,112,255,255,14,24,48,227,224,7,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,0,0,28,236,62,112,0,0,14,124,60,224,48,0,7,60,57,192,48,0,3,156,17,128,24,0,1,136,3,0,24,0,0,192,3,0,12,0,0,192,6,0,12,0,0,96,6,0,12,0,0,96,6,0,6,0,0,96,12,0,6,0,0,48,12,0,3,0,0,48,12,0,3,0,0,48,12,0,3,0,0,48,12,1,255,128,0,48,12,1,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,112,0,0,14,0,0,120,0,0,30,0,0,254,0,0,127,0,1,199,0,0,227,128,3,131,224,7,193,192,7,0,255,255,0,224,6,0,31,248,0,96,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,127,0,3,255,0,0,255,192,7,14,0,0,112,224,14,28,0,0,56,112,28,56,31,248,28,56,24,112,255,255,14,24,48,227,224,7,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,0,0,28,236,62,112,24,0,14,124,60,224,24,0,7,60,57,192,12,0,3,156,17,128,12,0,1,136,3,0,12,0,0,192,3,0,6,0,0,192,6,0,6,0,0,96,6,0,6,0,0,96,6,0,6,0,0,96,12,0,3,0,0,48,12,0,3,0,0,48,12,0,3,0,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,1,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,112,0,0,14,0,0,120,0,0,30,0,0,254,0,0,127,0,1,199,0,0,227,128,3,131,224,7,193,192,7,0,255,255,0,224,6,0,31,248,0,96,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,0,0,0,0,3,255,0,0,248,0,3,195,192,3,252,0,0,224,192,15,24,0,0,112,96,28,48,31,248,56,48,56,96,255,255,28,48,48,227,224,7,207,24,97,199,0,0,227,152,99,158,0,0,121,216,99,56,0,0,28,248,102,112,12,0,14,112,108,224,12,0,7,48,124,192,6,0,3,0,121,128,6,0,1,128,115,128,6,0,1,192,35,0,6,0,0,192,6,0,6,0,0,96,6,0,3,0,0,96,6,0,3,0,0,96,12,0,3,0,0,48,12,0,3,0,0,48,12,0,1,0,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,1,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,3,0,0,0,0,192,3,0,0,0,0,192,1,128,0,0,1,128,1,192,0,0,3,128,0,224,0,0,7,0,0,112,0,0,14,0,0,120,0,0,30,0,0,252,0,0,63,0,1,207,0,0,243,128,3,131,224,7,193,192,7,0,255,255,0,224,6,0,31,248,0,96,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,0,0,0,0,7,254,0,0,0,0,7,7,128,0,0,0,3,129,192,7,248,0,0,224,192,15,240,0,0,112,96,28,112,63,252,56,96,56,225,255,255,142,48,112,195,192,3,199,48,97,143,0,0,243,176,195,156,0,0,56,240,199,56,2,0,28,112,198,96,6,0,6,48,204,224,2,0,7,0,221,192,3,0,3,128,249,128,3,0,1,128,115,0,3,0,0,192,99,0,3,0,0,192,38,0,3,0,0,96,6,0,3,0,0,96,6,0,3,0,0,96,12,0,1,0,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,238,0,0,119,0,1,199,128,1,227,128,3,129,240,15,129,192,7,0,127,254,0,224,6,0,15,240,0,96},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,254,0,0,127,128,3,255,0,0,255,192,7,14,0,0,112,224,12,28,0,0,56,48,24,56,63,252,28,24,24,113,255,255,142,24,48,227,192,3,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,1,0,28,236,62,96,3,0,6,124,60,224,3,0,7,60,57,192,3,0,3,156,17,128,3,0,1,136,3,0,3,0,0,192,3,0,1,0,0,192,6,0,1,128,0,96,6,0,1,128,0,96,6,0,1,128,0,96,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,238,0,0,119,0,1,199,128,1,227,128,3,129,240,15,129,192,7,0,127,254,0,224,6,0,15,240,0,96,0,0,0,0,0,0},
{0,31,0,0,0,0,0,127,224,0,0,0,1,224,224,0,0,0,3,129,192,0,0,0,7,7,0,0,31,224,6,14,0,0,15,240,6,28,63,252,14,56,12,113,254,127,135,28,12,227,192,3,195,14,13,207,0,0,241,134,15,28,0,0,56,195,14,56,1,0,28,227,12,96,1,128,6,99,0,224,1,128,7,51,1,192,1,128,3,155,1,128,1,128,1,159,3,0,1,128,0,206,3,0,1,128,0,198,6,0,1,128,0,96,6,0,1,128,0,96,6,0,1,128,0,96,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,206,0,0,115,0,1,135,128,1,225,128,3,1,240,15,128,192,6,0,127,254,0,96,4,0,7,224,0,32,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,254,0,0,127,128,3,255,0,0,255,192,7,14,0,0,112,224,12,28,0,0,56,48,24,56,63,252,28,24,24,113,255,255,142,24,48,227,192,3,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,1,128,28,236,62,96,1,128,6,124,60,224,1,128,7,60,57,192,1,128,3,156,17,128,1,128,1,136,3,0,1,128,0,192,3,0,1,128,0,192,6,0,1,128,0,96,6,0,1,128,0,96,6,0,1,128,0,96,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,238,0,0,119,0,1,199,128,1,227,128,3,129,240,15,129,192,7,0,127,254,0,224,6,0,15,240,0,96,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,0,0,0,0,7,254,0,0,0,0,7,7,128,0,0,0,3,129,192,7,248,0,0,224,192,15,240,0,0,112,96,28,112,63,252,56,96,56,225,255,255,142,48,112,195,192,3,199,48,97,143,0,0,243,176,195,156,0,0,56,240,199,56,1,128,28,112,198,96,1,128,6,48,204,224,1,128,7,0,221,192,1,128,3,128,249,128,1,128,1,128,115,0,1,128,0,192,99,0,1,128,0,192,38,0,1,128,0,96,6,0,1,128,0,96,6,0,1,128,0,96,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,238,0,0,119,0,1,199,128,1,227,128,3,129,240,15,129,192,7,0,127,254,0,224,6,0,15,240,0,96},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,254,0,0,127,128,3,255,0,0,255,192,7,14,0,0,112,224,12,28,0,0,56,48,24,56,63,252,28,24,24,113,255,255,142,24,48,227,192,3,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,1,128,28,236,62,96,1,128,6,124,60,224,1,128,7,60,57,192,1,128,3,156,17,128,1,128,1,136,3,0,1,128,0,192,3,0,1,128,0,192,6,0,1,128,0,96,6,0,1,128,0,96,6,0,1,128,0,96,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,238,0,0,119,0,1,199,128,1,227,128,3,129,240,15,129,192,7,0,127,254,0,224,6,0,15,240,0,96,0,0,0,0,0,0},
{0,31,0,0,0,0,0,127,224,0,0,0,1,224,224,0,0,0,3,129,192,0,0,0,7,7,0,0,31,224,6,14,0,0,15,240,6,28,63,252,14,56,12,113,254,127,135,28,12,227,192,3,195,14,13,207,0,0,241,134,15,28,0,0,56,195,14,56,1,128,28,227,12,96,1,128,6,99,0,224,1,128,7,51,1,192,1,128,3,155,1,128,1,128,1,159,3,0,1,128,0,206,3,0,1,128,0,198,6,0,1,128,0,96,6,0,1,128,0,96,6,0,1,128,0,96,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,206,0,0,115,0,1,135,128,1,225,128,3,1,240,15,128,192,6,0,127,254,0,96,4,0,7,224,0,32,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,254,0,0,127,128,3,255,0,0,255,192,7,14,0,0,112,224,12,28,0,0,56,48,24,56,63,252,28,24,24,113,255,255,142,24,48,227,192,3,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,1,128,28,236,62,96,1,128,6,124,60,224,1,128,7,60,57,192,1,128,3,156,17,128,1,128,1,136,3,0,1,128,0,192,3,0,1,128,0,192,6,0,1,128,0,96,6,0,1,128,0,96,6,0,1,128,0,96,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,238,0,0,119,0,1,199,128,1,227,128,3,129,240,15,129,192,7,0,127,254,0,224,6,0,15,240,0,96,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,0,0,0,0,7,254,0,0,0,0,7,7,128,0,0,0,3,129,192,7,248,0,0,224,192,15,240,0,0,112,96,28,112,63,252,56,96,56,225,255,255,142,48,112,195,192,3,199,48,97,143,0,0,243,176,195,156,0,0,56,240,199,56,1,128,28,112,198,96,1,128,6,48,204,224,1,128,7,0,221,192,1,128,3,128,249,128,1,128,1,128,115,0,1,128,0,192,99,0,1,128,0,192,38,0,1,128,0,96,6,0,1,128,0,96,6,0,1,128,0,96,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,238,0,0,119,0,1,199,128,1,227,128,3,129,240,15,129,192,7,0,127,254,0,224,6,0,15,240,0,96},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,254,0,0,127,128,3,255,0,0,255,192,7,14,0,0,112,224,12,28,0,0,56,48,24,56,63,252,28,24,24,113,255,255,142,24,48,227,192,3,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,1,128,28,236,62,96,1,128,6,124,60,224,1,128,7,60,57,192,1,128,3,156,17,128,1,128,1,136,3,0,1,128,0,192,3,0,1,128,0,192,6,0,1,128,0,96,6,0,1,128,0,96,6,0,1,128,0,96,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,238,0,0,119,0,1,199,128,1,227,128,3,129,240,15,129,192,7,0,127,254,0,224,6,0,15,240,0,96,0,0,0,0,0,0},
{0,31,0,0,0,0,0,127,224,0,0,0,1,224,224,0,0,0,3,129,192,0,0,0,7,7,0,0,31,224,6,14,0,0,15,240,6,28,63,252,14,56,12,113,254,127,135,28,12,227,192,3,195,14,13,207,0,0,241,134,15,28,0,0,56,195,14,56,1,128,28,227,12,96,1,128,6,99,0,224,1,128,7,51,1,192,1,128,3,155,1,128,1,128,1,159,3,0,1,128,0,206,3,0,1,128,0,198,6,0,1,128,0,96,6,0,1,128,0,96,6,0,1,128,0,96,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,206,0,0,115,0,1,135,128,1,225,128,3,1,240,15,128,192,6,0,127,254,0,96,4,0,7,224,0,32,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,254,0,0,127,128,3,255,0,0,255,192,7,14,0,0,112,224,12,28,0,0,56,48,24,56,63,252,28,24,24,113,255,255,142,24,48,227,192,3,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,1,128,28,236,62,96,1,128,6,124,60,224,1,128,7,60,57,192,1,128,3,156,17,128,1,128,1,136,3,0,1,128,0,192,3,0,1,128,0,192,6,0,1,128,0,96,6,0,1,128,0,96,6,0,1,128,0,96,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,238,0,0,119,0,1,199,128,1,227,128,3,129,240,15,129,192,7,0,127,254,0,224,6,0,15,240,0,96,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,0,0,0,0,7,254,0,0,0,0,7,7,128,0,0,0,3,129,192,7,248,0,0,224,192,15,240,0,0,112,96,28,112,63,252,56,96,56,225,255,255,142,48,112,195,192,3,199,48,97,143,0,0,243,176,195,156,0,0,56,240,199,56,0,64,28,112,198,96,0,96,6,48,204,224,0,192,7,0,221,192,0,192,3,128,249,128,0,192,1,128,115,0,0,192,0,192,99,0,0,192,0,192,38,0,0,192,0,96,6,0,0,192,0,96,6,0,0,192,0,96,12,0,0,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,0,1,128,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,238,0,0,119,0,1,199,128,1,227,128,3,129,240,15,129,192,7,0,127,254,0,224,6,0,15,240,0,96},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,254,0,0,127,128,3,255,0,0,255,192,7,14,0,0,112,224,12,28,0,0,56,48,24,56,63,252,28,24,24,113,255,255,142,24,48,227,192,3,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,0,0,28,236,62,96,0,4,6,124,60,224,0,12,7,60,57,192,0,12,3,156,17,128,0,12,1,136,3,0,0,24,0,192,3,0,0,24,0,192,6,0,0,48,0,96,6,0,0,48,0,96,6,0,0,96,0,96,12,0,0,96,0,48,12,0,0,192,0,48,12,0,0,192,0,48,12,0,1,192,0,48,12,1,255,128,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,238,0,0,119,0,1,199,128,1,227,128,3,129,240,15,129,192,7,0,127,254,0,224,6,0,15,240,0,96,0,0,0,0,0,0},
{0,31,0,0,0,0,0,127,224,0,0,0,1,224,224,0,0,0,3,129,192,0,0,0,7,7,0,0,31,224,6,14,0,0,15,240,6,28,63,252,14,56,12,113,254,127,135,28,12,227,192,3,195,14,13,207,0,0,241,134,15,28,0,0,56,195,14,56,0,0,28,227,12,96,0,0,6,99,0,224,0,0,7,51,1,192,0,0,3,155,1,128,0,0,1,159,3,0,0,0,96,206,3,0,0,0,224,198,6,0,0,1,192,96,6,0,0,3,128,96,6,0,0,6,0,96,12,0,0,28,0,48,12,0,0,56,0,48,12,0,0,112,0,48,12,0,0,224,0,48,12,1,255,192,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,206,0,0,115,0,1,135,128,1,225,128,3,1,240,15,128,192,6,0,127,254,0,96,4,0,7,224,0,32,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,127,128,0,0,0,1,255,192,0,0,0,3,131,128,0,63,128,7,7,0,0,63,224,14,30,0,0,28,112,12,56,63,252,14,56,12,113,254,127,134,28,24,227,192,3,195,14,25,207,0,0,241,134,31,156,0,0,57,198,30,56,0,0,28,230,12,96,0,0,6,118,8,192,0,0,3,54,1,192,0,0,3,158,1,128,0,0,1,142,3,0,0,0,0,204,3,0,0,0,0,196,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,12,0,0,0,0,48,12,0,0,0,12,48,12,0,0,3,252,48,12,0,0,255,240,48,12,1,255,252,0,48,12,0,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,14,0,0,0,0,112,6,0,0,0,0,96,6,0,0,0,0,96,7,0,0,0,0,224,3,0,0,0,0,192,1,128,0,0,1,128,1,128,0,0,1,128,0,192,0,0,3,0,0,96,0,0,6,0,0,112,0,0,14,0,0,120,0,0,30,0,0,206,0,0,115,0,1,135,128,1,225,128,3,1,240,15,128,192,6,0,127,254,0,96,4,0,7,224,0,32,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,127,0,3,255,0,0,255,192,7,14,0,0,112,224,14,28,0,0,56,112,28,56,31,248,28,56,24,112,255,255,14,24,48,227,224,7,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,0,0,28,236,62,112,0,0,14,124,60,224,0,0,7,60,57,192,0,0,3,156,17,128,0,0,1,136,3,0,0,0,0,192,3,0,0,0,0,192,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,1,255,128,0,48,12,1,255,240,0,48,12,0,0,124,0,48,12,0,0,31,0,48,12,0,0,3,192,48,12,0,0,0,240,48,6,0,0,0,56,96,6,0,0,0,0,96,6,0,0,0,0,96,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,112,0,0,14,0,0,120,0,0,30,0,0,254,0,0,127,0,1,199,0,0,227,128,3,131,224,7,193,192,7,0,255,255,0,224,6,0,31,248,0,96,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,127,0,3,255,0,0,255,192,7,14,0,0,112,224,14,28,0,0,56,112,28,56,31,248,28,56,24,112,255,255,14,24,48,227,224,7,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,0,0,28,236,62,112,0,0,14,124,60,224,0,0,7,60,57,192,0,0,3,156,17,128,0,0,1,136,3,0,0,0,0,192,3,0,0,0,0,192,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,1,255,128,0,48,12,1,255,128,0,48,12,0,0,192,0,48,12,0,0,192,0,48,12,0,0,96,0,48,12,0,0,96,0,48,6,0,0,48,0,96,6,0,0,56,0,96,6,0,0,24,0,96,3,0,0,28,0,192,3,128,0,12,1,192,1,128,0,14,1,128,0,192,0,6,3,0,0,224,0,6,7,0,0,112,0,0,14,0,0,120,0,0,30,0,0,254,0,0,127,0,1,199,0,0,227,128,3,131,224,7,193,192,7,0,255,255,0,224,6,0,31,248,0,96,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,127,0,3,255,0,0,255,192,7,14,0,0,112,224,14,28,0,0,56,112,28,56,31,248,28,56,24,112,255,255,14,24,48,227,224,7,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,0,0,28,236,62,112,0,0,14,124,60,224,0,0,7,60,57,192,0,0,3,156,17,128,0,0,1,136,3,0,0,0,0,192,3,0,0,0,0,192,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,1,255,128,0,48,12,1,255,128,0,48,12,0,1,128,0,48,12,0,3,0,0,48,12,0,3,0,0,48,12,0,3,0,0,48,6,0,3,0,0,96,6,0,6,0,0,96,6,0,6,0,0,96,3,0,6,0,0,192,3,128,6,0,1,192,1,128,6,0,1,128,0,192,12,0,3,0,0,224,12,0,7,0,0,112,12,0,14,0,0,120,0,0,30,0,0,254,0,0,127,0,1,199,0,0,227,128,3,131,224,7,193,192,7,0,255,255,0,224,6,0,31,248,0,96,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,127,0,3,255,0,0,255,192,7,14,0,0,112,224,14,28,0,0,56,112,28,56,31,248,28,56,24,112,255,255,14,24,48,227,224,7,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,0,0,28,236,62,112,0,0,14,124,60,224,0,0,7,60,57,192,0,0,3,156,17,128,0,0,1,136,3,0,0,0,0,192,3,0,0,0,0,192,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,1,255,128,0,48,12,1,255,128,0,48,12,0,14,0,0,48,12,0,28,0,0,48,12,0,120,0,0,48,12,0,224,0,0,48,6,3,192,0,0,96,6,7,0,0,0,96,6,14,0,0,0,96,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,112,0,0,14,0,0,120,0,0,30,0,0,254,0,0,127,0,1,199,0,0,227,128,3,131,224,7,193,192,7,0,255,255,0,224,6,0,31,248,0,96,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,127,0,3,255,0,0,255,192,7,14,0,0,112,224,14,28,0,0,56,112,28,56,31,248,28,56,24,112,255,255,14,24,48,227,224,7,199,12,49,207,0,0,243,140,51,156,0,0,57,204,55,56,0,0,28,236,62,112,0,0,14,124,60,224,0,0,7,60,57,192,0,0,3,156,17,128,0,0,1,136,3,0,0,0,0,192,3,0,0,0,0,192,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,12,0,0,0,0,48,12,0,0,0,0,48,12,48,0,0,0,48,12,63,248,0,0,48,12,7,255,128,0,48,12,1,255,128,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,12,0,0,0,0,48,6,0,0,0,0,96,6,0,0,0,0,96,6,0,0,0,0,96,3,0,0,0,0,192,3,128,0,0,1,192,1,128,0,0,1,128,0,192,0,0,3,0,0,224,0,0,7,0,0,112,0,0,14,0,0,120,0,0,30,0,0,254,0,0,127,0,1,199,0,0,227,128,3,131,224,7,193,192,7,0,255,255,0,224,6,0,31,248,0,96,0,0,0,0,0,0,0,0,0,0,0,0}
};
const byte PROGMEM getPillsFrames[][128] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,255,240,27,3,129,248,49,6,0,8,99,12,0,8,198,48,3,249,140,96,3,131,24,192,1,254,48,64,0,0,96,96,0,0,192,48,0,1,128,24,126,3,0,9,255,254,0,7,0,0,0,6,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,14,3,7,248,17,6,0,12,49,28,0,12,99,48,3,248,198,96,3,225,140,192,1,243,24,64,0,30,48,32,0,0,96,48,0,0,192,24,112,1,128,13,255,255,0,7,0,30,0,6,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,128,0,1,8,64,0,1,0,64,0,1,0,64,0,0,0,128,0,0,128,128,0,0,67,0,0,0,54,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,240,14,3,129,248,17,6,0,8,33,28,0,8,66,48,3,248,134,96,3,129,12,192,1,254,24,64,0,12,48,96,0,0,96,48,0,0,192,24,124,1,128,13,255,255,0,7,0,0,0,6,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,128,0,1,24,64,0,2,0,32,0,2,0,32,0,2,0,32,0,1,0,64,0,1,128,192,0,0,193,128,0,0,99,0,0,0,54,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,255,248,31,3,128,8,49,6,0,24,99,12,0,240,198,16,7,193,140,96,3,7,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,13,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,1,193,192,0,3,54,96,0,4,28,16,0,12,8,24,0,8,0,8,0,8,0,8,0,12,0,16,0,4,0,16,0,2,0,32,0,3,0,96,0,1,128,192,0,0,193,128,0,0,54,0,0,0,28,0,0,0,0,0,0,0,0,0,0,7,240,14,0,252,24,27,3,128,24,49,6,0,112,195,12,3,193,134,24,6,3,12,48,3,254,24,64,1,224,48,192,0,0,96,96,0,0,128,48,0,3,0,24,127,254,0,12,192,0,0,7,0,0,0,2,0,0,0},
{0,1,193,192,0,7,247,240,0,12,28,24,0,8,8,8,0,24,0,12,0,16,0,4,0,24,0,12,0,24,0,8,0,8,0,24,0,4,0,16,0,6,0,48,0,3,0,96,0,1,128,192,0,0,227,128,0,0,54,0,0,0,28,0,0,0,224,0,0,15,240,14,0,248,16,27,3,128,48,49,6,0,224,195,12,3,129,134,24,6,15,12,48,3,252,24,192,1,128,96,192,0,0,192,96,0,1,128,48,0,127,0,24,127,240,0,12,192,0,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,3,231,224,0,12,28,16,0,8,24,8,0,8,0,8,0,24,0,12,0,24,0,8,0,8,0,8,0,12,0,24,0,4,0,16,0,2,0,32,0,1,0,64,0,0,193,128,0,0,99,0,0,0,62,0,0,0,28,0,0,0,0,0,0,3,240,14,0,255,248,27,3,128,24,113,6,0,48,195,12,1,225,134,24,7,131,12,48,3,254,24,64,1,240,48,192,0,0,96,96,0,0,128,48,0,3,0,24,127,254,0,12,192,0,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,3,227,224,0,6,62,48,0,12,24,24,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,12,0,24,0,6,0,48,0,2,0,96,0,1,128,192,0,0,193,128,0,0,99,0,0,0,62,0,0,0,24,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,3,227,224,0,6,62,48,0,12,24,24,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,12,0,24,0,6,0,48,0,2,0,96,0,1,128,192,0,0,193,128,0,0,99,0,0,0,62,0,0,0,24,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,3,227,224,0,6,62,48,0,12,24,24,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,12,0,24,0,6,0,48,0,2,0,96,0,1,128,192,0,0,193,128,0,0,99,0,0,0,62,0,0,0,24,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,3,227,224,0,6,62,48,0,12,24,24,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,12,0,24,0,6,0,48,0,2,0,96,0,1,128,192,0,0,193,128,0,0,99,0,0,0,62,0,0,0,24,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,3,227,224,0,6,62,48,0,12,24,24,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,12,0,24,0,6,0,48,0,2,0,96,0,1,128,192,0,0,193,128,0,0,99,0,0,0,62,0,0,0,24,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,3,227,224,0,6,62,48,0,12,24,24,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,12,0,24,0,6,0,48,0,2,0,96,0,1,128,192,0,0,193,128,0,0,99,0,0,0,62,0,0,0,24,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,3,227,224,0,6,62,48,0,12,24,24,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,12,0,24,0,6,0,48,0,2,0,96,0,1,128,192,0,0,193,128,0,0,99,0,0,0,62,0,0,0,24,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,3,231,224,0,12,28,16,0,8,24,8,0,8,0,8,0,24,0,12,0,24,0,8,0,8,0,8,0,12,0,24,0,4,0,16,0,2,0,32,0,1,0,64,0,0,193,128,0,0,99,0,0,0,62,0,0,0,28,0,0,0,0,0,0,3,240,14,0,255,248,27,3,128,24,113,6,0,48,195,12,1,225,134,24,7,131,12,48,3,254,24,64,1,240,48,192,0,0,96,96,0,0,128,48,0,3,0,24,127,254,0,12,192,0,0,7,0,0,0,2,0,0,0},
{0,1,193,192,0,7,247,240,0,12,28,24,0,8,8,8,0,24,0,12,0,16,0,4,0,24,0,12,0,24,0,8,0,8,0,24,0,4,0,16,0,6,0,48,0,3,0,96,0,1,128,192,0,0,227,128,0,0,54,0,0,0,28,0,0,0,224,0,0,15,240,14,0,248,16,27,3,128,48,49,6,0,224,195,12,3,129,134,24,6,15,12,48,3,252,24,192,1,128,96,192,0,0,192,96,0,1,128,48,0,127,0,24,127,240,0,12,192,0,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,1,193,192,0,3,54,96,0,4,28,16,0,12,8,24,0,8,0,8,0,8,0,8,0,12,0,16,0,4,0,16,0,2,0,32,0,3,0,96,0,1,128,192,0,0,193,128,0,0,54,0,0,0,28,0,0,0,0,0,0,0,0,0,0,7,240,14,0,252,24,27,3,128,24,49,6,0,112,195,12,3,193,134,24,6,3,12,48,3,254,24,64,1,224,48,192,0,0,96,96,0,0,128,48,0,3,0,24,127,254,0,12,192,0,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,128,0,1,24,64,0,2,0,32,0,2,0,32,0,2,0,32,0,1,0,64,0,1,128,192,0,0,193,128,0,0,99,0,0,0,54,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,255,248,31,3,128,8,49,6,0,24,99,12,0,240,198,16,7,193,140,96,3,7,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,13,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,240,14,3,129,248,17,6,0,8,33,28,0,8,66,48,3,248,134,96,3,129,12,192,1,254,24,64,0,12,48,96,0,0,96,48,0,0,192,24,124,1,128,13,255,255,0,7,0,0,0,6,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,14,3,7,248,17,6,0,12,49,28,0,12,99,48,3,248,198,96,3,225,140,192,1,243,24,64,0,30,48,32,0,0,96,48,0,0,192,24,112,1,128,13,255,255,0,7,0,30,0,6,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,255,240,27,3,129,248,49,6,0,8,99,12,0,8,198,48,3,249,140,96,3,131,24,192,1,254,48,64,0,0,96,96,0,0,192,48,0,1,128,24,126,3,0,9,255,254,0,7,0,0,0,6,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,255,240,19,3,128,24,33,6,0,8,66,12,0,24,134,16,3,241,12,96,3,255,24,192,1,254,48,192,0,0,96,96,0,0,192,48,0,1,128,24,127,255,0,12,255,248,0,7,0,0,0,2,0,0,0}
};
int frame = 0;
float time_offset = 14;
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &WIRE);
#define NTP_SERVER "pool.ntp.org"
#define UTC_OFFSET 3600*time_offset
#define UTC_OFFSET_DST 3600*0
#define LED 27
#define LED_pin 13
hw_timer_t *My_timer = NULL;
DHT dht(27, DHT22);
float temperature ;
float humidity;
char date_string[100];
char time_string[100];
char hrs[3];
char mint[3];
char sec[3];
char alarms[2][100];
String timeZoneMsg = "Please Set your time zone.";
bool alarm_ena =false;
int n_alarm = 2;
int alarm_hrs[] = {0,0};
int alarm_min[] = {0,0};
bool ena_alarms[]={true,true};
bool alarm_actived = false;
bool warning_alarm_actived = false;
bool doDeactivateAlarm = false;
bool alarm_triggered[] = {false,false};
float offset=0.0;
bool flag_set_offset = true;
bool flag_set_alarm = true;
int menu_index =0;
float setTimeHrs = 0.0;
float setTimeMin =0.0;
int lastMillis = 0;
void warningAlarm() {
int frequency = 500;
int duration = 300;
tone(26, frequency, duration);
delay(duration + 30); // Add a delay to distinguish between tones
noTone(26);
delay(300);
}
void timeToMediAlarm() {
int melody[] = {
NOTE_E5, NOTE_E5, NOTE_D5, NOTE_E5, NOTE_G5, NOTE_G5, NOTE_A5, NOTE_G5,
NOTE_E5, NOTE_D5, NOTE_E5, NOTE_D5, NOTE_C5
};
int duration[] = {
8, 8, 8, 8, 8, 8, 4, 8,
8, 8, 8, 8, 4
};
for (int i = 0; i < sizeof(melody) / sizeof(melody[0]); i++) {
tone(26, melody[i], 1000 / duration[i]);
delay(1000 / duration[i] + 30);
noTone(26);
}
delay(500);
}
void printGetMedi(){
for(int i=0;i<28*1;i++){
display.clearDisplay();
display.drawBitmap(40, 8, clockFrames[frame], 48, 48, 1);
display.display();
frame = (frame + 1) % (sizeof(clockFrames) / sizeof(clockFrames[0]));
delay(42);
}
display.clearDisplay();
display.display();
delay(100);
for(int i=0;i<28*2;i++){
display.clearDisplay();
display.drawBitmap(45, 8, getPillsFrames[frame], 32, 32, 1);
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(10,50);
display.print("Take Your Medicine");
display.display();
frame = (frame + 1) % (sizeof(getPillsFrames) / sizeof(getPillsFrames[0]));
delay(42);
}
}
void setAlaramMenuComponent(String menuTitle,int x_align){
display.clearDisplay();
display.drawRect(0, 0.5, 128, 64,WHITE);
display.fillRect(0, 16, 128, 3,WHITE);
print_display(menuTitle,1.8,SSD1306_WHITE,false,false,x_align,3);
print_display(String(setTimeHrs).substring(2,4)+":"+String(setTimeMin).substring(2,4),2.0,SSD1306_WHITE,false,true,38,35);
}
void disAlaramMenuComponent(String menuTitle,int x_align){
display.clearDisplay();
display.drawRect(0, 0.5, 128, 64,WHITE);
display.fillRect(0, 16, 128, 3,WHITE);
print_display(menuTitle,1.8,SSD1306_WHITE,false,false,x_align,3);
print_display("Yes",1.9,SSD1306_WHITE,false,false,38,48);
print_display("No",1.9,SSD1306_WHITE,false,true,40,28);
}
void menu_alarm(String menuTitle,int x_align){
bool menu_flag = true;
int local_menu_index;
if(menu_index==2){
setTimeHrs = alarm_hrs[0]*0.01;
setTimeMin = alarm_min[0]*0.01;
}else if(menu_index == 3){
setTimeHrs = alarm_hrs[1]*0.01;
setTimeMin = alarm_min[1]*0.01;
}
while(menu_flag){
while(flag_set_alarm){
if(!digitalRead(btn_up) && setTimeHrs <0.23){
setTimeHrs=setTimeHrs+0.01;
setAlaramMenuComponent(menuTitle,x_align);
delay(200);
}else{
setAlaramMenuComponent(menuTitle,x_align);
}
if(!digitalRead(btn_down) && setTimeHrs>0){
setTimeHrs=setTimeHrs-0.01;
setAlaramMenuComponent(menuTitle,x_align);
delay(200);
}else{
setAlaramMenuComponent(menuTitle,x_align);
print_display("__",2.0,SSD1306_WHITE,false,true,38,38);
}
if(!digitalRead(btn_cancel)){
menu_index = 1;
break;
}
if(!digitalRead(btn_ok)){
break;
}
}
delay(100);
while(flag_set_alarm){
if(menu_index ==1){
break;
}
if(!digitalRead(btn_up) && setTimeMin <0.59){
setTimeMin=setTimeMin+0.01;
setAlaramMenuComponent(menuTitle,x_align);
delay(200);
}else{
setAlaramMenuComponent(menuTitle,x_align);
}
if(!digitalRead(btn_down) && setTimeMin>0){
setTimeMin=setTimeMin-0.01;
setAlaramMenuComponent(menuTitle,x_align);
delay(200);
}else{
setAlaramMenuComponent(menuTitle,x_align);
print_display("__",2.0,SSD1306_WHITE,false,true,74,38);
}
if(!digitalRead(btn_cancel)){
break;
}
if(!digitalRead(btn_ok)){
if(menu_index==2){
alarm_hrs[0] = String(setTimeHrs).substring(2,4).toInt();
alarm_min[0] = String(setTimeMin).substring(2,4).toInt();
}else if(menu_index == 3){
alarm_hrs[1] = String(setTimeHrs).substring(2,4).toInt();
alarm_min[1] = String(setTimeMin).substring(2,4).toInt();
}
break;
}
}
if(menu_index !=1)menu_index++;
if(menu_index>4)menu_index=0;
delay(500);
menu_flag = false;
}
setTimeHrs = 0.0;
setTimeMin = 0.0;
displayPreview();
}
void menu_dis_alarm(String menuTitle,int x_align){
bool menu_flag = true;
int local_menu_index;
bool ena_flag;
if(menu_index==4){
ena_flag = !ena_alarms[0];
}else if(menu_index==0){
ena_flag=!ena_alarms[1];
}
while(menu_flag){
while(flag_set_alarm){
if(!digitalRead(btn_up) && setTimeHrs <0.23){
setTimeHrs=setTimeHrs+0.01;
disAlaramMenuComponent(menuTitle,x_align);
delay(200);
}else{
disAlaramMenuComponent(menuTitle,x_align);
}
if(!digitalRead(btn_down) && setTimeHrs>0){
setTimeHrs=setTimeHrs-0.01;
disAlaramMenuComponent(menuTitle,x_align);
delay(200);
}else{
disAlaramMenuComponent(menuTitle,x_align);
if(ena_flag){
print_display("_",2.0,SSD1306_WHITE,false,true,38,28.1);
}else{
print_display("_",2.0,SSD1306_WHITE,false,true,40,48.1);
}
}
if(!digitalRead(btn_down)){
ena_flag = true;
}
if(!digitalRead(btn_up)){
ena_flag = false;
}
if(!digitalRead(btn_cancel)){
break;
}
if(!digitalRead(btn_ok)){
if(menu_index==4){ena_alarms[0]=!ena_flag;
}else if(menu_index==0)ena_alarms[1]=!ena_flag;
break;
}
}
menu_index++;
if(menu_index>4)menu_index=0;
delay(500);
menu_flag = false;
}
setTimeHrs = 0.0;
setTimeMin = 0.0;
displayPreview();
}
void Task1code( void * pvParameters ){
for(;;){
delay(100);
if(alarm_actived){
timeToMediAlarm();
}
if(warning_alarm_actived){
warningAlarm();
}
}
}
void IRAM_ATTR function_ISR() {
if(millis() - lastMillis > 1000){ // Software debouncing buton
ets_printf("ISR triggered\n");
if(alarm_actived){
alarm_actived = false;
doDeactivateAlarm = true;
}
}
lastMillis = millis();
}
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Address 0x3C for 128x32
display.clearDisplay();
pinMode(btn_cancel, INPUT_PULLUP);
pinMode(btn_ok, INPUT_PULLUP);
pinMode(btn_up, INPUT_PULLUP);
pinMode(btn_down, INPUT_PULLUP);
pinMode(btn_cancel, INPUT_PULLUP);
attachInterrupt(btn_cancel, function_ISR, RISING);
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
}
xTaskCreatePinnedToCore(
Task1code,
"Task1",
10000,
NULL,
1,
&Task1,
0);
}
void loop() {
setTimeZone();
if(!digitalRead(btn_ok)){
menu_index++;
if(menu_index>4)menu_index=0;
// Serial.println(menu_index);
delay(500);
}
checkTempHumidity();
if(doDeactivateAlarm&&((atoi(hrs)==alarm_hrs[0])&&(atoi(mint)==(alarm_min[0]+1)))){
doDeactivateAlarm = false;
}
if(doDeactivateAlarm&&((atoi(hrs)==alarm_hrs[1])&&(atoi(mint)==(alarm_min[1]+1)))){
doDeactivateAlarm = false;
}
// Serial.print("doDeactivateAlarm : ");
// Serial.println(doDeactivateAlarm);
displayPreview();
checkAlarmAndUpdate();
}
void displayPreview(){
if(!alarm_actived)
{
switch (menu_index) {
case 0:
menu_dis_alarm("Enable Alarm 2",20);
break;
case 1:
printLocalTimeDateWarring();
break;
case 2:
menu_alarm("Set Alarm 1",36);
break;
case 3:
menu_alarm("Set Alarm 2",36);
break;
case 4:
menu_dis_alarm("Enable Alarm 1",20);
break;
}
}else if(alarm_actived){
printGetMedi();
}
}
void checkTempHumidity(){
temperature = dht.readTemperature();
humidity = dht.readHumidity();
if(!((temperature>=26) && (temperature<=32) && (humidity>=60) && (humidity<=80))){
// Serial.println("Healthy region");
warning_alarm_actived = true;
}else{
warning_alarm_actived = false;
}
}
void setTimeZone(){
while(time_offset==14){
while(flag_set_offset){
if(!digitalRead(btn_up) && offset <11){
offset++;
print_display(timeZoneMsg,1.3,SSD1306_WHITE,true,false,5,10);
if(offset>=0)print_display("+"+String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
else print_display(String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
delay(500);
}else{
print_display(timeZoneMsg,1.3,SSD1306_WHITE,true,false,5,10);
if(offset>=0)print_display("+"+String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
else print_display(String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
}
if(!digitalRead(btn_down) && offset>-11){
offset--;
print_display(timeZoneMsg,1.3,SSD1306_WHITE,true,false,5,10);
if(offset>=0)print_display("+"+String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
else print_display(String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
delay(500);
}else{
print_display(timeZoneMsg,1.3,SSD1306_WHITE,true,false,5,10);
if(offset>=0)print_display("+"+String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
else print_display(String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
print_display("_",2.0,SSD1306_WHITE,false,true,45,38);
}
if(!digitalRead(btn_ok)){
break;
}
}
delay(100);
while(flag_set_offset){
if(!digitalRead(btn_up) && offset <12){
offset = offset+0.1;
print_display(timeZoneMsg,1.3,SSD1306_WHITE,true,false,5,10);
if(offset>=0)print_display("+"+String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
else print_display(String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
delay(500);
}else{
print_display(timeZoneMsg,1.3,SSD1306_WHITE,true,false,5,10);
if(offset>=0)print_display("+"+String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
else print_display(String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
print_display("_",2.0,SSD1306_WHITE,false,true,70,38);
}
if(!digitalRead(btn_down) && offset >-12){
offset = offset-0.1;
print_display(timeZoneMsg,1.3,SSD1306_WHITE,true,false,5,10);
if(offset>=0)print_display("+"+String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
else print_display(String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
delay(500);
}else{
print_display(timeZoneMsg,1.3,SSD1306_WHITE,true,false,5,10);
if(offset>=0)print_display("+"+String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
else print_display(String(offset,1),2.0,SSD1306_WHITE,false,true,30,35);
}
if(!digitalRead(btn_ok)){
break;
}
}
time_offset=offset;
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
}
}
void print_display(String msg,double f_Size, uint16_t f_Color,boolean ena_clr,boolean ena_dis,int x_cur,int y_cur){
if(ena_clr)display.clearDisplay();
display.setTextSize(f_Size);
display.setTextColor(f_Color);
display.setCursor(x_cur,y_cur);
display.print(msg);
if(ena_dis)display.display();
}
void UpdateTimeDate() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
return;
}
strftime(hrs, 50, "%H", &timeinfo);
strftime(mint, 50, "%M", &timeinfo);
strftime(sec, 50, "%S", &timeinfo);
strftime(time_string, 50, "%H:%M:%S", &timeinfo);
strftime(date_string, 50, "%B %d, %Y", &timeinfo);
}
void printLocalTimeDateWarring() {
if(warning_alarm_actived){
print_display(time_string,1.5,SSD1306_WHITE,true,false,40,0);
print_display(date_string,1.7,SSD1306_WHITE,false,false,15,15);
print_display("Warning",1.9,SSD1306_WHITE,false,false,40,30);
print_display("Drugs are not in",1.5,SSD1306_WHITE,false,false,15,38);
print_display("safe environment!",1.5,SSD1306_WHITE,false,true,15,45);
display.drawRect(0, 25, 128, 45,WHITE);
print_display("",1.5,SSD1306_WHITE,false,true,0,0);
}else{
print_display(time_string,1.5,SSD1306_WHITE,true,false,40,0);
print_display(date_string,1.7,SSD1306_WHITE,false,false,15,15);
print_display("Drugs are in",1.5,SSD1306_WHITE,false,false,25,38);
display.drawRect(0, 25, 128, 45,WHITE);
print_display("safe environment!",1.5,SSD1306_WHITE,false,true,15,48);
}
}
bool checkTime(String time1, int h,int m) {
int hours1 = time1.substring(0, 2).toInt();
int minutes1 = time1.substring(3, 5).toInt();
int hours2 = h;
int minutes2 = m;
if ((hours1 == hours2) && (minutes1 == minutes2)) {
return true;
}else{
return false;
}
}
void checkAlarmAndUpdate(){
UpdateTimeDate();
for(int i=0;i<n_alarm;i++){
if(ena_alarms[0] && (!doDeactivateAlarm) &&(checkTime(time_string,alarm_hrs[0],alarm_min[0])||checkTime(time_string,alarm_hrs[1],alarm_min[1]))||alarm_actived ){
alarm_actived = true;
}
}
}