├── ArialRoundedMTBold_36.h ├── ArialRoundedMtBold_14.h ├── DSEG7ClassicBold_44.h ├── GfxUi.cpp ├── GfxUi.h ├── README.md ├── WebResource.cpp ├── WebResource.h ├── alt_icons ├── mini │ ├── chanceflurries.bmp │ ├── chancerain.bmp │ ├── chancesleet.bmp │ ├── chancesnow.bmp │ ├── chancetstorms.bmp │ ├── clear.bmp │ ├── cloudy.bmp │ ├── flurries.bmp │ ├── fog.bmp │ ├── hazy.bmp │ ├── mostlycloudy.bmp │ ├── mostlysunny.bmp │ ├── partlycloudy.bmp │ ├── partlysunny.bmp │ ├── rain.bmp │ ├── sleet.bmp │ ├── snow.bmp │ ├── sunny.bmp │ ├── tstorms.bmp │ └── unknown.bmp ├── moonphase_L │ ├── moon0.bmp │ ├── moon1.bmp │ ├── moon10.bmp │ ├── moon11.bmp │ ├── moon12.bmp │ ├── moon13.bmp │ ├── moon14.bmp │ ├── moon15.bmp │ ├── moon16.bmp │ ├── moon17.bmp │ ├── moon18.bmp │ ├── moon19.bmp │ ├── moon2.bmp │ ├── moon20.bmp │ ├── moon21.bmp │ ├── moon22.bmp │ ├── moon23.bmp │ ├── moon3.bmp │ ├── moon4.bmp │ ├── moon5.bmp │ ├── moon6.bmp │ ├── moon7.bmp │ ├── moon8.bmp │ └── moon9.bmp └── wunderground │ ├── chanceflurries.bmp │ ├── chancerain.bmp │ ├── chancesleet.bmp │ ├── chancesnow.bmp │ ├── chancetstorms.bmp │ ├── clear.bmp │ ├── cloudy.bmp │ ├── flurries.bmp │ ├── fog.bmp │ ├── hazy.bmp │ ├── mostlycloudy.bmp │ ├── mostlysunny.bmp │ ├── partlycloudy.bmp │ ├── partlysunny.bmp │ ├── rain.bmp │ ├── sleet.bmp │ ├── snow.bmp │ ├── sunny.bmp │ ├── tstorms.bmp │ └── unknown.bmp ├── esp8266-weather-station-color-DST.ino ├── resources ├── 7seg_silhoutte.jpg ├── Boston_EDT.jpg ├── Boston_EST.jpg ├── Sydney_AEDT.jpg ├── Sydney_AEST.jpg ├── Thumbs.db ├── Zurich_CEST.jpg ├── Zurich_CET.jpg └── wemos_color_weatherstation.jpg └── settings.h /ArialRoundedMTBold_36.h: -------------------------------------------------------------------------------- 1 | const uint8_t ArialRoundedMTBold_36Bitmaps[] PROGMEM = { 2 | 0x7B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xE7, 0x9E, 3 | 0x79, 0xE7, 0x9E, 0x70, 0x00, 0x00, 0x01, 0xEF, 0xFF, 0xFF, 0xF7, 0x80, 4 | 0xFC, 0x7F, 0xF8, 0xFF, 0xF1, 0xFF, 0xE3, 0xFF, 0xC7, 0xFF, 0x8F, 0xFF, 5 | 0x1F, 0xFE, 0x3F, 0x78, 0x3C, 0xF0, 0x79, 0xE0, 0xF0, 0x00, 0xE0, 0x70, 6 | 0x03, 0xE0, 0xF0, 0x07, 0xC3, 0xE0, 0x0F, 0x87, 0xC0, 0x1E, 0x0F, 0x80, 7 | 0x7C, 0x1F, 0x00, 0xF8, 0x3C, 0x01, 0xF0, 0xF8, 0x7F, 0xFF, 0xFD, 0xFF, 8 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xE0, 0x7C, 0x3E, 0x00, 0xF0, 9 | 0x7C, 0x01, 0xE0, 0xF8, 0x07, 0xC1, 0xE0, 0x0F, 0x83, 0xC0, 0x1F, 0x0F, 10 | 0x80, 0x3E, 0x1F, 0x03, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 11 | 0xDF, 0xFF, 0xFF, 0x0F, 0x87, 0xC0, 0x1E, 0x0F, 0x80, 0x7C, 0x1E, 0x00, 12 | 0xF8, 0x3C, 0x01, 0xF0, 0xF8, 0x03, 0xC1, 0xF0, 0x07, 0x83, 0xE0, 0x07, 13 | 0x03, 0x80, 0x00, 0x00, 0x70, 0x00, 0x01, 0xC0, 0x00, 0x07, 0x00, 0x00, 14 | 0x1C, 0x00, 0x03, 0xFE, 0x00, 0x3F, 0xFE, 0x01, 0xFF, 0xFE, 0x0F, 0xFF, 15 | 0xF8, 0x3F, 0x77, 0xF1, 0xF9, 0xC7, 0xE7, 0xC7, 0x1F, 0x9F, 0x1C, 0x3E, 16 | 0x7C, 0x70, 0xF9, 0xF1, 0xC1, 0xC7, 0xE7, 0x00, 0x1F, 0xDC, 0x00, 0x3F, 17 | 0xF0, 0x00, 0xFF, 0xF8, 0x01, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x01, 0xFF, 18 | 0xF0, 0x01, 0xFF, 0xE0, 0x07, 0x7F, 0x80, 0x1C, 0x7F, 0x70, 0x70, 0xFF, 19 | 0xE1, 0xC1, 0xFF, 0x87, 0x07, 0xFF, 0x1C, 0x1F, 0xFC, 0x70, 0xFD, 0xF9, 20 | 0xC7, 0xE7, 0xF7, 0x3F, 0x8F, 0xFF, 0xFC, 0x1F, 0xFF, 0xE0, 0x3F, 0xFF, 21 | 0x00, 0x3F, 0xF0, 0x00, 0x1C, 0x00, 0x00, 0x70, 0x00, 0x01, 0xC0, 0x00, 22 | 0x07, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x70, 0x00, 0x01, 0xC0, 0x00, 0x07, 23 | 0x00, 0x00, 0x0F, 0x80, 0x00, 0x70, 0x07, 0xFC, 0x00, 0x1E, 0x01, 0xFF, 24 | 0xC0, 0x03, 0x80, 0x3C, 0x78, 0x00, 0xF0, 0x0F, 0x07, 0x80, 0x3C, 0x01, 25 | 0xE0, 0xF0, 0x07, 0x80, 0x3C, 0x1E, 0x01, 0xE0, 0x07, 0x83, 0xC0, 0x38, 26 | 0x00, 0xF0, 0x78, 0x0F, 0x00, 0x1E, 0x0F, 0x03, 0xC0, 0x03, 0xC1, 0xE0, 27 | 0x70, 0x00, 0x78, 0x3C, 0x1E, 0x00, 0x07, 0x07, 0x07, 0x80, 0x00, 0xF1, 28 | 0xE0, 0xF0, 0x00, 0x0F, 0xF8, 0x3C, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 29 | 0x00, 0x01, 0xE0, 0xFF, 0x00, 0x00, 0x78, 0x3F, 0xF0, 0x00, 0x0E, 0x0F, 30 | 0x0F, 0x00, 0x03, 0xC1, 0xE1, 0xE0, 0x00, 0x70, 0x78, 0x1E, 0x00, 0x1C, 31 | 0x0F, 0x03, 0xC0, 0x07, 0x81, 0xE0, 0x78, 0x00, 0xE0, 0x3C, 0x0F, 0x00, 32 | 0x3C, 0x07, 0x81, 0xE0, 0x0F, 0x00, 0xF0, 0x3C, 0x01, 0xC0, 0x1F, 0x0F, 33 | 0x80, 0x78, 0x01, 0xE1, 0xE0, 0x0E, 0x00, 0x3F, 0xFC, 0x03, 0x80, 0x03, 34 | 0xFF, 0x00, 0x70, 0x00, 0x1F, 0x80, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x3F, 35 | 0x80, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0x00, 0x01, 0xFF, 0xFE, 36 | 0x00, 0x07, 0xE1, 0xF8, 0x00, 0x3F, 0x01, 0xF0, 0x00, 0xFC, 0x07, 0xC0, 37 | 0x03, 0xF0, 0x1F, 0x00, 0x0F, 0xC0, 0x7C, 0x00, 0x1F, 0x83, 0xE0, 0x00, 38 | 0x7F, 0x3F, 0x80, 0x00, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x07, 39 | 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xFF, 0xE0, 0x30, 0x1F, 0xFF, 40 | 0xC1, 0xE0, 0xFE, 0x7F, 0x0F, 0x87, 0xF0, 0xFE, 0x3E, 0x1F, 0x81, 0xFD, 41 | 0xF8, 0xFC, 0x03, 0xFF, 0xE3, 0xF0, 0x07, 0xFF, 0x0F, 0xC0, 0x0F, 0xFC, 42 | 0x3F, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x7F, 0xC1, 0xFC, 0x03, 0xFF, 0x87, 43 | 0xF8, 0x3F, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xF1, 0xFC, 0x1F, 44 | 0xFF, 0x03, 0xF0, 0x1F, 0xF0, 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 45 | 0xFF, 0x79, 0xE7, 0x80, 0x00, 0xE0, 0x3C, 0x0F, 0x03, 0xE0, 0x78, 0x1F, 46 | 0x03, 0xE0, 0xF8, 0x1F, 0x07, 0xE0, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 47 | 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 48 | 0xE0, 0xFC, 0x0F, 0x81, 0xF8, 0x3F, 0x07, 0xE0, 0x7C, 0x0F, 0xC0, 0xF8, 49 | 0x1F, 0x01, 0xF0, 0x3E, 0x03, 0xC0, 0x7C, 0x07, 0x80, 0x78, 0x07, 0xE0, 50 | 0x1E, 0x01, 0xE0, 0x3E, 0x03, 0xC0, 0x7C, 0x0F, 0x80, 0xF8, 0x1F, 0x03, 51 | 0xF0, 0x3E, 0x07, 0xE0, 0xFC, 0x1F, 0x81, 0xF0, 0x3F, 0x07, 0xE0, 0xFC, 52 | 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xF8, 0x3F, 53 | 0x07, 0xE0, 0xFC, 0x1F, 0x07, 0xE0, 0xF8, 0x1F, 0x07, 0xC0, 0xF8, 0x1E, 54 | 0x07, 0xC0, 0xF0, 0x3C, 0x07, 0x00, 0x00, 0xC0, 0x00, 0x78, 0x00, 0x1E, 55 | 0x00, 0x07, 0x80, 0x01, 0xE0, 0x3E, 0x78, 0xFF, 0xED, 0xFD, 0xFF, 0xFE, 56 | 0x1F, 0xFE, 0x00, 0x78, 0x00, 0x3F, 0x00, 0x1F, 0xE0, 0x0F, 0x3C, 0x07, 57 | 0xCF, 0x81, 0xE1, 0xE0, 0x70, 0x38, 0x1C, 0x06, 0x00, 0x00, 0xFC, 0x00, 58 | 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 59 | 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 60 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x03, 0xF0, 0x00, 61 | 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 62 | 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x39, 0xFB, 63 | 0xFF, 0xFF, 0xEF, 0xC7, 0x8E, 0x3C, 0xF3, 0xC7, 0x00, 0x7F, 0xF7, 0xFF, 64 | 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x00, 0x7B, 0xFF, 0xFF, 0xFD, 0xE0, 0x01, 65 | 0xC0, 0x3C, 0x0F, 0x81, 0xF0, 0x3C, 0x07, 0x81, 0xF0, 0x3E, 0x07, 0x80, 66 | 0xF0, 0x3E, 0x07, 0xC0, 0xF0, 0x1E, 0x07, 0xC0, 0xF8, 0x1E, 0x03, 0xC0, 67 | 0xF8, 0x1F, 0x03, 0xC0, 0x78, 0x1F, 0x03, 0xE0, 0x78, 0x0F, 0x03, 0xE0, 68 | 0x7C, 0x0F, 0x01, 0xE0, 0x3C, 0x00, 0x01, 0xFC, 0x00, 0x1F, 0xFC, 0x00, 69 | 0xFF, 0xFC, 0x07, 0xFF, 0xF8, 0x3F, 0x87, 0xE0, 0xFC, 0x0F, 0xC7, 0xE0, 70 | 0x1F, 0x9F, 0x80, 0x7E, 0x7E, 0x01, 0xFB, 0xF0, 0x03, 0xEF, 0xC0, 0x0F, 71 | 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 72 | 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 73 | 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 0xF7, 0xE0, 0x1F, 0x9F, 0x80, 0x7E, 74 | 0x7E, 0x01, 0xF8, 0xFC, 0x0F, 0xC3, 0xF8, 0x7F, 0x07, 0xFF, 0xF8, 0x0F, 75 | 0xFF, 0xC0, 0x0F, 0xFE, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1C, 0x00, 0x7C, 76 | 0x01, 0xF8, 0x07, 0xF0, 0x0F, 0xE0, 0x7F, 0xC1, 0xFF, 0x8F, 0xFF, 0x7F, 77 | 0xFF, 0xFE, 0xFF, 0xF9, 0xFF, 0xC3, 0xFF, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 78 | 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 79 | 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 80 | 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x0F, 0x00, 0x01, 0xFC, 0x00, 0x3F, 0xFE, 81 | 0x01, 0xFF, 0xFC, 0x0F, 0xFF, 0xF8, 0x7F, 0x0F, 0xF1, 0xF8, 0x0F, 0xCF, 82 | 0xC0, 0x3F, 0xBE, 0x00, 0x7E, 0xF8, 0x01, 0xFB, 0xE0, 0x07, 0xE7, 0x00, 83 | 0x1F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0xFE, 84 | 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x80, 0x03, 0xFC, 0x00, 0x1F, 0xE0, 0x00, 85 | 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x3F, 0xC0, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 86 | 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x0F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFE, 87 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0x80, 0x00, 0xFE, 0x00, 88 | 0x1F, 0xFE, 0x00, 0xFF, 0xFC, 0x07, 0xFF, 0xF8, 0x3F, 0x07, 0xF0, 0xF8, 89 | 0x0F, 0xC7, 0xC0, 0x3F, 0x1F, 0x00, 0x7C, 0x7C, 0x01, 0xF0, 0xE0, 0x07, 90 | 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x0F, 0xE0, 0x07, 0xFF, 0x00, 91 | 0x3F, 0xF8, 0x00, 0xFF, 0xF0, 0x01, 0xFF, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 92 | 0x1F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFD, 0xE0, 0x03, 0xFF, 0x80, 0x0F, 93 | 0xFF, 0x00, 0x3F, 0xFC, 0x01, 0xF9, 0xF8, 0x0F, 0xE7, 0xF0, 0x7F, 0x0F, 94 | 0xFF, 0xFC, 0x1F, 0xFF, 0xC0, 0x1F, 0xFE, 0x00, 0x1F, 0xC0, 0x00, 0x00, 95 | 0x00, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0x00, 96 | 0x00, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x7F, 0xF0, 97 | 0x00, 0x7F, 0xF8, 0x00, 0x7E, 0xFC, 0x00, 0x3E, 0x7E, 0x00, 0x3E, 0x3F, 98 | 0x00, 0x3F, 0x1F, 0x80, 0x3F, 0x0F, 0xC0, 0x1F, 0x07, 0xE0, 0x1F, 0x03, 99 | 0xF0, 0x1F, 0x81, 0xF8, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0x7E, 0x0F, 0x80, 100 | 0x3F, 0x0F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFE, 0x7F, 101 | 0xFF, 0xFF, 0x00, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7E, 0x00, 102 | 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xC0, 103 | 0x0F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE1, 0xFF, 0xFF, 0x87, 0xFF, 0xFE, 0x1F, 104 | 0xFF, 0xF0, 0x7C, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x3E, 0x00, 105 | 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x9F, 0x80, 0x7F, 0xFF, 0x81, 106 | 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0x1F, 0xC1, 0xFE, 0x7E, 0x03, 0xF8, 0xE0, 107 | 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x80, 0x03, 108 | 0xFF, 0x80, 0x0F, 0xFE, 0x00, 0x3F, 0xFC, 0x01, 0xF9, 0xF8, 0x0F, 0xE7, 109 | 0xF0, 0x7F, 0x0F, 0xFF, 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 110 | 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x0F, 0xFE, 0x00, 0x7F, 0xFE, 0x03, 0xFF, 111 | 0xF8, 0x1F, 0x87, 0xF0, 0xFC, 0x07, 0xC3, 0xE0, 0x1F, 0x9F, 0x80, 0x3C, 112 | 0x7C, 0x00, 0x71, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x3F, 0x1F, 0xC0, 0xFC, 113 | 0xFF, 0xC3, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0x3F, 0xE1, 0xFE, 0xFF, 0x03, 114 | 0xFB, 0xF8, 0x07, 0xEF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 115 | 0xF0, 0x03, 0xF7, 0xC0, 0x0F, 0xDF, 0x00, 0x3F, 0x7E, 0x01, 0xF8, 0xFC, 116 | 0x0F, 0xE3, 0xF8, 0x7F, 0x07, 0xFF, 0xFC, 0x0F, 0xFF, 0xE0, 0x0F, 0xFE, 117 | 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 118 | 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x00, 119 | 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 120 | 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 121 | 0x00, 0x0F, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 122 | 0xF8, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 123 | 0x01, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x0E, 124 | 0x00, 0x00, 0x01, 0xFE, 0x00, 0x1F, 0xFE, 0x00, 0xFF, 0xFC, 0x07, 0xFF, 125 | 0xF8, 0x3F, 0x87, 0xF1, 0xFC, 0x0F, 0xC7, 0xE0, 0x1F, 0x9F, 0x80, 0x7E, 126 | 0x7E, 0x01, 0xF9, 0xF8, 0x07, 0xE7, 0xE0, 0x1F, 0x8F, 0xC0, 0xFC, 0x3F, 127 | 0x87, 0xE0, 0x7F, 0xFF, 0x80, 0x7F, 0xF8, 0x03, 0xFF, 0xF0, 0x1F, 0xFF, 128 | 0xE0, 0xFE, 0x1F, 0xC7, 0xE0, 0x1F, 0xBF, 0x80, 0x7F, 0xFC, 0x00, 0xFF, 129 | 0xF0, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFE, 0x01, 0xFD, 0xF8, 130 | 0x07, 0xE7, 0xF8, 0x7F, 0x8F, 0xFF, 0xFC, 0x1F, 0xFF, 0xE0, 0x3F, 0xFF, 131 | 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x1F, 0xFC, 0x00, 0xFF, 0xFC, 132 | 0x07, 0xFF, 0xF8, 0x3F, 0x87, 0xE1, 0xFC, 0x0F, 0xC7, 0xE0, 0x1F, 0xBF, 133 | 0x00, 0x7E, 0xFC, 0x00, 0xFB, 0xF0, 0x03, 0xEF, 0xC0, 0x0F, 0xFF, 0x00, 134 | 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 0xF7, 0xE0, 0x1F, 0xDF, 0xC0, 0xFF, 135 | 0x3F, 0x87, 0xFC, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xC3, 0xFF, 0x3F, 0x03, 136 | 0xF8, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x8E, 0x00, 0x7E, 0x7C, 0x01, 137 | 0xF1, 0xF8, 0x0F, 0xC3, 0xF0, 0x7E, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, 0x80, 138 | 0x3F, 0xFC, 0x00, 0x3F, 0xC0, 0x00, 0x7B, 0xFF, 0xFF, 0xFD, 0xE0, 0x00, 139 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xEF, 0xFF, 0xFF, 0xF7, 0x80, 140 | 0x3C, 0xFD, 0xFB, 0xF7, 0xE7, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 141 | 0x00, 0x00, 0x00, 0x71, 0xF7, 0xFF, 0xEF, 0xCF, 0x87, 0x1E, 0x39, 0xE3, 142 | 0xC6, 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0xC0, 0x00, 0x7E, 0x00, 0x0F, 143 | 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xFC, 0x0F, 0xFF, 0x83, 0xFF, 0xF0, 0x7F, 144 | 0xFC, 0x07, 0xFF, 0x80, 0x3F, 0xE0, 0x01, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 145 | 0x7F, 0xF8, 0x01, 0xFF, 0xF0, 0x03, 0xFF, 0xF0, 0x03, 0xFF, 0xE0, 0x07, 146 | 0xFF, 0xC0, 0x0F, 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0x3C, 147 | 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 148 | 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149 | 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 150 | 0xFF, 0xFF, 0xFF, 0xFC, 0x80, 0x00, 0x07, 0x00, 0x00, 0x3F, 0x00, 0x01, 151 | 0xFE, 0x00, 0x0F, 0xFC, 0x00, 0x7F, 0xF8, 0x01, 0xFF, 0xF8, 0x01, 0xFF, 152 | 0xF0, 0x03, 0xFF, 0xE0, 0x03, 0xFF, 0xC0, 0x07, 0xFE, 0x00, 0x07, 0xF0, 153 | 0x00, 0x7F, 0x80, 0x0F, 0xFC, 0x03, 0xFF, 0xE0, 0x7F, 0xFC, 0x1F, 0xFF, 154 | 0x83, 0xFF, 0xE0, 0x3F, 0xFC, 0x01, 0xFF, 0x80, 0x0F, 0xF0, 0x00, 0x7E, 155 | 0x00, 0x03, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x3F, 0xFC, 156 | 0x07, 0xFF, 0xF0, 0x7F, 0xFF, 0xC7, 0xF0, 0x7F, 0x3F, 0x01, 0xFB, 0xF0, 157 | 0x07, 0xFF, 0x80, 0x3F, 0xF8, 0x01, 0xFF, 0xC0, 0x0F, 0xDC, 0x00, 0xFE, 158 | 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 159 | 0xE0, 0x00, 0xFE, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 160 | 0x1F, 0x00, 0x00, 0x78, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 161 | 0x00, 0x07, 0x80, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 162 | 0xFC, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x03, 163 | 0xFF, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 164 | 0xF8, 0x00, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0x80, 165 | 0x1F, 0xC0, 0x00, 0x07, 0xE0, 0x0F, 0x80, 0x00, 0x01, 0xF8, 0x0F, 0x80, 166 | 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x7E, 0x1F, 0x1F, 0x07, 0xC0, 0xFF, 0xCF, 167 | 0x87, 0x87, 0xC0, 0xFF, 0xFF, 0xC3, 0xC3, 0xC0, 0xFF, 0xFF, 0xE1, 0xF3, 168 | 0xE0, 0xFE, 0x1F, 0xE0, 0x79, 0xE0, 0xFE, 0x07, 0xF0, 0x3C, 0xF0, 0x7E, 169 | 0x01, 0xF8, 0x1E, 0xF8, 0x7E, 0x00, 0xFC, 0x0F, 0x78, 0x3F, 0x00, 0x7E, 170 | 0x07, 0xBC, 0x1F, 0x80, 0x3E, 0x03, 0xDE, 0x1F, 0x80, 0x1F, 0x03, 0xEF, 171 | 0x0F, 0xC0, 0x0F, 0x81, 0xE7, 0x87, 0xE0, 0x07, 0xC0, 0xF3, 0xC3, 0xF0, 172 | 0x07, 0xE0, 0xF9, 0xE1, 0xF8, 0x03, 0xE0, 0xF8, 0xF0, 0xFC, 0x03, 0xF0, 173 | 0x7C, 0x78, 0x7F, 0x01, 0xF8, 0x7C, 0x1E, 0x1F, 0x83, 0xFC, 0xFC, 0x0F, 174 | 0x0F, 0xFF, 0xFF, 0xFC, 0x07, 0xC3, 0xFF, 0xFF, 0xFC, 0x01, 0xE0, 0xFF, 175 | 0xCF, 0xF8, 0x00, 0xF8, 0x1F, 0xC3, 0xF0, 0x00, 0x3E, 0x00, 0x00, 0x00, 176 | 0x1F, 0x0F, 0x80, 0x00, 0x00, 0x1F, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x01, 177 | 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x0F, 0xFF, 178 | 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 179 | 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xF8, 180 | 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 181 | 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x0F, 0xBF, 0x00, 0x01, 0xF9, 182 | 0xF0, 0x00, 0x1F, 0x9F, 0x80, 0x01, 0xF1, 0xF8, 0x00, 0x3F, 0x0F, 0xC0, 183 | 0x03, 0xF0, 0xFC, 0x00, 0x3E, 0x0F, 0xC0, 0x07, 0xE0, 0x7E, 0x00, 0x7E, 184 | 0x07, 0xE0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 185 | 0x01, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFC, 0x3F, 186 | 0xFF, 0xFF, 0xC3, 0xF0, 0x00, 0xFC, 0x7E, 0x00, 0x07, 0xE7, 0xE0, 0x00, 187 | 0x7E, 0xFE, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x3F, 0xFC, 0x00, 0x03, 0xFF, 188 | 0x80, 0x00, 0x1F, 0x78, 0x00, 0x01, 0xE0, 0x7F, 0xFF, 0xE0, 0x3F, 0xFF, 189 | 0xFF, 0x0F, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xF8, 0xFC, 0x00, 0xFF, 0x3F, 190 | 0x00, 0x0F, 0xCF, 0xC0, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0xFC, 0x00, 0x1F, 191 | 0xBF, 0x00, 0x07, 0xCF, 0xC0, 0x03, 0xF3, 0xF0, 0x01, 0xFC, 0xFC, 0x00, 192 | 0xFE, 0x3F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xF0, 0xFF, 193 | 0xFF, 0xFF, 0x3F, 0x00, 0x1F, 0xEF, 0xC0, 0x01, 0xFB, 0xF0, 0x00, 0x7F, 194 | 0xFC, 0x00, 0x0F, 0xFF, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0xFF, 0xF0, 0x00, 195 | 0x3F, 0xFC, 0x00, 0x1F, 0xFF, 0x00, 0x07, 0xEF, 0xC0, 0x07, 0xFB, 0xFF, 196 | 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x00, 197 | 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xFF, 0x00, 0x0F, 0xFF, 0xF8, 0x03, 0xFF, 198 | 0xFF, 0x80, 0xFF, 0xFF, 0xF8, 0x3F, 0xC0, 0xFF, 0x8F, 0xF0, 0x07, 0xF1, 199 | 0xFC, 0x00, 0x7F, 0x7F, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFD, 0xF8, 0x00, 200 | 0x0F, 0xFE, 0x00, 0x00, 0xEF, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 201 | 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 202 | 0x03, 0xF0, 0x00, 0x06, 0x7E, 0x00, 0x01, 0xF7, 0xE0, 0x00, 0x3E, 0xFC, 203 | 0x00, 0x0F, 0xDF, 0xC0, 0x01, 0xF9, 0xF8, 0x00, 0x7F, 0x3F, 0x80, 0x1F, 204 | 0xC3, 0xFC, 0x0F, 0xF8, 0x3F, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0x80, 0x3F, 205 | 0xFF, 0xE0, 0x03, 0xFF, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xFF, 0x80, 206 | 0x3F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 207 | 0xFE, 0x3F, 0x00, 0x7F, 0xCF, 0xC0, 0x07, 0xF3, 0xF0, 0x00, 0xFE, 0xFC, 208 | 0x00, 0x1F, 0xBF, 0x00, 0x07, 0xEF, 0xC0, 0x01, 0xFF, 0xF0, 0x00, 0x3F, 209 | 0xFC, 0x00, 0x0F, 0xFF, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0xFF, 0xF0, 0x00, 210 | 0x3F, 0xFC, 0x00, 0x0F, 0xFF, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0xFF, 0xF0, 211 | 0x00, 0x3F, 0xFC, 0x00, 0x1F, 0xFF, 0x00, 0x07, 0xEF, 0xC0, 0x03, 0xFB, 212 | 0xF0, 0x00, 0xFE, 0xFC, 0x00, 0x7F, 0x3F, 0x00, 0x7F, 0xCF, 0xFF, 0xFF, 213 | 0xE3, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFC, 0x07, 0xFF, 214 | 0xF8, 0x00, 0x7F, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 215 | 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 216 | 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 217 | 0x0F, 0xC0, 0x00, 0x1F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFE, 218 | 0xFF, 0xFF, 0xF9, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 219 | 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 220 | 0x00, 0x01, 0xF8, 0x00, 0x03, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 221 | 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xF7, 0xFF, 222 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00, 0x03, 223 | 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 224 | 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7F, 0xFF, 0xE3, 0xFF, 0xFF, 0x9F, 225 | 0xFF, 0xFC, 0xFF, 0xFF, 0xC7, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 226 | 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 227 | 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 228 | 0x7E, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x03, 0xFF, 229 | 0xFC, 0x00, 0x3F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 230 | 0xF0, 0x7F, 0xC0, 0x7F, 0xC3, 0xFC, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0xFE, 231 | 0x7F, 0x00, 0x01, 0xF9, 0xF8, 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x06, 0x3F, 232 | 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 233 | 0x00, 0x00, 0x3F, 0x00, 0x3F, 0xFE, 0xFC, 0x01, 0xFF, 0xFF, 0xF0, 0x07, 234 | 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 235 | 0xFD, 0xF8, 0x00, 0x03, 0xF7, 0xF0, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0x3F, 236 | 0x3F, 0xC0, 0x01, 0xFC, 0x7F, 0xC0, 0x3F, 0xF0, 0xFF, 0xFF, 0xFF, 0x81, 237 | 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFC, 0x00, 0x01, 238 | 0xFF, 0x80, 0x00, 0x78, 0x00, 0x0F, 0x7E, 0x00, 0x0F, 0xFF, 0x00, 0x07, 239 | 0xFF, 0x80, 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 240 | 0x7F, 0xF8, 0x00, 0x3F, 0xFC, 0x00, 0x1F, 0xFE, 0x00, 0x0F, 0xFF, 0x00, 241 | 0x07, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 242 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 243 | 0x00, 0x07, 0xFF, 0x80, 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 244 | 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x3F, 0xFC, 0x00, 0x1F, 0xFE, 0x00, 0x0F, 245 | 0xFF, 0x00, 0x07, 0xFF, 0x80, 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 246 | 0xFD, 0xE0, 0x00, 0x3C, 0x7B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 247 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 248 | 0xFF, 0xFF, 0xF7, 0x80, 0x00, 0x01, 0xE0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 249 | 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 250 | 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 251 | 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 252 | 0x3F, 0x00, 0x03, 0xF7, 0x00, 0x3F, 0xF8, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 253 | 0x03, 0xFF, 0xC0, 0x7F, 0xFE, 0x07, 0xE7, 0xF0, 0xFE, 0x7F, 0xFF, 0xE3, 254 | 0xFF, 0xFC, 0x1F, 0xFF, 0x80, 0xFF, 0xF0, 0x03, 0xFC, 0x00, 0x78, 0x00, 255 | 0x0E, 0x3F, 0x00, 0x0F, 0xCF, 0xC0, 0x07, 0xF3, 0xF0, 0x03, 0xFC, 0xFC, 256 | 0x01, 0xFF, 0x3F, 0x00, 0xFF, 0x8F, 0xC0, 0x7F, 0xC3, 0xF0, 0x3F, 0xE0, 257 | 0xFC, 0x1F, 0xF0, 0x3F, 0x0F, 0xF0, 0x0F, 0xC7, 0xF8, 0x03, 0xF3, 0xFC, 258 | 0x00, 0xFD, 0xFF, 0x00, 0x3F, 0xFF, 0xC0, 0x0F, 0xFF, 0xF8, 0x03, 0xFF, 259 | 0xFF, 0x00, 0xFF, 0xFF, 0xC0, 0x3F, 0xF3, 0xF8, 0x0F, 0xF8, 0x7F, 0x03, 260 | 0xF8, 0x1F, 0xE0, 0xFC, 0x03, 0xF8, 0x3F, 0x00, 0x7F, 0x0F, 0xC0, 0x1F, 261 | 0xE3, 0xF0, 0x03, 0xF8, 0xFC, 0x00, 0x7F, 0x3F, 0x00, 0x1F, 0xEF, 0xC0, 262 | 0x03, 0xFB, 0xF0, 0x00, 0x7F, 0xFC, 0x00, 0x1F, 0xFF, 0x00, 0x03, 0xF7, 263 | 0x80, 0x00, 0x78, 0x78, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 264 | 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 265 | 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 266 | 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 267 | 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 268 | 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 269 | 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 270 | 0xFF, 0xF7, 0xFF, 0xFF, 0x80, 0x7F, 0x80, 0x07, 0xFB, 0xFF, 0x00, 0x3F, 271 | 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 272 | 0xFF, 0x80, 0x7F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 273 | 0xF0, 0x3F, 0xFF, 0xF7, 0xC0, 0xFB, 0xFF, 0xDF, 0x03, 0xEF, 0xFF, 0x7E, 274 | 0x0F, 0xBF, 0xFD, 0xF8, 0x7E, 0xFF, 0xF3, 0xE1, 0xF3, 0xFF, 0xCF, 0x87, 275 | 0xCF, 0xFF, 0x3F, 0x3F, 0x3F, 0xFC, 0xFC, 0xFC, 0xFF, 0xF1, 0xF3, 0xE3, 276 | 0xFF, 0xC7, 0xCF, 0x8F, 0xFF, 0x1F, 0xFE, 0x3F, 0xFC, 0x7F, 0xF8, 0xFF, 277 | 0xF0, 0xFF, 0xC3, 0xFF, 0xC3, 0xFF, 0x0F, 0xFF, 0x0F, 0xFC, 0x3F, 0xFC, 278 | 0x3F, 0xF0, 0xFF, 0xF0, 0x7F, 0x83, 0xFF, 0xC1, 0xFE, 0x0F, 0xFF, 0x07, 279 | 0xF8, 0x3F, 0xFC, 0x0F, 0xC0, 0xFF, 0xF0, 0x3F, 0x03, 0xF7, 0x80, 0x78, 280 | 0x07, 0x80, 0x3C, 0x00, 0x07, 0x9F, 0x80, 0x03, 0xFF, 0xE0, 0x00, 0xFF, 281 | 0xFC, 0x00, 0x3F, 0xFF, 0x80, 0x0F, 0xFF, 0xE0, 0x03, 0xFF, 0xFC, 0x00, 282 | 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xE0, 0x0F, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 283 | 0x80, 0xFF, 0xF7, 0xE0, 0x3F, 0xFC, 0xFC, 0x0F, 0xFF, 0x3F, 0x03, 0xFF, 284 | 0xC7, 0xE0, 0xFF, 0xF0, 0xFC, 0x3F, 0xFC, 0x3F, 0x0F, 0xFF, 0x07, 0xE3, 285 | 0xFF, 0xC0, 0xFC, 0xFF, 0xF0, 0x3F, 0x3F, 0xFC, 0x07, 0xEF, 0xFF, 0x00, 286 | 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xF0, 0x07, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 287 | 0x00, 0x3F, 0xFF, 0xC0, 0x07, 0xFF, 0xF0, 0x00, 0xFF, 0xFC, 0x00, 0x3F, 288 | 0xFF, 0x00, 0x07, 0xF7, 0x80, 0x00, 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x03, 289 | 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 290 | 0xFF, 0xC0, 0x7F, 0xC0, 0xFF, 0x83, 0xFC, 0x00, 0xFF, 0x0F, 0xE0, 0x01, 291 | 0xFC, 0x7F, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x1F, 292 | 0xBF, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 293 | 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 294 | 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x7F, 0x7E, 0x00, 295 | 0x01, 0xF9, 0xF8, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x3F, 0x8F, 0xE0, 0x01, 296 | 0xFC, 0x3F, 0xC0, 0x0F, 0xF0, 0x7F, 0xC0, 0xFF, 0x80, 0xFF, 0xFF, 0xFC, 297 | 0x01, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 298 | 0x01, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 299 | 0xFC, 0xFF, 0xFF, 0xFC, 0xFC, 0x01, 0xFE, 0xFC, 0x00, 0x7E, 0xFC, 0x00, 300 | 0x7F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 301 | 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x7F, 0xFC, 0x00, 0xFE, 0xFC, 0x01, 302 | 0xFE, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 303 | 0x80, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 304 | 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 305 | 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x78, 0x00, 306 | 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 307 | 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFF, 0xC0, 0x1F, 0xF0, 0x3F, 308 | 0xE0, 0x3F, 0xC0, 0x0F, 0xF0, 0x3F, 0x80, 0x07, 0xF0, 0x7F, 0x00, 0x03, 309 | 0xF8, 0x7E, 0x00, 0x01, 0xF8, 0x7E, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x01, 310 | 0xFC, 0xFC, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 311 | 0xFC, 0xFC, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 312 | 0xFC, 0xFC, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x01, 0xFC, 0x7E, 0x03, 0x01, 313 | 0xF8, 0x7E, 0x07, 0xC1, 0xF8, 0x7F, 0x07, 0xF3, 0xF8, 0x3F, 0x81, 0xFF, 314 | 0xF0, 0x3F, 0xC0, 0x7F, 0xF0, 0x1F, 0xF0, 0x3F, 0xE0, 0x0F, 0xFF, 0xFF, 315 | 0xC0, 0x07, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 316 | 0xFE, 0x00, 0x1F, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 317 | 0x1E, 0x7F, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xE3, 0xFF, 318 | 0xFF, 0xFC, 0xFC, 0x00, 0xFF, 0x3F, 0x00, 0x0F, 0xEF, 0xC0, 0x03, 0xFB, 319 | 0xF0, 0x00, 0x7E, 0xFC, 0x00, 0x1F, 0xBF, 0x00, 0x07, 0xEF, 0xC0, 0x01, 320 | 0xFB, 0xF0, 0x00, 0xFE, 0xFC, 0x00, 0x3F, 0x3F, 0x00, 0x3F, 0xCF, 0xFF, 321 | 0xFF, 0xE3, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xF0, 0x0F, 322 | 0xC1, 0xFE, 0x03, 0xF0, 0x1F, 0xC0, 0xFC, 0x03, 0xF8, 0x3F, 0x00, 0x7F, 323 | 0x0F, 0xC0, 0x1F, 0xE3, 0xF0, 0x03, 0xF8, 0xFC, 0x00, 0x7F, 0x3F, 0x00, 324 | 0x1F, 0xCF, 0xC0, 0x03, 0xFB, 0xF0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0xFF, 325 | 0x00, 0x03, 0xE7, 0x80, 0x00, 0x70, 0x00, 0xFF, 0x80, 0x03, 0xFF, 0xF8, 326 | 0x03, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x83, 0xFC, 0x1F, 0xE1, 0xF8, 0x03, 327 | 0xF1, 0xF8, 0x01, 0xFC, 0xFC, 0x00, 0x7E, 0x7E, 0x00, 0x1E, 0x3F, 0x80, 328 | 0x0F, 0x1F, 0xE0, 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0xFF, 329 | 0xFF, 0x00, 0x3F, 0xFF, 0xE0, 0x07, 0xFF, 0xF8, 0x00, 0xFF, 0xFE, 0x00, 330 | 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x07, 0xF7, 0x80, 0x03, 0xFB, 331 | 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0x7E, 0xFC, 0x00, 0x3F, 0x7E, 0x00, 0x3F, 332 | 0xBF, 0x80, 0x3F, 0x8F, 0xF0, 0x3F, 0xC3, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 333 | 0xC0, 0x3F, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 334 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x80, 335 | 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, 336 | 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 337 | 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 338 | 0x3F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 339 | 0x00, 0x3F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 340 | 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 341 | 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x01, 0xE0, 0x00, 342 | 0x78, 0x00, 0x0F, 0x7E, 0x00, 0x0F, 0xFF, 0x00, 0x07, 0xFF, 0x80, 0x03, 343 | 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF8, 0x00, 344 | 0x3F, 0xFC, 0x00, 0x1F, 0xFE, 0x00, 0x0F, 0xFF, 0x00, 0x07, 0xFF, 0x80, 345 | 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF8, 346 | 0x00, 0x3F, 0xFC, 0x00, 0x1F, 0xFE, 0x00, 0x0F, 0xFF, 0x00, 0x07, 0xFF, 347 | 0x80, 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0xF8, 0x00, 0xFE, 348 | 0xFC, 0x00, 0x7E, 0x7F, 0x00, 0x7F, 0x3F, 0xC0, 0x7F, 0x8F, 0xFF, 0xFF, 349 | 0x83, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0x80, 0x03, 0xFE, 350 | 0x00, 0x78, 0x00, 0x03, 0xDF, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x1F, 0xFE, 351 | 0x00, 0x03, 0xFF, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x9F, 0xC0, 0x03, 352 | 0xF3, 0xF8, 0x00, 0xFE, 0x3F, 0x00, 0x1F, 0x87, 0xF0, 0x03, 0xF0, 0x7E, 353 | 0x00, 0xFC, 0x0F, 0xC0, 0x1F, 0x81, 0xFC, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 354 | 0x03, 0xF0, 0x1F, 0x80, 0x7F, 0x03, 0xE0, 0x07, 0xE0, 0xFC, 0x00, 0xFC, 355 | 0x1F, 0x80, 0x0F, 0xC3, 0xE0, 0x01, 0xF8, 0xFC, 0x00, 0x3F, 0x1F, 0x80, 356 | 0x03, 0xF7, 0xE0, 0x00, 0x7E, 0xFC, 0x00, 0x0F, 0xDF, 0x00, 0x00, 0xFF, 357 | 0xE0, 0x00, 0x1F, 0xFC, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0xE0, 0x00, 358 | 0x07, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x78, 0x00, 359 | 0x7C, 0x00, 0x3D, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0xF0, 0x03, 0xF8, 0x01, 360 | 0xFF, 0xE0, 0x0F, 0xF8, 0x03, 0xFF, 0xC0, 0x1F, 0xF0, 0x07, 0xFF, 0xC0, 361 | 0x3F, 0xE0, 0x1F, 0xDF, 0x80, 0x7F, 0xC0, 0x3F, 0x3F, 0x01, 0xFF, 0xC0, 362 | 0x7E, 0x7E, 0x03, 0xEF, 0x80, 0xFC, 0x7C, 0x07, 0xDF, 0x01, 0xF8, 0xFC, 363 | 0x1F, 0xBF, 0x07, 0xE1, 0xF8, 0x3F, 0x3E, 0x0F, 0xC3, 0xF0, 0x7C, 0x7C, 364 | 0x1F, 0x83, 0xE0, 0xF8, 0xF8, 0x3E, 0x07, 0xE3, 0xF1, 0xF8, 0xFC, 0x0F, 365 | 0xC7, 0xC1, 0xF1, 0xF8, 0x1F, 0x8F, 0x83, 0xE3, 0xF0, 0x1F, 0x1F, 0x07, 366 | 0xC7, 0xC0, 0x3F, 0x7E, 0x0F, 0xDF, 0x80, 0x7E, 0xF8, 0x0F, 0xBF, 0x00, 367 | 0xFD, 0xF0, 0x1F, 0x7E, 0x00, 0xFF, 0xE0, 0x3F, 0xF8, 0x01, 0xFF, 0x80, 368 | 0x3F, 0xF0, 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x07, 0xFE, 0x00, 0xFF, 0xC0, 369 | 0x07, 0xFC, 0x01, 0xFF, 0x00, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x1F, 0xE0, 370 | 0x03, 0xFC, 0x00, 0x3F, 0xC0, 0x07, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 371 | 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0x38, 0x00, 0x1C, 0x7C, 0x00, 0x3E, 372 | 0x7E, 0x00, 0x3E, 0x7F, 0x00, 0x7E, 0x3F, 0x00, 0xFE, 0x3F, 0x80, 0xFC, 373 | 0x1F, 0x81, 0xFC, 0x1F, 0xC3, 0xF8, 0x0F, 0xE3, 0xF0, 0x07, 0xE7, 0xF0, 374 | 0x07, 0xFF, 0xE0, 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 375 | 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 376 | 0x03, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x07, 0xFF, 0xE0, 0x0F, 0xE7, 0xF0, 377 | 0x1F, 0xC3, 0xF8, 0x3F, 0xC3, 0xF8, 0x3F, 0x81, 0xFC, 0x7F, 0x00, 0xFE, 378 | 0xFF, 0x00, 0xFE, 0xFE, 0x00, 0x7F, 0xFC, 0x00, 0x3F, 0xF8, 0x00, 0x1F, 379 | 0x70, 0x00, 0x1E, 0x70, 0x00, 0x0E, 0xF8, 0x00, 0x1F, 0xFC, 0x00, 0x3F, 380 | 0xFC, 0x00, 0x3F, 0xFE, 0x00, 0x7F, 0x7F, 0x00, 0x7E, 0x3F, 0x00, 0xFE, 381 | 0x3F, 0x81, 0xFC, 0x1F, 0x81, 0xF8, 0x0F, 0xC3, 0xF8, 0x0F, 0xE3, 0xF0, 382 | 0x07, 0xE7, 0xE0, 0x07, 0xFF, 0xE0, 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 383 | 0x01, 0xFF, 0x80, 0x00, 0xFF, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 384 | 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 385 | 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 386 | 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3C, 0x00, 387 | 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 388 | 0xFF, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xE0, 389 | 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x1F, 390 | 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 391 | 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0xE0, 392 | 0x00, 0x07, 0xF8, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x1F, 393 | 0xE0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 394 | 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 395 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xF0, 0x3F, 0xE7, 0xFF, 396 | 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 397 | 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 398 | 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 399 | 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 400 | 0xFC, 0x0F, 0xFE, 0xFF, 0xF7, 0xFF, 0x3F, 0xF0, 0xE0, 0x1E, 0x03, 0xC0, 401 | 0x78, 0x0F, 0x81, 0xF0, 0x1E, 0x03, 0xC0, 0x7C, 0x0F, 0x80, 0xF0, 0x1E, 402 | 0x03, 0xE0, 0x7C, 0x07, 0x80, 0xF0, 0x1F, 0x03, 0xE0, 0x3C, 0x07, 0x80, 403 | 0xF8, 0x1F, 0x01, 0xE0, 0x3C, 0x07, 0xC0, 0xF8, 0x0F, 0x01, 0xE0, 0x3C, 404 | 0x07, 0xC0, 0x70, 0x7F, 0xCF, 0xFE, 0xFF, 0xF7, 0xFF, 0x03, 0xF0, 0x3F, 405 | 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 406 | 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 407 | 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 408 | 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF7, 0xFF, 0xFF, 0xFF, 0xFE, 409 | 0x7F, 0xC0, 0x00, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xFC, 410 | 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x1F, 0xFC, 0x00, 0xFB, 0xE0, 0x0F, 411 | 0xDF, 0x80, 0x7C, 0x7C, 0x07, 0xE3, 0xF0, 0x3F, 0x0F, 0x81, 0xF0, 0x7E, 412 | 0x1F, 0x83, 0xF0, 0xF8, 0x0F, 0xCF, 0xC0, 0x7E, 0xFE, 0x01, 0xF8, 0xFF, 413 | 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFC, 0x7C, 0x3E, 0x1E, 0x0F, 0x07, 0x01, 414 | 0xFF, 0x00, 0x3F, 0xFF, 0x01, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x7F, 0x07, 415 | 0xF1, 0xF0, 0x0F, 0xE7, 0xC0, 0x1F, 0x8E, 0x00, 0x7E, 0x00, 0x03, 0xF8, 416 | 0x00, 0xFF, 0xE0, 0x3F, 0xFF, 0x87, 0xFF, 0xFE, 0x3F, 0xF9, 0xF9, 0xFE, 417 | 0x07, 0xEF, 0xE0, 0x1F, 0xBF, 0x00, 0x7E, 0xFC, 0x03, 0xFB, 0xF0, 0x0F, 418 | 0xEF, 0xE0, 0xFF, 0xDF, 0xFF, 0xFF, 0x7F, 0xFC, 0xFC, 0xFF, 0xE1, 0xF0, 419 | 0xFE, 0x03, 0x80, 0x78, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 420 | 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 421 | 0x00, 0xFC, 0x00, 0x03, 0xF0, 0xFC, 0x0F, 0xCF, 0xFC, 0x3F, 0x7F, 0xF8, 422 | 0xFF, 0xFF, 0xF3, 0xFE, 0x1F, 0xEF, 0xF0, 0x3F, 0xBF, 0x80, 0x7E, 0xFE, 423 | 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 424 | 0xFF, 0xF0, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, 0x7F, 0xFE, 0x01, 0xFB, 425 | 0xFC, 0x0F, 0xEF, 0xF8, 0x7F, 0x3F, 0xFF, 0xFC, 0xFD, 0xFF, 0xE3, 0xF3, 426 | 0xFF, 0x07, 0x83, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x1F, 0xFF, 0x00, 0xFF, 427 | 0xFE, 0x07, 0xFF, 0xFC, 0x3F, 0x83, 0xF9, 0xFC, 0x07, 0xE7, 0xE0, 0x0F, 428 | 0xDF, 0x80, 0x1E, 0xFC, 0x00, 0x33, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 429 | 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x03, 0xBF, 0x80, 430 | 0x1F, 0x7E, 0x00, 0xFD, 0xFC, 0x07, 0xF3, 0xF8, 0x3F, 0x87, 0xFF, 0xFE, 431 | 0x0F, 0xFF, 0xE0, 0x1F, 0xFF, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x78, 432 | 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 433 | 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x0F, 0xC3, 434 | 0xF0, 0xFF, 0xCF, 0xC7, 0xFF, 0xBF, 0x3F, 0xFF, 0xFD, 0xFE, 0x1F, 0xF7, 435 | 0xF0, 0x3F, 0xDF, 0x80, 0x7F, 0xFE, 0x01, 0xFF, 0xF0, 0x07, 0xFF, 0xC0, 436 | 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0xC0, 0x1F, 437 | 0xFF, 0x00, 0x7F, 0x7E, 0x01, 0xFD, 0xFC, 0x0F, 0xF3, 0xF8, 0x7F, 0xCF, 438 | 0xFF, 0xFF, 0x1F, 0xFE, 0xFC, 0x3F, 0xF3, 0xF0, 0x3F, 0x07, 0x80, 0x00, 439 | 0xFE, 0x00, 0x1F, 0xFE, 0x00, 0xFF, 0xFE, 0x07, 0xFF, 0xFC, 0x3F, 0x87, 440 | 0xF1, 0xFC, 0x07, 0xE7, 0xE0, 0x1F, 0x9F, 0x80, 0x3F, 0xFC, 0x00, 0xFF, 441 | 0xF0, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF0, 442 | 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x00, 0x04, 0x7E, 0x00, 0x7D, 0xFC, 0x03, 443 | 0xF3, 0xF8, 0x3F, 0x87, 0xFF, 0xFE, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, 0x00, 444 | 0x0F, 0xF0, 0x00, 0x00, 0xFE, 0x01, 0xFF, 0x81, 0xFF, 0xE1, 0xFF, 0xE0, 445 | 0xFE, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x7F, 0xFE, 446 | 0x3F, 0xFF, 0x9F, 0xFF, 0xC7, 0xFF, 0xC0, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 447 | 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 448 | 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 449 | 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x00, 0x1E, 0x00, 0x03, 0xF0, 0x78, 450 | 0x3F, 0xF3, 0xF1, 0xFF, 0xEF, 0xCF, 0xFF, 0xFF, 0x7F, 0x87, 0xFD, 0xFC, 451 | 0x0F, 0xF7, 0xE0, 0x1F, 0xFF, 0x80, 0x7F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 452 | 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 453 | 0xC0, 0x1F, 0xDF, 0x80, 0x7F, 0x7F, 0x03, 0xFD, 0xFE, 0x1F, 0xF3, 0xFF, 454 | 0xFF, 0xC7, 0xFF, 0xBF, 0x0F, 0xFC, 0xFC, 0x0F, 0xC3, 0xF0, 0x00, 0x0F, 455 | 0xCE, 0x00, 0x3F, 0x7C, 0x01, 0xFD, 0xF8, 0x07, 0xE7, 0xF0, 0x7F, 0x8F, 456 | 0xFF, 0xFC, 0x3F, 0xFF, 0xE0, 0x3F, 0xFF, 0x00, 0x1F, 0xE0, 0x00, 0x78, 457 | 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 458 | 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x3F, 0x0F, 0xCF, 0xF8, 459 | 0xFD, 0xFF, 0xCF, 0xFF, 0xFE, 0xFF, 0x8F, 0xEF, 0xE0, 0x7F, 0xFE, 0x03, 460 | 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 461 | 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 462 | 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 463 | 0xC0, 0x3F, 0x78, 0x01, 0xE0, 0x7B, 0xFF, 0xFF, 0x78, 0x00, 0x00, 0x7B, 464 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 465 | 0xFF, 0xFF, 0xFF, 0xF7, 0x80, 0x01, 0xE0, 0x3F, 0x03, 0xF0, 0x3F, 0x01, 466 | 0xE0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 467 | 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 468 | 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 469 | 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x07, 0xFF, 0xFF, 0xFF, 470 | 0xEF, 0xFE, 0xFF, 0xC3, 0xF0, 0x78, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 471 | 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 472 | 0x00, 0xFC, 0x03, 0x8F, 0xC0, 0x7C, 0xFC, 0x0F, 0xCF, 0xC1, 0xFC, 0xFC, 473 | 0x3F, 0x8F, 0xC7, 0xF0, 0xFC, 0xFE, 0x0F, 0xDF, 0xC0, 0xFF, 0xF8, 0x0F, 474 | 0xFF, 0xC0, 0xFF, 0xFC, 0x0F, 0xFF, 0xE0, 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, 475 | 0xFE, 0x3F, 0x8F, 0xC1, 0xF8, 0xFC, 0x1F, 0xCF, 0xC0, 0xFE, 0xFC, 0x07, 476 | 0xEF, 0xC0, 0x7F, 0xFC, 0x03, 0xFF, 0xC0, 0x1F, 0x78, 0x00, 0xE0, 0x7B, 477 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 478 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x80, 0x70, 479 | 0x7E, 0x03, 0xF0, 0xF9, 0xFF, 0x8F, 0xFC, 0xFF, 0xFF, 0xDF, 0xFE, 0xFF, 480 | 0xFF, 0xFF, 0xFE, 0xFF, 0x0F, 0xF8, 0x7F, 0xFE, 0x07, 0xF0, 0x3F, 0xFE, 481 | 0x07, 0xF0, 0x3F, 0xFC, 0x07, 0xE0, 0x3F, 0xFC, 0x07, 0xE0, 0x3F, 0xFC, 482 | 0x07, 0xE0, 0x3F, 0xFC, 0x07, 0xE0, 0x3F, 0xFC, 0x07, 0xE0, 0x3F, 0xFC, 483 | 0x07, 0xE0, 0x3F, 0xFC, 0x07, 0xE0, 0x3F, 0xFC, 0x07, 0xE0, 0x3F, 0xFC, 484 | 0x07, 0xE0, 0x3F, 0xFC, 0x07, 0xE0, 0x3F, 0xFC, 0x07, 0xE0, 0x3F, 0xFC, 485 | 0x07, 0xE0, 0x3F, 0xFC, 0x07, 0xE0, 0x3F, 0xFC, 0x07, 0xE0, 0x3F, 0x78, 486 | 0x03, 0xC0, 0x1E, 0x70, 0x3F, 0x0F, 0x8F, 0xF8, 0xFD, 0xFF, 0xCF, 0xFF, 487 | 0xFE, 0xFF, 0x8F, 0xFF, 0xE0, 0x7F, 0xFE, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 488 | 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 489 | 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 490 | 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x78, 0x01, 491 | 0xE0, 0x00, 0xFF, 0x00, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, 492 | 0xF8, 0x3F, 0xC3, 0xFC, 0x7F, 0x00, 0xFC, 0x7E, 0x00, 0x7E, 0x7E, 0x00, 493 | 0x7E, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 494 | 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0x7E, 0x00, 495 | 0x7E, 0x7E, 0x00, 0x7E, 0x7F, 0x00, 0xFE, 0x3F, 0x83, 0xFC, 0x1F, 0xFF, 496 | 0xF8, 0x0F, 0xFF, 0xF0, 0x03, 0xFF, 0xC0, 0x00, 0xFF, 0x00, 0x78, 0x3F, 497 | 0x03, 0xF3, 0xFF, 0x0F, 0xDF, 0xFE, 0x3F, 0xFF, 0xFC, 0xFF, 0x87, 0xF3, 498 | 0xFC, 0x0F, 0xEF, 0xE0, 0x1F, 0xBF, 0x80, 0x7F, 0xFE, 0x00, 0xFF, 0xF0, 499 | 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 500 | 0xFF, 0xE0, 0x1F, 0xFF, 0x80, 0x7E, 0xFF, 0x03, 0xFB, 0xFE, 0x1F, 0xCF, 501 | 0xFF, 0xFF, 0x3F, 0x7F, 0xF8, 0xFC, 0xFF, 0xC3, 0xF0, 0xFC, 0x0F, 0xC0, 502 | 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 503 | 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x00, 504 | 0x03, 0xF0, 0x78, 0x3F, 0xF3, 0xF1, 0xFF, 0xEF, 0xCF, 0xFF, 0xFF, 0x7F, 505 | 0x87, 0xFD, 0xFC, 0x0F, 0xF7, 0xE0, 0x1F, 0xFF, 0x80, 0x7F, 0xFC, 0x01, 506 | 0xFF, 0xF0, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 507 | 0xF0, 0x07, 0xFF, 0xC0, 0x1F, 0xDF, 0x80, 0x7F, 0x7F, 0x03, 0xFD, 0xFE, 508 | 0x1F, 0xF3, 0xFF, 0xFF, 0xC7, 0xFF, 0xBF, 0x0F, 0xFC, 0xFC, 0x0F, 0xC3, 509 | 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 510 | 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 511 | 0x07, 0x80, 0x78, 0x78, 0xF9, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 512 | 0xFF, 0x06, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFC, 0x00, 0xFC, 0x00, 513 | 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 514 | 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x78, 0x00, 515 | 0x07, 0xF8, 0x01, 0xFF, 0xF0, 0x3F, 0xFF, 0x87, 0xFF, 0xFC, 0xFE, 0x0F, 516 | 0xEF, 0xC0, 0x7E, 0xFC, 0x03, 0xEF, 0xE0, 0x1C, 0xFF, 0x80, 0x07, 0xFF, 517 | 0x80, 0x3F, 0xFF, 0x00, 0xFF, 0xFC, 0x03, 0xFF, 0xE0, 0x03, 0xFF, 0x00, 518 | 0x07, 0xFF, 0x80, 0x3F, 0xF8, 0x03, 0xFF, 0xC0, 0x3F, 0xFE, 0x07, 0xE7, 519 | 0xFF, 0xFE, 0x3F, 0xFF, 0xC1, 0xFF, 0xF8, 0x07, 0xFC, 0x00, 0x0F, 0x00, 520 | 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 521 | 0xC0, 0x1F, 0x81, 0xFF, 0xF3, 0xFF, 0xF7, 0xFF, 0xEF, 0xFF, 0x83, 0xF0, 522 | 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 523 | 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7F, 524 | 0x00, 0xFF, 0xF0, 0xFF, 0xE1, 0xFF, 0xC0, 0xFE, 0x00, 0x78, 0x01, 0xEF, 525 | 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 526 | 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 527 | 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 528 | 0x3F, 0xFC, 0x07, 0xFF, 0xE0, 0x7F, 0xFF, 0x1F, 0xF7, 0xFF, 0xFF, 0x7F, 529 | 0xFB, 0xF3, 0xFF, 0x1F, 0x0F, 0xC1, 0xE0, 0x70, 0x00, 0x77, 0xC0, 0x07, 530 | 0xFE, 0x00, 0x3F, 0xF8, 0x03, 0xF7, 0xC0, 0x1F, 0x3F, 0x00, 0xF9, 0xF8, 531 | 0x0F, 0xC7, 0xC0, 0x7C, 0x3F, 0x03, 0xE0, 0xF8, 0x3E, 0x07, 0xC1, 0xF0, 532 | 0x3F, 0x1F, 0x80, 0xF8, 0xF8, 0x07, 0xC7, 0xC0, 0x1F, 0x7C, 0x00, 0xFB, 533 | 0xE0, 0x07, 0xDF, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x03, 0xF8, 0x00, 534 | 0x1F, 0xC0, 0x00, 0x7C, 0x00, 0x01, 0xC0, 0x00, 0x70, 0x01, 0xC0, 0x07, 535 | 0x7C, 0x01, 0xF0, 0x07, 0xFE, 0x01, 0xFC, 0x03, 0xFF, 0x00, 0xFE, 0x01, 536 | 0xF7, 0xC0, 0x7F, 0x01, 0xFB, 0xE0, 0x7F, 0xC0, 0xF9, 0xF0, 0x3F, 0xE0, 537 | 0x7C, 0x7C, 0x1F, 0xF0, 0x7C, 0x3E, 0x0F, 0x78, 0x3E, 0x1F, 0x0F, 0xBE, 538 | 0x1F, 0x07, 0x87, 0xDF, 0x0F, 0x03, 0xE3, 0xC7, 0x8F, 0x81, 0xF1, 0xE3, 539 | 0xC7, 0xC0, 0x79, 0xF1, 0xF3, 0xC0, 0x3E, 0xF8, 0xFB, 0xE0, 0x1F, 0x78, 540 | 0x3D, 0xF0, 0x07, 0xFC, 0x1F, 0xF0, 0x03, 0xFE, 0x0F, 0xF8, 0x01, 0xFE, 541 | 0x03, 0xFC, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x0F, 542 | 0x80, 0x3E, 0x00, 0x03, 0x80, 0x0E, 0x00, 0x78, 0x01, 0xC7, 0xC0, 0x3E, 543 | 0x7C, 0x03, 0xE7, 0xE0, 0x7E, 0x7F, 0x0F, 0xE3, 0xF0, 0xFC, 0x1F, 0x9F, 544 | 0x80, 0xFF, 0xF0, 0x0F, 0xFF, 0x00, 0x7F, 0xE0, 0x03, 0xFC, 0x00, 0x3F, 545 | 0xC0, 0x03, 0xFC, 0x00, 0x7F, 0xE0, 0x0F, 0xFF, 0x01, 0xFF, 0xF8, 0x1F, 546 | 0x9F, 0x83, 0xF0, 0xFC, 0x7E, 0x07, 0xEF, 0xE0, 0x7E, 0xFC, 0x03, 0xFF, 547 | 0x80, 0x1F, 0x70, 0x00, 0xE0, 0x38, 0x00, 0x39, 0xF0, 0x01, 0xF7, 0xE0, 548 | 0x07, 0xDF, 0x80, 0x3F, 0x7E, 0x00, 0xF8, 0xFC, 0x03, 0xE3, 0xF0, 0x1F, 549 | 0x87, 0xC0, 0x7C, 0x1F, 0x81, 0xF0, 0x7E, 0x0F, 0xC0, 0xF8, 0x3E, 0x03, 550 | 0xF0, 0xF8, 0x07, 0xC7, 0xE0, 0x1F, 0x1F, 0x00, 0x7E, 0xFC, 0x00, 0xFB, 551 | 0xE0, 0x03, 0xEF, 0x80, 0x0F, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x7F, 0xC0, 552 | 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0x00, 0x00, 553 | 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFE, 0x00, 0x7F, 0xF0, 554 | 0x03, 0xFF, 0xC0, 0x0F, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0xFF, 0xE3, 555 | 0xFF, 0xFF, 0x9F, 0xFF, 0xFC, 0xFF, 0xFF, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 556 | 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xF0, 0x00, 557 | 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 558 | 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x3F, 0xFF, 0xFD, 0xFF, 559 | 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xF8, 0x00, 0x7C, 0x03, 0xFC, 0x0F, 560 | 0xF8, 0x1F, 0xF0, 0x7F, 0xE0, 0xFE, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 561 | 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x07, 562 | 0xF0, 0x1F, 0xC0, 0x7F, 0x81, 0xFE, 0x07, 0xF8, 0x0F, 0xE0, 0x0F, 0xF0, 563 | 0x0F, 0xF0, 0x0F, 0xE0, 0x0F, 0xC0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 564 | 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 565 | 0xC0, 0x3F, 0xF0, 0x3F, 0xE0, 0x7F, 0xC0, 0x7F, 0x80, 0x3E, 0x77, 0xFF, 566 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 567 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEE, 0x7C, 568 | 0x01, 0xFE, 0x03, 0xFE, 0x07, 0xFC, 0x0F, 0xFC, 0x03, 0xF8, 0x03, 0xF0, 569 | 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 570 | 0xF8, 0x03, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 571 | 0xF0, 0x0F, 0xE0, 0x7F, 0x81, 0xFE, 0x03, 0xF8, 0x0F, 0xE0, 0x1F, 0x80, 572 | 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 573 | 0xC0, 0x1F, 0x80, 0x7F, 0x07, 0xFE, 0x0F, 0xF8, 0x1F, 0xF0, 0x3F, 0xC0, 574 | 0x3E, 0x00, 0x1F, 0x80, 0x05, 0xFF, 0xC0, 0x3F, 0xFF, 0xE3, 0xFF, 0xFF, 575 | 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 0xFC, 0x03, 0xFF, 0x20, 0x01, 0xF8, 576 | 0x1F, 0xE0, 0x7F, 0xF1, 0xFF, 0xF7, 0xC3, 0xEF, 0x03, 0xFE, 0x03, 0xFC, 577 | 0x07, 0xF8, 0x0F, 0xF0, 0x3F, 0xF0, 0x79, 0xF1, 0xF3, 0xFF, 0xC3, 0xFF, 578 | 0x01, 0xF8, 0x00 }; 579 | 580 | const GFXglyph ArialRoundedMTBold_36Glyphs[] PROGMEM = { 581 | // bitmapOffset, width, height, xAdvance, xOffset, yOffset 582 | { 0, 0, 0, 11, 0, 1 }, // 0x20 ' ' 583 | { 0, 6, 31, 14, 4, -30 }, // 0x21 '!' 584 | { 24, 15, 11, 21, 3, -30 }, // 0x22 '"' 585 | { 45, 23, 31, 24, 0, -30 }, // 0x23 '#' 586 | { 135, 22, 43, 26, 2, -34 }, // 0x24 '$' 587 | { 254, 35, 32, 37, 1, -30 }, // 0x25 '%' 588 | { 394, 30, 31, 33, 2, -30 }, // 0x26 '&' 589 | { 511, 6, 11, 10, 2, -30 }, // 0x27 ''' 590 | { 520, 11, 40, 15, 2, -30 }, // 0x28 '(' 591 | { 575, 11, 40, 15, 2, -30 }, // 0x29 ')' 592 | { 630, 18, 17, 19, 0, -32 }, // 0x2A '*' 593 | { 669, 22, 22, 25, 2, -25 }, // 0x2B '+' 594 | { 730, 7, 12, 13, 3, -5 }, // 0x2C ',' 595 | { 741, 13, 5, 14, 1, -13 }, // 0x2D '-' 596 | { 750, 6, 6, 13, 4, -5 }, // 0x2E '.' 597 | { 755, 11, 31, 12, 1, -30 }, // 0x2F '/' 598 | { 798, 22, 31, 26, 2, -30 }, // 0x30 '0' 599 | { 884, 15, 31, 26, 3, -30 }, // 0x31 '1' 600 | { 943, 22, 31, 26, 3, -30 }, // 0x32 '2' 601 | { 1029, 22, 31, 26, 2, -30 }, // 0x33 '3' 602 | { 1115, 25, 31, 26, 0, -30 }, // 0x34 '4' 603 | { 1212, 22, 31, 26, 2, -30 }, // 0x35 '5' 604 | { 1298, 22, 31, 26, 2, -30 }, // 0x36 '6' 605 | { 1384, 21, 31, 26, 3, -30 }, // 0x37 '7' 606 | { 1466, 22, 31, 26, 2, -30 }, // 0x38 '8' 607 | { 1552, 22, 31, 26, 1, -30 }, // 0x39 '9' 608 | { 1638, 6, 23, 13, 4, -22 }, // 0x3A ':' 609 | { 1656, 7, 29, 13, 3, -22 }, // 0x3B ';' 610 | { 1682, 21, 23, 25, 2, -26 }, // 0x3C '<' 611 | { 1743, 21, 14, 25, 2, -21 }, // 0x3D '=' 612 | { 1780, 21, 24, 25, 2, -26 }, // 0x3E '>' 613 | { 1843, 21, 31, 25, 2, -30 }, // 0x3F '?' 614 | { 1925, 41, 40, 42, 1, -30 }, // 0x40 '@' 615 | { 2130, 28, 31, 31, 1, -30 }, // 0x41 'A' 616 | { 2239, 26, 31, 31, 3, -30 }, // 0x42 'B' 617 | { 2340, 27, 31, 32, 2, -30 }, // 0x43 'C' 618 | { 2445, 26, 31, 32, 4, -30 }, // 0x44 'D' 619 | { 2546, 23, 31, 29, 3, -30 }, // 0x45 'E' 620 | { 2636, 21, 31, 26, 3, -30 }, // 0x46 'F' 621 | { 2718, 30, 31, 34, 2, -30 }, // 0x47 'G' 622 | { 2835, 25, 31, 33, 4, -30 }, // 0x48 'H' 623 | { 2932, 6, 31, 13, 4, -30 }, // 0x49 'I' 624 | { 2956, 20, 31, 25, 1, -30 }, // 0x4A 'J' 625 | { 3034, 26, 31, 32, 4, -30 }, // 0x4B 'K' 626 | { 3135, 22, 31, 26, 3, -30 }, // 0x4C 'L' 627 | { 3221, 30, 31, 36, 3, -30 }, // 0x4D 'M' 628 | { 3338, 26, 31, 33, 3, -30 }, // 0x4E 'N' 629 | { 3439, 30, 31, 34, 2, -30 }, // 0x4F 'O' 630 | { 3556, 24, 31, 29, 3, -30 }, // 0x50 'P' 631 | { 3649, 32, 33, 34, 2, -30 }, // 0x51 'Q' 632 | { 3781, 26, 31, 31, 3, -30 }, // 0x52 'R' 633 | { 3882, 25, 31, 29, 2, -30 }, // 0x53 'S' 634 | { 3979, 26, 31, 27, 0, -30 }, // 0x54 'T' 635 | { 4080, 25, 31, 33, 4, -30 }, // 0x55 'U' 636 | { 4177, 27, 31, 30, 1, -30 }, // 0x56 'V' 637 | { 4282, 39, 31, 40, 1, -30 }, // 0x57 'W' 638 | { 4434, 24, 31, 26, 1, -30 }, // 0x58 'X' 639 | { 4527, 24, 31, 27, 1, -30 }, // 0x59 'Y' 640 | { 4620, 27, 31, 28, 0, -30 }, // 0x5A 'Z' 641 | { 4725, 12, 39, 15, 3, -30 }, // 0x5B '[' 642 | { 4784, 11, 31, 12, 1, -30 }, // 0x5C '\' 643 | { 4827, 12, 39, 15, 0, -30 }, // 0x5D ']' 644 | { 4886, 21, 17, 25, 2, -30 }, // 0x5E '^' 645 | { 4931, 22, 2, 22, 0, 4 }, // 0x5F '_' 646 | { 4937, 8, 6, 14, 2, -30 }, // 0x60 '`' 647 | { 4943, 22, 23, 26, 2, -22 }, // 0x61 'a' 648 | { 5007, 22, 31, 27, 3, -30 }, // 0x62 'b' 649 | { 5093, 22, 23, 26, 2, -22 }, // 0x63 'c' 650 | { 5157, 22, 31, 27, 2, -30 }, // 0x64 'd' 651 | { 5243, 22, 23, 26, 2, -22 }, // 0x65 'e' 652 | { 5307, 17, 31, 14, 0, -30 }, // 0x66 'f' 653 | { 5373, 22, 31, 27, 2, -21 }, // 0x67 'g' 654 | { 5459, 20, 31, 26, 3, -30 }, // 0x68 'h' 655 | { 5537, 6, 31, 12, 3, -30 }, // 0x69 'i' 656 | { 5561, 12, 40, 12, -3, -30 }, // 0x6A 'j' 657 | { 5621, 20, 31, 25, 3, -30 }, // 0x6B 'k' 658 | { 5699, 6, 31, 12, 3, -30 }, // 0x6C 'l' 659 | { 5723, 32, 22, 38, 3, -21 }, // 0x6D 'm' 660 | { 5811, 20, 23, 26, 3, -22 }, // 0x6E 'n' 661 | { 5869, 24, 23, 26, 1, -22 }, // 0x6F 'o' 662 | { 5938, 22, 31, 27, 3, -21 }, // 0x70 'p' 663 | { 6024, 22, 31, 27, 2, -21 }, // 0x71 'q' 664 | { 6110, 16, 23, 19, 3, -22 }, // 0x72 'r' 665 | { 6156, 20, 23, 23, 2, -22 }, // 0x73 's' 666 | { 6214, 15, 31, 15, 1, -30 }, // 0x74 't' 667 | { 6273, 20, 23, 26, 3, -22 }, // 0x75 'u' 668 | { 6331, 21, 23, 23, 1, -22 }, // 0x76 'v' 669 | { 6392, 33, 23, 35, 1, -22 }, // 0x77 'w' 670 | { 6487, 20, 23, 22, 1, -22 }, // 0x78 'x' 671 | { 6545, 22, 32, 23, 0, -22 }, // 0x79 'y' 672 | { 6633, 21, 22, 22, 1, -21 }, // 0x7A 'z' 673 | { 6691, 15, 40, 17, 1, -30 }, // 0x7B '{' 674 | { 6766, 5, 40, 12, 4, -30 }, // 0x7C '|' 675 | { 6791, 15, 40, 17, 1, -30 }, // 0x7D '}' 676 | { 6866, 22, 8, 25, 2, -18 }, // 0x7E '~' 677 | { 6888, 15, 14, 17, 1, -30 } }; // 0x7F 678 | 679 | const GFXfont ArialRoundedMTBold_36 PROGMEM = { 680 | (uint8_t *)ArialRoundedMTBold_36Bitmaps, 681 | (GFXglyph *)ArialRoundedMTBold_36Glyphs, 682 | 0x20, 0x7F, 50 }; 683 | 684 | // Approx. 7594 bytes 685 | -------------------------------------------------------------------------------- /ArialRoundedMtBold_14.h: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | Copyright (c) 2015 by Daniel Eichhorn 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | The above copyright notice and this permission notice shall be included in all 10 | copies or substantial portions of the Software. 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 16 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 17 | SOFTWARE. 18 | See more at http://blog.squix.ch 19 | */ 20 | 21 | // Created by http://oleddisplay.squix.ch/ Consider a donation 22 | // In case of problems make sure that you are using the font file with the correct version! 23 | const uint8_t ArialRoundedMTBold_14Bitmaps[] PROGMEM = { 24 | 25 | // Bitmap Data: 26 | 0x00, // ' ' 27 | 0xFF,0xF8,0xF0, // '!' 28 | 0xDE,0xF6, // '"' 29 | 0x12,0x32,0x36,0xFF,0xFF,0x24,0xFF,0xFF,0x4C,0x48, // '#' 30 | 0x10,0x61,0xF6,0xAD,0x7A,0x1E,0x0E,0xD7,0xAF,0x5B,0xE1,0x02,0x04,0x00, // '$' 31 | 0x60,0x92,0x22,0x44,0x49,0x07,0x60,0x0B,0x82,0x48,0xC9,0x11,0x24,0x18, // '%' 32 | 0x3C,0x19,0x82,0x60,0xF0,0x39,0x33,0x6C,0x73,0x1C,0xFF,0x8E,0x30, // '&' 33 | 0xFC, // ''' 34 | 0x32,0x64,0xCC,0xCC,0xC4,0x62,0x30, // '(' 35 | 0xC4,0x62,0x33,0x33,0x32,0x64,0xC0, // ')' 36 | 0x21,0x2A,0xE5,0x28, // '*' 37 | 0x18,0x18,0x18,0xFF,0xFF,0x18,0x18, // '+' 38 | 0xF6, // ',' 39 | 0xFF, // '-' 40 | 0xF0, // '.' 41 | 0x33,0x32,0x66,0x4C,0xCC, // '/' 42 | 0x38,0xFB,0x9E,0x3C,0x78,0xF1,0xF6,0x7C,0x70, // '0' 43 | 0x19,0xDF,0xB1,0x8C,0x63,0x18,0xC0, // '1' 44 | 0x38,0xFF,0x1E,0x30,0xC3,0x0C,0x30,0xFF,0xFC, // '2' 45 | 0x79,0x9B,0x10,0x63,0xC7,0x81,0xC3,0xC6,0xF0, // '3' 46 | 0x06,0x0E,0x1E,0x16,0x26,0x46,0xFF,0xFF,0x06,0x06, // '4' 47 | 0x7E,0xFD,0x06,0x0F,0xD8,0xC1,0xC3,0xCC,0xF0, // '5' 48 | 0x38,0xDB,0x1E,0x0F,0xD8,0xF1,0xE3,0x66,0x78, // '6' 49 | 0xFF,0xFC,0x30,0x41,0x82,0x0C,0x18,0x30,0xC0, // '7' 50 | 0x38,0xDB,0x1F,0x63,0x98,0xF1,0xE3,0xC6,0xF8, // '8' 51 | 0x3C,0x66,0xC3,0xC3,0xE7,0x3F,0x03,0xC3,0x66,0x3C, // '9' 52 | 0xF0,0x3C, // ':' 53 | 0xF0,0x3D,0x80, // ';' 54 | 0x02,0x1D,0xF7,0x0E,0x0F,0x83,0x81, // '<' 55 | 0xFF,0xFC,0x07,0xFF,0xE0, // '=' 56 | 0x81,0xC1,0xF0,0x70,0xEF,0xB8,0x40, // '>' 57 | 0x3C,0xFF,0x1E,0x30,0xC7,0x0C,0x00,0x30,0x60, // '?' 58 | 0x0F,0x83,0x06,0x60,0x24,0xED,0x99,0x9B,0x19,0xB1,0xBB,0x12,0xBF,0xE4,0xDC,0x40,0x13,0x06,0x0F,0xC0, // '@' 59 | 0x1C,0x0E,0x05,0x06,0xC3,0x63,0x19,0xFC,0xFE,0xC1,0xE0,0xC0, // 'A' 60 | 0xFC,0xFE,0xC7,0xC6,0xFE,0xFE,0xC3,0xC3,0xFF,0xFE, // 'B' 61 | 0x3E,0x3F,0xB8,0xF8,0x3C,0x06,0x03,0x06,0xC7,0x7F,0x0F,0x00, // 'C' 62 | 0xFE,0x7F,0xB0,0xF8,0x3C,0x1E,0x0F,0x07,0x87,0xFF,0x7F,0x00, // 'D' 63 | 0xFE,0xFF,0xC0,0xC0,0xFE,0xFE,0xC0,0xC0,0xFF,0xFF, // 'E' 64 | 0xFF,0xFF,0x06,0x0F,0xDF,0xB0,0x60,0xC1,0x80, // 'F' 65 | 0x1E,0x3F,0x98,0xF8,0x2C,0x06,0x3F,0x1E,0xC3,0x7F,0x9F,0x00, // 'G' 66 | 0xC1,0xE0,0xF0,0x78,0x3F,0xFF,0xFF,0x07,0x83,0xC1,0xE0,0xC0, // 'H' 67 | 0xFF,0xFF,0xF0, // 'I' 68 | 0x06,0x0C,0x18,0x30,0x60,0xF1,0xF3,0x7E,0x78, // 'J' 69 | 0xC3,0x63,0xB3,0x9B,0x8F,0x87,0x63,0x19,0x8E,0xC3,0x60,0xC0, // 'K' 70 | 0xC1,0x83,0x06,0x0C,0x18,0x30,0x60,0xFF,0xFC, // 'L' 71 | 0xE1,0xFC,0xFF,0x3F,0xCF,0xD2,0xF7,0xBD,0xEF,0x7B,0xCC,0xF3,0x30, // 'M' 72 | 0xC1,0xF0,0xFC,0x7E,0x3D,0x9E,0x6F,0x3F,0x8F,0xC3,0xE0,0xC0, // 'N' 73 | 0x1E,0x1F,0xE6,0x1B,0x03,0xC0,0xF0,0x3C,0x0D,0x86,0x7F,0x87,0x80, // 'O' 74 | 0xFE,0xFF,0xC3,0xC3,0xFF,0xFE,0xC0,0xC0,0xC0,0xC0, // 'P' 75 | 0x1E,0x0F,0xF1,0x87,0x60,0x6C,0x0D,0x81,0xB1,0x33,0x7C,0x7F,0x83,0xD8,0x01,0x80, // 'Q' 76 | 0xFE,0xFF,0xC3,0xC3,0xFE,0xFC,0xCE,0xC6,0xC3,0xC3, // 'R' 77 | 0x7C,0xFE,0xC7,0xC2,0x7C,0x0F,0xC3,0xC3,0x7E,0x3C, // 'S' 78 | 0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, // 'T' 79 | 0xC1,0xE0,0xF0,0x78,0x3C,0x1E,0x0F,0x07,0xC7,0x7F,0x1F,0x00, // 'U' 80 | 0xC1,0xE0,0xD8,0xCC,0x66,0x31,0xB0,0xD8,0x6C,0x1C,0x0E,0x00, // 'V' 81 | 0xC7,0x1E,0x38,0xF1,0x46,0xDB,0x66,0xDB,0x36,0xD9,0xA2,0xC7,0x1C,0x38,0xE1,0x83,0x00, // 'W' 82 | 0xC3,0x66,0x7E,0x3C,0x18,0x3C,0x7E,0x66,0xC3,0xC3, // 'X' 83 | 0xC3,0xC3,0x66,0x3E,0x3C,0x18,0x18,0x18,0x18,0x18, // 'Y' 84 | 0x7F,0x3F,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0xC0, // 'Z' 85 | 0xFF,0xCC,0xCC,0xCC,0xCC,0xCF,0xF0, // '[' 86 | 0xCC,0x44,0x66,0x22,0x33, // '\' 87 | 0xFF,0x33,0x33,0x33,0x33,0x3F,0xF0, // ']' 88 | 0x30,0xE7,0x9A,0xCF,0x30, // '^' 89 | 0xFE, // '_' 90 | 0xD0, // '`' 91 | 0x7D,0x8C,0x7F,0x3C,0x79,0xDD,0x80, // 'a' 92 | 0xC1,0x83,0x06,0xEF,0xF8,0xF1,0xE3,0xFF,0xB8, // 'b' 93 | 0x3C,0xFF,0x1E,0x0C,0x6F,0xCF,0x00, // 'c' 94 | 0x06,0x0C,0x1B,0xBF,0xF8,0xF1,0xE3,0xFE,0xEC, // 'd' 95 | 0x3C,0xCF,0x1F,0xFC,0x0C,0xCF,0x00, // 'e' 96 | 0x3B,0x19,0xF6,0x31,0x8C,0x63,0x00, // 'f' 97 | 0x77,0xFF,0x1E,0x3C,0x7F,0xDD,0xE3,0xC6,0xF8, // 'g' 98 | 0xC1,0x83,0x06,0xEF,0xF8,0xF1,0xE3,0xC7,0x8C, // 'h' 99 | 0xF3,0xFF,0xF0, // 'i' 100 | 0x33,0x03,0x33,0x33,0x33,0x3F,0xE0, // 'j' 101 | 0xC1,0x83,0x06,0x6D,0x9E,0x3E,0x66,0xCD,0x8C, // 'k' 102 | 0xFF,0xFF,0xF0, // 'l' 103 | 0xD9,0xDF,0xFF,0x31,0xE6,0x3C,0xC7,0x98,0xF3,0x18, // 'm' 104 | 0xDD,0xFF,0x1E,0x3C,0x78,0xF1,0x80, // 'n' 105 | 0x38,0xFB,0x1E,0x3C,0x6F,0x8E,0x00, // 'o' 106 | 0xDD,0xFF,0x1E,0x3C,0x7F,0xF7,0x60,0xC1,0x80, // 'p' 107 | 0x77,0xFF,0x1E,0x3C,0x7F,0xDD,0x83,0x06,0x0C, // 'q' 108 | 0xDF,0xF1,0x8C,0x63,0x00, // 'r' 109 | 0x7B,0x3E,0x1E,0x0F,0x37,0x80, // 's' 110 | 0x63,0x19,0xF6,0x31,0x8C,0x79,0xC0, // 't' 111 | 0xC7,0x8F,0x1E,0x3C,0x7F,0xDD,0x80, // 'u' 112 | 0xC7,0x8D,0x93,0x62,0x87,0x04,0x00, // 'v' 113 | 0xC4,0x79,0xCD,0x29,0x35,0x67,0xBC,0x63,0x0C,0x60, // 'w' 114 | 0xC6,0xD9,0xF1,0xC7,0xCD,0xB1,0x80, // 'x' 115 | 0xC7,0x8D,0x93,0x62,0xC7,0x06,0x18,0xF1,0xC0, // 'y' 116 | 0xFE,0x18,0x61,0x86,0x1F,0xFF,0x80, // 'z' 117 | 0x19,0xCC,0x63,0x3B,0x8E,0x31,0x8C,0x71,0x80, // '{' 118 | 0xFF,0xFF,0xFF,0xC0, // '|' 119 | 0xC7,0x18,0xC6,0x38,0xEE,0x63,0x19,0xCC,0x00 // '}' 120 | }; 121 | const GFXglyph ArialRoundedMTBold_14Glyphs[] PROGMEM = { 122 | // bitmapOffset, width, height, xAdvance, xOffset, yOffset 123 | { 0, 1, 1, 5, 0, 0 }, // ' ' 124 | { 1, 2, 10, 6, 1, -10 }, // '!' 125 | { 4, 5, 3, 8, 1, -10 }, // '"' 126 | { 6, 8, 10, 9, 0, -10 }, // '#' 127 | { 16, 7, 15, 9, 1, -12 }, // '$' 128 | { 30, 11, 10, 13, 0, -10 }, // '%' 129 | { 44, 10, 10, 12, 1, -10 }, // '&' 130 | { 57, 2, 3, 4, 1, -10 }, // ''' 131 | { 58, 4, 13, 6, 1, -10 }, // '(' 132 | { 65, 4, 13, 6, 0, -10 }, // ')' 133 | { 72, 5, 6, 7, 1, -11 }, // '*' 134 | { 76, 8, 7, 9, 0, -9 }, // '+' 135 | { 83, 2, 4, 5, 1, -2 }, // ',' 136 | { 84, 4, 2, 6, 0, -5 }, // '-' 137 | { 85, 2, 2, 5, 1, -2 }, // '.' 138 | { 86, 4, 10, 5, 0, -10 }, // '/' 139 | { 91, 7, 10, 9, 1, -10 }, // '0' 140 | { 100, 5, 10, 9, 1, -10 }, // '1' 141 | { 107, 7, 10, 9, 1, -10 }, // '2' 142 | { 116, 7, 10, 9, 1, -10 }, // '3' 143 | { 125, 8, 10, 9, 0, -10 }, // '4' 144 | { 135, 7, 10, 9, 1, -10 }, // '5' 145 | { 144, 7, 10, 9, 1, -10 }, // '6' 146 | { 153, 7, 10, 9, 1, -10 }, // '7' 147 | { 162, 7, 10, 9, 1, -10 }, // '8' 148 | { 171, 8, 10, 9, 0, -10 }, // '9' 149 | { 181, 2, 7, 5, 1, -7 }, // ':' 150 | { 183, 2, 9, 5, 1, -7 }, // ';' 151 | { 186, 7, 8, 9, 1, -9 }, // '<' 152 | { 193, 7, 5, 9, 1, -7 }, // '=' 153 | { 198, 7, 8, 9, 1, -9 }, // '>' 154 | { 205, 7, 10, 9, 1, -10 }, // '?' 155 | { 214, 12, 13, 15, 1, -10 }, // '@' 156 | { 234, 9, 10, 11, 1, -10 }, // 'A' 157 | { 246, 8, 10, 11, 1, -10 }, // 'B' 158 | { 256, 9, 10, 11, 1, -10 }, // 'C' 159 | { 268, 9, 10, 11, 1, -10 }, // 'D' 160 | { 280, 8, 10, 10, 1, -10 }, // 'E' 161 | { 290, 7, 10, 9, 1, -10 }, // 'F' 162 | { 299, 9, 10, 12, 1, -10 }, // 'G' 163 | { 311, 9, 10, 12, 1, -10 }, // 'H' 164 | { 323, 2, 10, 5, 1, -10 }, // 'I' 165 | { 326, 7, 10, 9, 0, -10 }, // 'J' 166 | { 335, 9, 10, 11, 1, -10 }, // 'K' 167 | { 347, 7, 10, 9, 1, -10 }, // 'L' 168 | { 356, 10, 10, 13, 1, -10 }, // 'M' 169 | { 369, 9, 10, 12, 1, -10 }, // 'N' 170 | { 381, 10, 10, 12, 1, -10 }, // 'O' 171 | { 394, 8, 10, 10, 1, -10 }, // 'P' 172 | { 404, 11, 11, 12, 1, -10 }, // 'Q' 173 | { 420, 8, 10, 11, 1, -10 }, // 'R' 174 | { 430, 8, 10, 10, 1, -10 }, // 'S' 175 | { 440, 8, 10, 10, 0, -10 }, // 'T' 176 | { 450, 9, 10, 12, 1, -10 }, // 'U' 177 | { 462, 9, 10, 11, 0, -10 }, // 'V' 178 | { 474, 13, 10, 14, 0, -10 }, // 'W' 179 | { 491, 8, 10, 9, 0, -10 }, // 'X' 180 | { 501, 8, 10, 10, 0, -10 }, // 'Y' 181 | { 511, 9, 10, 10, 0, -10 }, // 'Z' 182 | { 523, 4, 13, 6, 1, -10 }, // '[' 183 | { 530, 4, 10, 5, 0, -10 }, // '\' 184 | { 535, 4, 13, 6, 0, -10 }, // ']' 185 | { 542, 6, 6, 9, 1, -10 }, // '^' 186 | { 547, 7, 1, 8, 0, 1 }, // '_' 187 | { 548, 2, 2, 6, 1, -10 }, // '`' 188 | { 549, 7, 7, 9, 1, -7 }, // 'a' 189 | { 556, 7, 10, 10, 1, -10 }, // 'b' 190 | { 565, 7, 7, 9, 1, -7 }, // 'c' 191 | { 572, 7, 10, 10, 1, -10 }, // 'd' 192 | { 581, 7, 7, 9, 1, -7 }, // 'e' 193 | { 588, 5, 10, 6, 0, -10 }, // 'f' 194 | { 595, 7, 10, 10, 1, -7 }, // 'g' 195 | { 604, 7, 10, 9, 1, -10 }, // 'h' 196 | { 613, 2, 10, 5, 1, -10 }, // 'i' 197 | { 616, 4, 13, 5, -1, -10 }, // 'j' 198 | { 623, 7, 10, 9, 1, -10 }, // 'k' 199 | { 632, 2, 10, 5, 1, -10 }, // 'l' 200 | { 635, 11, 7, 13, 1, -7 }, // 'm' 201 | { 645, 7, 7, 9, 1, -7 }, // 'n' 202 | { 652, 7, 7, 9, 1, -7 }, // 'o' 203 | { 659, 7, 10, 10, 1, -7 }, // 'p' 204 | { 668, 7, 10, 10, 1, -7 }, // 'q' 205 | { 677, 5, 7, 7, 1, -7 }, // 'r' 206 | { 682, 6, 7, 9, 1, -7 }, // 's' 207 | { 688, 5, 10, 6, 0, -10 }, // 't' 208 | { 695, 7, 7, 9, 1, -7 }, // 'u' 209 | { 702, 7, 7, 9, 0, -7 }, // 'v' 210 | { 709, 11, 7, 12, 0, -7 }, // 'w' 211 | { 719, 7, 7, 8, 0, -7 }, // 'x' 212 | { 726, 7, 10, 9, 0, -7 }, // 'y' 213 | { 735, 7, 7, 8, 0, -7 }, // 'z' 214 | { 742, 5, 13, 6, 0, -10 }, // '{' 215 | { 751, 2, 13, 5, 1, -10 }, // '|' 216 | { 755, 5, 13, 6, 1, -10 } // '}' 217 | }; 218 | const GFXfont ArialRoundedMTBold_14 PROGMEM = { 219 | (uint8_t *)ArialRoundedMTBold_14Bitmaps,(GFXglyph *)ArialRoundedMTBold_14Glyphs,0x20, 0x7E, 17}; 220 | 221 | -------------------------------------------------------------------------------- /DSEG7ClassicBold_44.h: -------------------------------------------------------------------------------- 1 | // Converted from DSEG7Classic-Bold.ttf Ver 0.30 2 | // [Copyrights] Keshikan http://www.keshikan.net/fonts-e.html 3 | 4 | const uint8_t DSEG7ClassicBold_44Bitmaps[] PROGMEM = { 5 | 0x1F, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0x17, 0xFF, 0xFF, 0xF5, 0xDF, 6 | 0xFF, 0xFF, 0x7F, 0x7F, 0xFF, 0xF7, 0xFD, 0xFF, 0xFF, 0x7F, 0xE0, 0x00, 7 | 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, 8 | 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 9 | 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 10 | 0x01, 0xFF, 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 11 | 0xFF, 0x80, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x01, 0xE0, 12 | 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xFE, 0x00, 13 | 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x00, 0x00, 14 | 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 15 | 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0x80, 16 | 0x00, 0x1F, 0xFC, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 17 | 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xDF, 0xFF, 0xF7, 0xFD, 0xFF, 0xFF, 0xDF, 18 | 0xDF, 0xFF, 0xFF, 0x75, 0xFF, 0xFF, 0xFD, 0x1F, 0xFF, 0xFF, 0xF0, 0x7F, 19 | 0xFF, 0xFF, 0x00, 0x08, 0x73, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 20 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x3C, 0x03, 0xDF, 0xFF, 0xFF, 0xFF, 21 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x3C, 0x70, 0x80, 22 | 0x1F, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xF4, 0x1F, 23 | 0xFF, 0xFF, 0x70, 0x7F, 0xFF, 0xF7, 0x81, 0xFF, 0xFF, 0x7C, 0x00, 0x00, 24 | 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 25 | 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 26 | 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 27 | 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 28 | 0xF0, 0x00, 0x00, 0x1F, 0x83, 0xFF, 0xFF, 0x7C, 0x3F, 0xFF, 0xFD, 0xE3, 29 | 0xFF, 0xFF, 0xF0, 0xEF, 0xFF, 0xFF, 0x07, 0xBF, 0xFF, 0xF0, 0x3E, 0x00, 30 | 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 31 | 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 32 | 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0F, 0x80, 33 | 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 34 | 0x00, 0xF8, 0x00, 0x00, 0x07, 0xDF, 0xFF, 0xF0, 0x3D, 0xFF, 0xFF, 0xC1, 35 | 0xDF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF0, 0x7F, 36 | 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 37 | 0xFD, 0x1F, 0xFF, 0xFF, 0x71, 0xFF, 0xFF, 0xDE, 0x1F, 0xFF, 0xF7, 0xC0, 38 | 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 39 | 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x7E, 0x00, 40 | 0x00, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 41 | 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 42 | 0x00, 0x7E, 0x3F, 0xFF, 0xF7, 0xCF, 0xFF, 0xFF, 0x7B, 0xFF, 0xFF, 0xF0, 43 | 0x3F, 0xFF, 0xFD, 0xE3, 0xFF, 0xFF, 0x7C, 0x00, 0x00, 0x1F, 0x80, 0x00, 44 | 0x03, 0xF0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 45 | 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 46 | 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, 0xC0, 47 | 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xE1, 0xFF, 0xFF, 48 | 0x7C, 0x7F, 0xFF, 0xF7, 0x9F, 0xFF, 0xFF, 0x77, 0xFF, 0xFF, 0xF5, 0xFF, 49 | 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xC0, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 50 | 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x1F, 51 | 0xFC, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 52 | 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 53 | 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x07, 54 | 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, 0xFE, 55 | 0x00, 0x00, 0x7F, 0xEF, 0xFF, 0xFD, 0xFE, 0xFF, 0xFF, 0xF7, 0x8F, 0xFF, 56 | 0xFF, 0xC0, 0x3F, 0xFF, 0xFD, 0xE0, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x01, 57 | 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, 58 | 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 59 | 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 60 | 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 61 | 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x78, 0x00, 62 | 0x00, 0x01, 0xC0, 0x00, 0x00, 0x04, 0x1F, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 63 | 0xFF, 0x17, 0xFF, 0xFF, 0xF1, 0xDF, 0xFF, 0xFF, 0x0F, 0x7F, 0xFF, 0xF0, 64 | 0x7D, 0xFF, 0xFF, 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xF8, 65 | 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF0, 0x00, 66 | 0x00, 0x0F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 67 | 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3E, 68 | 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x7B, 0xFF, 69 | 0xFF, 0x03, 0xBF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 70 | 0x78, 0x3F, 0xFF, 0xF7, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, 71 | 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 72 | 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 73 | 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 74 | 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x1F, 75 | 0xFF, 0xF7, 0xC1, 0xFF, 0xFF, 0xDE, 0x1F, 0xFF, 0xFF, 0x71, 0xFF, 0xFF, 76 | 0xFD, 0x1F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF, 77 | 0xC1, 0xFF, 0xFF, 0xFF, 0x17, 0xFF, 0xFF, 0xF1, 0xDF, 0xFF, 0xFF, 0x0F, 78 | 0x7F, 0xFF, 0xF0, 0x7D, 0xFF, 0xFF, 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x00, 79 | 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 80 | 0x01, 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 81 | 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 82 | 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, 83 | 0x00, 0x7B, 0xFF, 0xFF, 0x03, 0xBF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xF0, 84 | 0xEF, 0xFF, 0xFF, 0x7F, 0xBF, 0xFF, 0xF7, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 85 | 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0xFF, 0xE0, 0x00, 86 | 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, 87 | 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 88 | 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 89 | 0x01, 0xFF, 0xDF, 0xFF, 0xF7, 0xFD, 0xFF, 0xFF, 0xDF, 0xDF, 0xFF, 0xFF, 90 | 0x75, 0xFF, 0xFF, 0xFD, 0x1F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x00, 91 | 0x1F, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0x17, 0xFF, 0xFF, 0xF5, 0xDF, 92 | 0xFF, 0xFF, 0x7F, 0x7F, 0xFF, 0xF7, 0xFD, 0xFF, 0xFF, 0x7F, 0xE0, 0x00, 93 | 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, 94 | 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 95 | 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 96 | 0x01, 0xFF, 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 97 | 0xFF, 0x80, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x01, 0xE0, 98 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x07, 0xC0, 0x00, 99 | 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 100 | 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 101 | 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 102 | 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 103 | 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x1E, 104 | 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x01, 0x00, 0x1F, 0xFF, 0xFF, 0xC1, 105 | 0xFF, 0xFF, 0xFF, 0x17, 0xFF, 0xFF, 0xF5, 0xDF, 0xFF, 0xFF, 0x7F, 0x7F, 106 | 0xFF, 0xF7, 0xFD, 0xFF, 0xFF, 0x7F, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 107 | 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 108 | 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0xFF, 0xE0, 109 | 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC0, 0x00, 110 | 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 111 | 0xFB, 0xFF, 0xFF, 0x7F, 0xBF, 0xFF, 0xFD, 0xE3, 0xFF, 0xFF, 0xF0, 0xEF, 112 | 0xFF, 0xFF, 0x7F, 0xBF, 0xFF, 0xF7, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 113 | 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x07, 114 | 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, 0xFE, 115 | 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x00, 116 | 0x00, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 117 | 0xFF, 0xDF, 0xFF, 0xF7, 0xFD, 0xFF, 0xFF, 0xDF, 0xDF, 0xFF, 0xFF, 0x75, 118 | 0xFF, 0xFF, 0xFD, 0x1F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x00, 0x1F, 119 | 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0x17, 0xFF, 0xFF, 0xF5, 0xDF, 0xFF, 120 | 0xFF, 0x7F, 0x7F, 0xFF, 0xF7, 0xFD, 0xFF, 0xFF, 0x7F, 0xE0, 0x00, 0x07, 121 | 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, 0xFE, 122 | 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x00, 123 | 0x00, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 124 | 0xFF, 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 125 | 0x80, 0x00, 0x1F, 0xFB, 0xFF, 0xFF, 0x7F, 0xBF, 0xFF, 0xFD, 0xE3, 0xFF, 126 | 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x78, 0x3F, 0xFF, 0xF7, 0xC0, 0x00, 0x00, 127 | 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 128 | 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, 129 | 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 130 | 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, 131 | 0x00, 0x00, 0x01, 0xF8, 0x1F, 0xFF, 0xF7, 0xC1, 0xFF, 0xFF, 0xDE, 0x1F, 132 | 0xFF, 0xFF, 0x71, 0xFF, 0xFF, 0xFD, 0x1F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 133 | 0xFF, 0x00, 0x7B, 0xEF, 0xFE, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134 | 0x00, 0x00, 0x00, 0x00, 0x1C, 0xFB, 0xFF, 0xFE, 0x30 }; 135 | 136 | const GFXglyph DSEG7ClassicBold_44Glyphs[] PROGMEM = { 137 | // bitmapOffset, width, height, xAdvance, xOffset, yOffset 138 | { 0, 29, 47, 38, 5, -46 }, // 0x30 '0' 139 | { 171, 6, 43, 38, 28, -44 }, // 0x31 '1' 140 | { 204, 29, 47, 38, 5, -46 }, // 0x32 '2' 141 | { 375, 27, 47, 38, 7, -46 }, // 0x33 '3' 142 | { 534, 29, 43, 38, 5, -44 }, // 0x34 '4' 143 | { 690, 29, 47, 38, 5, -46 }, // 0x35 '5' 144 | { 861, 29, 47, 38, 5, -46 }, // 0x36 '6' 145 | { 1032, 29, 45, 38, 5, -46 }, // 0x37 '7' 146 | { 1196, 29, 47, 38, 5, -46 }, // 0x38 '8' 147 | { 1367, 29, 47, 38, 5, -46 }, // 0x39 '9' 148 | { 1538, 6, 25, 9, 2, -34 } }; // 0x3A ':' 149 | 150 | const GFXfont DSEG7ClassicBold_44 PROGMEM = { 151 | (uint8_t *)DSEG7ClassicBold_44Bitmaps, 152 | (GFXglyph *)DSEG7ClassicBold_44Glyphs, 153 | 0x30, 0x3A, 51 }; 154 | 155 | // Approx. 1641 bytes 156 | -------------------------------------------------------------------------------- /GfxUi.cpp: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | Copyright (c) 2015 by Daniel Eichhorn 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | The above copyright notice and this permission notice shall be included in all 10 | copies or substantial portions of the Software. 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 16 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 17 | SOFTWARE. 18 | See more at http://blog.squix.ch 19 | */ 20 | 21 | #include "GfxUi.h" 22 | 23 | GfxUi::GfxUi(Adafruit_ILI9341 *tft) { 24 | _tft = tft; 25 | } 26 | 27 | void GfxUi::drawString(int x, int y, char *text) { 28 | int16_t x1, y1; 29 | uint16_t w, h; 30 | _tft->setTextWrap(false); 31 | _tft->getTextBounds(text, 0, 0, &x1, &y1, &w, &h); 32 | switch (_alignment) { 33 | case LEFT: 34 | x1 = x; 35 | break; 36 | case CENTER: 37 | x1 = x - w / 2; 38 | break; 39 | case RIGHT: 40 | x1 = x - w; 41 | break; 42 | } 43 | if (_textColor != _backgroundColor) { 44 | // _tft->fillRect(x1, y - h -1, w + 1, h + 1, _backgroundColor); 45 | _tft->fillRect(x1, y-h, w+2, h+4, _backgroundColor); // Refinement to prevent text artifacts 46 | 47 | } 48 | _tft->setCursor(x1, y); 49 | _tft->print(text); 50 | } 51 | 52 | void GfxUi::drawString(int x, int y, String text) { 53 | char buf[text.length()+2]; 54 | text.toCharArray(buf, text.length() + 1); 55 | drawString(x, y, buf); 56 | } 57 | 58 | void GfxUi::setTextColor(uint16_t c) { 59 | setTextColor(c, c); 60 | } 61 | void GfxUi::setTextColor(uint16_t c, uint16_t bg) { 62 | _textColor = c; 63 | _backgroundColor = bg; 64 | _tft->setTextColor(_textColor, _backgroundColor); 65 | } 66 | 67 | void GfxUi::setTextAlignment(TextAlignment alignment) { 68 | _alignment = alignment; 69 | } 70 | 71 | void GfxUi::drawProgressBar(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint8_t percentage, uint16_t frameColor, uint16_t barColor) { 72 | if (percentage == 0) { 73 | _tft->fillRoundRect(x0, y0, w, h, 3, _backgroundColor); 74 | } 75 | uint8_t margin = 2; 76 | uint16_t barHeight = h - 2 * margin; 77 | uint16_t barWidth = w - 2 * margin; 78 | _tft->drawRoundRect(x0, y0, w, h, 3, frameColor); 79 | _tft->fillRect(x0 + margin, y0 + margin, barWidth * percentage / 100.0, barHeight, barColor); 80 | } 81 | 82 | 83 | // Code mostly from 84 | // https://github.com/adafruit/Adafruit_ILI9341/blob/master/examples/spitftbitmap/spitftbitmap.ino 85 | void GfxUi::drawBmp(String filename, uint8_t x, uint16_t y) { 86 | 87 | File bmpFile; 88 | int bmpWidth, bmpHeight; // W+H in pixels 89 | uint8_t bmpDepth; // Bit depth (currently must be 24) 90 | uint32_t bmpImageoffset; // Start of image data in file 91 | uint32_t rowSize; // Not always = bmpWidth; may have padding 92 | uint8_t sdbuffer[3*BUFFPIXEL]; // pixel buffer (R+G+B per pixel) 93 | uint8_t buffidx = sizeof(sdbuffer); // Current position in sdbuffer 94 | boolean goodBmp = false; // Set to true on valid header parse 95 | boolean flip = true; // BMP is stored bottom-to-top 96 | int w, h, row, col; 97 | uint8_t r, g, b; 98 | uint32_t pos = 0, startTime = millis(); 99 | 100 | if((x >= _tft->width()) || (y >= _tft->height())) return; 101 | 102 | Serial.println(); 103 | Serial.print(F("Loading image '")); 104 | Serial.print(filename); 105 | Serial.println('\''); 106 | 107 | // Open requested file on SD card 108 | if ((bmpFile = SPIFFS.open(filename, "r")) == NULL) { 109 | Serial.print(F("File not found")); 110 | return; 111 | } 112 | 113 | // Parse BMP header 114 | if(read16(bmpFile) == 0x4D42) { // BMP signature 115 | Serial.print(F("File size: ")); Serial.println(read32(bmpFile)); 116 | (void)read32(bmpFile); // Read & ignore creator bytes 117 | bmpImageoffset = read32(bmpFile); // Start of image data 118 | Serial.print(F("Image Offset: ")); Serial.println(bmpImageoffset, DEC); 119 | // Read DIB header 120 | Serial.print(F("Header size: ")); Serial.println(read32(bmpFile)); 121 | bmpWidth = read32(bmpFile); 122 | bmpHeight = read32(bmpFile); 123 | if(read16(bmpFile) == 1) { // # planes -- must be '1' 124 | bmpDepth = read16(bmpFile); // bits per pixel 125 | Serial.print(F("Bit Depth: ")); Serial.println(bmpDepth); 126 | if((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed 127 | 128 | goodBmp = true; // Supported BMP format -- proceed! 129 | Serial.print(F("Image size: ")); 130 | Serial.print(bmpWidth); 131 | Serial.print('x'); 132 | Serial.println(bmpHeight); 133 | 134 | // BMP rows are padded (if needed) to 4-byte boundary 135 | rowSize = (bmpWidth * 3 + 3) & ~3; 136 | 137 | // If bmpHeight is negative, image is in top-down order. 138 | // This is not canon but has been observed in the wild. 139 | if(bmpHeight < 0) { 140 | bmpHeight = -bmpHeight; 141 | flip = false; 142 | } 143 | 144 | // Crop area to be loaded 145 | w = bmpWidth; 146 | h = bmpHeight; 147 | if((x+w-1) >= _tft->width()) w = _tft->width() - x; 148 | if((y+h-1) >= _tft->height()) h = _tft->height() - y; 149 | 150 | // Set TFT address window to clipped image bounds 151 | _tft->setAddrWindow(x, y, x+w-1, y+h-1); 152 | 153 | for (row=0; row= sizeof(sdbuffer)) { // Indeed 173 | bmpFile.read(sdbuffer, sizeof(sdbuffer)); 174 | buffidx = 0; // Set index to beginning 175 | } 176 | 177 | // Convert pixel from BMP to TFT format, push to display 178 | b = sdbuffer[buffidx++]; 179 | g = sdbuffer[buffidx++]; 180 | r = sdbuffer[buffidx++]; 181 | _tft->pushColor(_tft->color565(r,g,b)); 182 | yield(); 183 | } // end pixel 184 | } // end scanline 185 | Serial.print(F("Loaded in ")); 186 | Serial.print(millis() - startTime); 187 | Serial.println(" ms"); 188 | } // end goodBmp 189 | } 190 | } 191 | 192 | bmpFile.close(); 193 | if(!goodBmp) Serial.println(F("BMP format not recognized.")); 194 | } 195 | 196 | // These read 16- and 32-bit types from the SD card file. 197 | // BMP data is stored little-endian, Arduino is little-endian too. 198 | // May need to reverse subscript order if porting elsewhere. 199 | 200 | uint16_t GfxUi::read16(File &f) { 201 | uint16_t result; 202 | ((uint8_t *)&result)[0] = f.read(); // LSB 203 | ((uint8_t *)&result)[1] = f.read(); // MSB 204 | return result; 205 | } 206 | 207 | uint32_t GfxUi::read32(File &f) { 208 | uint32_t result; 209 | ((uint8_t *)&result)[0] = f.read(); // LSB 210 | ((uint8_t *)&result)[1] = f.read(); 211 | ((uint8_t *)&result)[2] = f.read(); 212 | ((uint8_t *)&result)[3] = f.read(); // MSB 213 | return result; 214 | } 215 | 216 | -------------------------------------------------------------------------------- /GfxUi.h: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | Copyright (c) 2015 by Daniel Eichhorn 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | The above copyright notice and this permission notice shall be included in all 10 | copies or substantial portions of the Software. 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 16 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 17 | SOFTWARE. 18 | See more at http://blog.squix.ch 19 | */ 20 | 21 | #include 22 | #include 23 | 24 | #ifndef _GFX_UI_H 25 | #define _GFX_UI_H 26 | 27 | 28 | #define BUFFPIXEL 20 29 | 30 | enum TextAlignment { 31 | LEFT, CENTER, RIGHT 32 | }; 33 | 34 | class GfxUi { 35 | public: 36 | GfxUi(Adafruit_ILI9341 * tft); 37 | void drawString(int x, int y, char *text); 38 | void drawString(int x, int y, String text); 39 | void setTextAlignment(TextAlignment alignment); 40 | void setTextColor(uint16_t c); 41 | void setTextColor(uint16_t c, uint16_t bg); 42 | void drawBmp(String filename, uint8_t x, uint16_t y); 43 | void drawProgressBar(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t percentage, uint16_t frameColor, uint16_t barColor); 44 | 45 | private: 46 | Adafruit_ILI9341 * _tft; 47 | TextAlignment _alignment = LEFT; 48 | uint16_t _textColor; 49 | uint16_t _backgroundColor; 50 | uint16_t read16(File &f); 51 | uint32_t read32(File &f); 52 | 53 | }; 54 | 55 | #endif 56 | 57 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # esp8266-weather-station-color-DST 2 | 3 | Daylight Saving Time and other customizations of Squix78 ESP8266 Weather Station in Color. 4 | Uses ILI9341 TFT 240x320 display with SPI interface 5 | 6 | | Zurich Summer Time | Boston Daylight Saving Time | Sydney Daylight Saving Time | 7 | |:------:|:------:|:------:| 8 | | ![Zurich CEST](https://github.com/neptune2/esp8266-weather-station-color-DST/raw/master/resources/Zurich_CEST.jpg) | ![Boston](https://github.com/neptune2/esp8266-weather-station-color-DST/raw/master/resources/Boston_EDT.jpg) | ![Sydney AEDT](https://github.com/neptune2/esp8266-weather-station-color-DST/raw/master/resources/Sydney_AEDT.jpg) | 9 | 10 | | Zurich Standard time | Boston Standard Time | Sydney Standard Time | 11 | |:------:|:------:|:------:| 12 | | ![Zurich CET](https://github.com/neptune2/esp8266-weather-station-color-DST/raw/master/resources/Zurich_CET.jpg) | ![Boston EST](https://github.com/neptune2/esp8266-weather-station-color-DST/raw/master/resources/Boston_EST.jpg) | ![Sydney AEST](https://github.com/neptune2/esp8266-weather-station-color-DST/raw/master/resources/Sydney_AEST.jpg) | 13 | 14 | | 7-Seg silhoutte | 15 | |:---------------:| 16 | | ![silhoutte](https://github.com/neptune2/esp8266-weather-station-color-DST/raw/master/resources/7seg_silhoutte.jpg) | 17 | 18 | ## Specific customizations include: 19 | 20 | * Replaced TimeClient with built-in ESP8266 NTP client and timekeeping (lwip/sntp Espressif sdk library) 21 | * Selectable NTP servers in settings.h 22 | * Added automatic Daylight Saving Time adjust using simpleDSTadjust library 23 | * https://github.com/neptune2/simpleDSTadjust 24 | * DST rules and timezone settings customizable in settings.h 25 | * See https://www.timeanddate.com/time/change/ for DST rules 26 | * Special version of ArialRoundedMtBold_36 with Degree symbol added 27 | * Used degree symbol in temperature display 28 | * Changed Clock to retro 7-segment look with optional silhoutte background 29 | * used DSEG7ClassicBold_44 font (from http://www.keshikan.net/fonts-e.html) 30 | * Added Blinking colon to clock. 1 sec on , 1 sec off 31 | * Added choice of 24 hour or 12 hour clock 32 | * Slight adjustment to various fields (to fit 7-seg clock) 33 | * various small fixes and bug workarounds 34 | 35 | 36 | ## Hardware Requirements 37 | 38 | This code is made for an 240x320 65K ILI9341 display with code running on an ESP8266. 39 | You can buy such a display here: 40 | [http://www.banggood.com/2_2-Inch-Serial-TFT-SPI-Screen-p-912854.html](http://www.banggood.com/2_2-Inch-Serial-TFT-SPI-LCD-Screen-Module-HD-240-x-320-5110-Compatible-p-912854.html?p=6R31122484684201508S) 41 | 42 | ## Software Requirements/ Libraries 43 | 44 | * Arduino IDE with ESP8266 platform installed 45 | * [Weather Station Library](https://github.com/squix78/esp8266-weather-station) or through Library Manager 46 | * [Adafruit ILI9341](https://github.com/adafruit/Adafruit_ILI9341) or through Library Manager 47 | * [Adafruit GFX](https://github.com/adafruit/Adafruit-GFX-Library) or through Library Manager 48 | * [WifiManager](https://github.com/tzapu/WiFiManager) 49 | 50 | ### Additional required library for automatic Daylight Saving Time adjust 51 | * [simpleDSTadjust](https://github.com/neptune2/simpleDSTadjust) 52 | 53 | You also need to get an API key for the Wunderground data: https://www.wunderground.com/ 54 | 55 | ## Wemos D1R2 Wiring 56 | ![Wemos](https://github.com/neptune2/esp8266-weather-station-color-DST/raw/master/resources/wemos_color_weatherstation.jpg) 57 | 58 | See settings.h for pin configurations 59 | 60 | | ILI9341 | Wemos D1R2 | 61 | | ------------- |:-------------:| 62 | | MISO | - | 63 | | LED | 3V3 | 64 | | SCK | SCLK/D5 | 65 | | MOSI | MOSI/D7 | 66 | | DC/RS | D3 | 67 | | RESET | RST | 68 | | CS | D2 | 69 | | GND | GND | 70 | | VCC | 3V3 | 71 | 72 | -------------------------------------------------------------------------------- /WebResource.cpp: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | Copyright (c) 2015 by Daniel Eichhorn 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | The above copyright notice and this permission notice shall be included in all 10 | copies or substantial portions of the Software. 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 16 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 17 | SOFTWARE. 18 | See more at http://blog.squix.ch 19 | */ 20 | 21 | #include "WebResource.h" 22 | 23 | WebResource::WebResource(){ 24 | 25 | } 26 | 27 | void WebResource::downloadFile(String url, String filename) { 28 | downloadFile(url, filename, nullptr); 29 | } 30 | 31 | void WebResource::downloadFile(String url, String filename, ProgressCallback progressCallback) { 32 | 33 | 34 | if (SPIFFS.exists(filename) == true) { 35 | // Serial.println("File already exists. Skipping"); 36 | return; 37 | } 38 | 39 | Serial.println("Downloading " + url + " and saving as " + filename); 40 | 41 | // wait for WiFi connection 42 | if((_wifiMulti.run() == WL_CONNECTED)) { 43 | HTTPClient http; 44 | 45 | Serial.print("[HTTP] begin...\n"); 46 | 47 | // configure server and url 48 | http.begin(url); 49 | 50 | Serial.print("[HTTP] GET...\n"); 51 | // start connection and send HTTP header 52 | int httpCode = http.GET(); 53 | if(httpCode > 0) { 54 | //SPIFFS.remove(filename); 55 | File f = SPIFFS.open(filename, "w+"); 56 | if (!f) { 57 | Serial.println("file open failed"); 58 | return; 59 | } 60 | // HTTP header has been send and Server response header has been handled 61 | Serial.printf("[HTTP] GET... code: %d\n", httpCode); 62 | 63 | // file found at server 64 | if(httpCode == HTTP_CODE_OK) { 65 | 66 | // get lenght of document (is -1 when Server sends no Content-Length header) 67 | int total = http.getSize(); 68 | int len = total; 69 | progressCallback(filename, 0,total); 70 | // create buffer for read 71 | uint8_t buff[128] = { 0 }; 72 | 73 | // get tcp stream 74 | WiFiClient * stream = http.getStreamPtr(); 75 | 76 | // read all data from server 77 | while(http.connected() && (len > 0 || len == -1)) { 78 | // get available data size 79 | size_t size = stream->available(); 80 | 81 | if(size) { 82 | // read up to 128 byte 83 | int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size)); 84 | 85 | // write it to Serial 86 | f.write(buff, c); 87 | 88 | if(len > 0) { 89 | len -= c; 90 | } 91 | progressCallback(filename, total - len,total); 92 | } 93 | delay(1); 94 | } 95 | 96 | Serial.println(); 97 | Serial.print("[HTTP] connection closed or file end.\n"); 98 | 99 | } 100 | f.close(); 101 | } else { 102 | Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); 103 | } 104 | 105 | http.end(); 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /WebResource.h: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | Copyright (c) 2015 by Daniel Eichhorn 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | The above copyright notice and this permission notice shall be included in all 10 | copies or substantial portions of the Software. 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 16 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 17 | SOFTWARE. 18 | See more at http://blog.squix.ch 19 | */ 20 | 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | 27 | #ifndef _WEBRESOURCE_H 28 | #define _WEBRESOURCE_H 29 | 30 | typedef void (*ProgressCallback)(String fileName, int16_t bytesDownloaded, int16_t bytesTotal); 31 | 32 | class WebResource { 33 | public: 34 | WebResource(); 35 | void downloadFile(String url, String filename, ProgressCallback progressCallback); 36 | void downloadFile(String url, String filename); 37 | 38 | 39 | private: 40 | ESP8266WiFiMulti _wifiMulti; 41 | 42 | }; 43 | 44 | #endif 45 | 46 | -------------------------------------------------------------------------------- /alt_icons/mini/chanceflurries.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/chanceflurries.bmp -------------------------------------------------------------------------------- /alt_icons/mini/chancerain.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/chancerain.bmp -------------------------------------------------------------------------------- /alt_icons/mini/chancesleet.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/chancesleet.bmp -------------------------------------------------------------------------------- /alt_icons/mini/chancesnow.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/chancesnow.bmp -------------------------------------------------------------------------------- /alt_icons/mini/chancetstorms.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/chancetstorms.bmp -------------------------------------------------------------------------------- /alt_icons/mini/clear.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/clear.bmp -------------------------------------------------------------------------------- /alt_icons/mini/cloudy.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/cloudy.bmp -------------------------------------------------------------------------------- /alt_icons/mini/flurries.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/flurries.bmp -------------------------------------------------------------------------------- /alt_icons/mini/fog.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/fog.bmp -------------------------------------------------------------------------------- /alt_icons/mini/hazy.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/hazy.bmp -------------------------------------------------------------------------------- /alt_icons/mini/mostlycloudy.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/mostlycloudy.bmp -------------------------------------------------------------------------------- /alt_icons/mini/mostlysunny.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/mostlysunny.bmp -------------------------------------------------------------------------------- /alt_icons/mini/partlycloudy.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/partlycloudy.bmp -------------------------------------------------------------------------------- /alt_icons/mini/partlysunny.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/partlysunny.bmp -------------------------------------------------------------------------------- /alt_icons/mini/rain.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/rain.bmp -------------------------------------------------------------------------------- /alt_icons/mini/sleet.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/sleet.bmp -------------------------------------------------------------------------------- /alt_icons/mini/snow.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/snow.bmp -------------------------------------------------------------------------------- /alt_icons/mini/sunny.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/sunny.bmp -------------------------------------------------------------------------------- /alt_icons/mini/tstorms.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/tstorms.bmp -------------------------------------------------------------------------------- /alt_icons/mini/unknown.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/mini/unknown.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon0.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon0.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon1.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon10.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon10.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon11.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon11.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon12.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon12.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon13.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon13.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon14.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon14.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon15.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon15.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon16.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon16.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon17.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon17.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon18.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon18.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon19.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon19.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon2.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon20.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon20.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon21.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon21.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon22.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon22.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon23.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon23.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon3.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon3.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon4.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon4.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon5.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon5.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon6.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon6.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon7.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon7.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon8.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon8.bmp -------------------------------------------------------------------------------- /alt_icons/moonphase_L/moon9.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/moonphase_L/moon9.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/chanceflurries.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/chanceflurries.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/chancerain.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/chancerain.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/chancesleet.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/chancesleet.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/chancesnow.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/chancesnow.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/chancetstorms.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/chancetstorms.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/clear.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/clear.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/cloudy.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/cloudy.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/flurries.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/flurries.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/fog.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/fog.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/hazy.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/hazy.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/mostlycloudy.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/mostlycloudy.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/mostlysunny.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/mostlysunny.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/partlycloudy.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/partlycloudy.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/partlysunny.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/partlysunny.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/rain.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/rain.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/sleet.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/sleet.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/snow.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/snow.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/sunny.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/sunny.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/tstorms.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/tstorms.bmp -------------------------------------------------------------------------------- /alt_icons/wunderground/unknown.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/alt_icons/wunderground/unknown.bmp -------------------------------------------------------------------------------- /esp8266-weather-station-color-DST.ino: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | Copyright (c) 2015 by Daniel Eichhorn 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | The above copyright notice and this permission notice shall be included in all 10 | copies or substantial portions of the Software. 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 16 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 17 | SOFTWARE. 18 | See more at http://blog.squix.ch 19 | */ 20 | 21 | /* Customizations by Neptune (https://github.com/neptune2) 22 | * 23 | * Specific customizations include: 24 | * - Changed TimeClient to built-in ESP8266 NTP client 25 | * Selectable NTP servers in settings.h 26 | * - Added auto Daylight Saving Time adjust using simpleDSTadjust library 27 | * https://github.com/neptune2/simpleDSTadjust 28 | * DST rules and timezone settings customizable in settings.h 29 | * - Special version of ArialRoundedMtBold_36 with Degree symbol 30 | * added degree symbol to temperature display 31 | * - Changed Clock to retro 7-segment look with optional silhoutte background 32 | * used DSEG7ClassicBold_44 font (from http://www.keshikan.net/fonts-e.html) 33 | * - Added Blinking colon to clock - 1 sec on , 1 sec off 34 | * - Added choice of 24 hour or 12 hour clock 35 | * - Slight adjustment to various fields (to fit 7-seg clock) 36 | * - various small fixes 37 | */ 38 | 39 | #include 40 | 41 | #include // Core graphics library 42 | #include // Hardware-specific library 43 | #include 44 | // Additional UI functions 45 | #include "GfxUi.h" 46 | 47 | // Fonts created by http://oleddisplay.squix.ch/ 48 | #include "ArialRoundedMTBold_14.h" 49 | 50 | // Custom Fonts created/modified by Neptune 51 | #include "ArialRoundedMTBold_36.h" 52 | #include "DSEG7ClassicBold_44.h" 53 | 54 | // Download helper 55 | #include "WebResource.h" 56 | 57 | #include 58 | #include 59 | #include 60 | #include 61 | #include 62 | 63 | // Helps with connecting to internet 64 | #include 65 | 66 | // check settings.h for adapting to your needs 67 | #include "settings.h" 68 | #include 69 | #include 70 | #include 71 | #include 72 | #include 73 | 74 | // HOSTNAME for OTA update 75 | #define HOSTNAME "ESP8266-OTA-" 76 | 77 | /***************************** 78 | * Important: see settings.h to configure your settings!!! 79 | * ***************************/ 80 | 81 | Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); 82 | GfxUi ui = GfxUi(&tft); 83 | 84 | WebResource webResource; 85 | 86 | // Setup simpleDSTadjust Library rules 87 | simpleDSTadjust dstAdjusted(StartRule, EndRule); 88 | 89 | // Set to false, if you prefere imperial/inches, Fahrenheit 90 | WundergroundClient wunderground(IS_METRIC); 91 | 92 | Ticker ticker1; 93 | 94 | //declaring prototypes 95 | void configModeCallback (WiFiManager *myWiFiManager); 96 | void downloadCallback(String filename, int16_t bytesDownloaded, int16_t bytesTotal); 97 | ProgressCallback _downloadCallback = downloadCallback; 98 | void downloadResources(); 99 | void updateData(); 100 | void drawProgress(uint8_t percentage, String text); 101 | void drawTime(); 102 | void drawCurrentWeather(); 103 | void drawForecast(); 104 | void drawForecastDetail(uint16_t x, uint16_t y, uint8_t dayIndex); 105 | String getMeteoconIcon(String iconText); 106 | void drawAstronomy(); 107 | void drawSeparator(uint16_t y); 108 | 109 | long lastDownloadUpdate = millis(); 110 | int colon_disabled = 1; 111 | 112 | void setup() { 113 | Serial.begin(115200); 114 | tft.begin(); 115 | // Uncomment to rotate screen 180deg 116 | tft.setRotation(2); 117 | tft.fillScreen(ILI9341_BLACK); 118 | tft.setFont(&ArialRoundedMTBold_14); 119 | ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK); 120 | ui.setTextAlignment(CENTER); 121 | drawProgress(0, "Connecting to WiFi..."); 122 | 123 | //WiFiManager 124 | //Local intialization. Once its business is done, there is no need to keep it around 125 | WiFiManager wifiManager; 126 | // Uncomment for testing wifi manager 127 | //wifiManager.resetSettings(); 128 | wifiManager.setAPCallback(configModeCallback); 129 | 130 | //or use this for auto generated name ESP + ChipID 131 | wifiManager.autoConnect(); 132 | 133 | //Manual Wifi 134 | //WiFi.begin(WIFI_SSID, WIFI_PWD); 135 | 136 | // OTA Setup 137 | String hostname(HOSTNAME); 138 | hostname += String(ESP.getChipId(), HEX); 139 | WiFi.hostname(hostname); 140 | ArduinoOTA.setHostname((const char *)hostname.c_str()); 141 | ArduinoOTA.begin(); 142 | SPIFFS.begin(); 143 | 144 | drawProgress(10, "Formatting SPIFFS..."); 145 | // Uncomment if you want to update all internet resources 146 | //SPIFFS.format(); 147 | 148 | // download images from the net. If images already exist don't download 149 | downloadResources(); 150 | 151 | // load the weather information 152 | updateData(); 153 | ticker1.attach(1.0, secTicker); // Run a second interval Ticker 154 | } 155 | 156 | long lastDrew = 0; 157 | void loop() { 158 | // Handle OTA update requests 159 | ArduinoOTA.handle(); 160 | 161 | // Check if we should update the clock 162 | if (millis() - lastDrew > 5000 && time(NULL)%60 == 0) { 163 | drawTime(); 164 | lastDrew = millis(); 165 | } 166 | 167 | // Check if we should update weather information 168 | if (millis() - lastDownloadUpdate > 1000 * UPDATE_INTERVAL_SECS) { 169 | tft.fillScreen(ILI9341_BLACK); 170 | updateData(); 171 | lastDownloadUpdate = millis(); 172 | } 173 | } 174 | 175 | // Called if WiFi has not been configured yet 176 | void configModeCallback (WiFiManager *myWiFiManager) { 177 | ui.setTextAlignment(CENTER); 178 | tft.setFont(&ArialRoundedMTBold_14); 179 | tft.setTextColor(ILI9341_ORANGE); 180 | ui.drawString(120, 28, "Wifi Manager"); 181 | ui.drawString(120, 42, "Please connect to AP"); 182 | tft.setTextColor(ILI9341_WHITE); 183 | ui.drawString(120, 56, myWiFiManager->getConfigPortalSSID()); 184 | tft.setTextColor(ILI9341_ORANGE); 185 | ui.drawString(120, 70, "To setup Wifi Configuration"); 186 | } 187 | 188 | // callback called during download of files. Updates progress bar 189 | void downloadCallback(String filename, int16_t bytesDownloaded, int16_t bytesTotal) { 190 | 191 | // Serial.println(String(bytesDownloaded) + " / " + String(bytesTotal)); // Debug 192 | 193 | int percentage = 100 * bytesDownloaded / bytesTotal; 194 | 195 | if (percentage == 0) { 196 | tft.fillRect(0, 122, 240, 40, ILI9341_BLACK); 197 | ui.drawString(120, 160, filename); 198 | } 199 | 200 | if (percentage % 10 == 0) { 201 | ui.drawProgressBar(10, 165, 240 - 20, 15, percentage, ILI9341_WHITE, ILI9341_BLUE); 202 | } 203 | 204 | } 205 | 206 | // Download the bitmaps 207 | void downloadResources() { 208 | tft.setFont(&ArialRoundedMTBold_14); 209 | for (int i = 0; i < 19; i++) { 210 | webResource.downloadFile("http://www.squix.org/blog/wunderground/" + wundergroundIcons[i] + ".bmp", wundergroundIcons[i] + ".bmp", _downloadCallback); 211 | } 212 | for (int i = 0; i < 19; i++) { 213 | webResource.downloadFile("http://www.squix.org/blog/wunderground/mini/" + wundergroundIcons[i] + ".bmp", "/mini/" + wundergroundIcons[i] + ".bmp", _downloadCallback); 214 | } 215 | for (int i = 0; i < 24; i++) { 216 | webResource.downloadFile("http://www.squix.org/blog/moonphase_L" + String(i) + ".bmp", "/moon" + String(i) + ".bmp", _downloadCallback); 217 | } 218 | 219 | } 220 | 221 | // Update the internet based information and update screen 222 | void updateData() { 223 | colon_disabled = 1; // Turn off the colon 224 | tft.setFont(&ArialRoundedMTBold_14); 225 | drawProgress(20, "Updating time..."); 226 | configTime(UTC_OFFSET * 3600, 0, NTP_SERVERS); 227 | delay(1000); 228 | drawProgress(50, "Updating conditions..."); 229 | wunderground.updateConditions(WUNDERGRROUND_API_KEY, WUNDERGRROUND_LANGUAGE, WUNDERGROUND_COUNTRY, WUNDERGROUND_CITY); 230 | drawProgress(70, "Updating forecasts..."); 231 | wunderground.updateForecast(WUNDERGRROUND_API_KEY, WUNDERGRROUND_LANGUAGE, WUNDERGROUND_COUNTRY, WUNDERGROUND_CITY); 232 | drawProgress(90, "Updating astronomy..."); 233 | wunderground.updateAstronomy(WUNDERGRROUND_API_KEY, WUNDERGRROUND_LANGUAGE, WUNDERGROUND_COUNTRY, WUNDERGROUND_CITY); 234 | drawProgress(100, "Done..."); 235 | delay(1000); 236 | tft.fillScreen(ILI9341_BLACK); 237 | drawCurrentWeather(); 238 | 239 | drawTime(); // Moved after weather to stop weather icon clipping 7-seg time display and separator 240 | drawForecast(); 241 | drawAstronomy(); 242 | } 243 | 244 | // Progress bar helper 245 | void drawProgress(uint8_t percentage, String text) { 246 | ui.setTextAlignment(CENTER); 247 | ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK); 248 | tft.fillRect(0, 140, 240, 45, ILI9341_BLACK); 249 | ui.drawString(120, 160, text); 250 | ui.drawProgressBar(10, 165, 240 - 20, 15, percentage, ILI9341_WHITE, ILI9341_BLUE); 251 | } 252 | 253 | int display=0; 254 | 255 | // Called every second 256 | void secTicker() 257 | { 258 | if(colon_disabled) return; 259 | 260 | display^=1; 261 | tft.setFont(&DSEG7ClassicBold_44); 262 | if(display) 263 | tft.setTextColor(ILI9341_CLOCKGREEN, ILI9341_BLACK); 264 | else 265 | tft.setTextColor(ILI9341_SILHOUTTEGREEN, ILI9341_BLACK); 266 | tft.setCursor(106, 71); 267 | tft.print(":"); 268 | } 269 | 270 | // draws the clock 271 | void drawTime() { 272 | ui.setTextAlignment(CENTER); 273 | ui.setTextColor(ILI9341_WHITE, ILI9341_BLACK); 274 | tft.setFont(&ArialRoundedMTBold_14); 275 | 276 | char *dstAbbrev; 277 | time_t now = dstAdjusted.time(&dstAbbrev); 278 | 279 | struct tm * timeinfo = localtime (&now); 280 | String date = ctime(&now); 281 | date = date.substring(0,11) + String(1900+timeinfo->tm_year); 282 | ui.drawString(120, 16, date); 283 | char time[11]; 284 | 285 | #ifdef STYLE_24HR 286 | int hour = timeinfo->tm_hour; 287 | sprintf(time, "%02d:%02d",hour, timeinfo->tm_min); 288 | #define SILHOUETTE "88:88" 289 | #else 290 | int hour = (timeinfo->tm_hour+11)%12+1; // take care of noon and midnight 291 | sprintf(time, "%d:%02d",hour, timeinfo->tm_min); 292 | #define SILHOUETTE "18:88" 293 | #endif 294 | 295 | tft.setFont(&DSEG7ClassicBold_44); 296 | 297 | #if LED_SILHOUETTE 298 | tft.setCursor(182-(38*4),71); 299 | ui.setTextColor(ILI9341_SILHOUTTEGREEN, ILI9341_BLACK); // Digital silhouette 300 | tft.print(SILHOUETTE); 301 | #else 302 | tft.fillRect(58, 25, 130, 47, ILI9341_BLACK); // Custom erase box to work around Adafruit_GFX getTextBounds() bug 303 | #endif 304 | tft.setCursor(182-(38*(strlen(time)-1)),71); 305 | ui.setTextColor(ILI9341_CLOCKGREEN, ILI9341_BLACK); 306 | tft.print(time); 307 | 308 | colon_disabled = 0; // Start the colon blinking 309 | 310 | tft.setFont(&ArialRoundedMTBold_14); 311 | ui.setTextAlignment(LEFT); 312 | sprintf(time, "%s",dstAbbrev); 313 | tft.fillRect(192, 56-11,45, 11, ILI9341_BLACK); // Workaround background erase bug when timezone changes and abbrev strlen changes 314 | tft.setCursor(192,56); 315 | tft.print(time); 316 | #ifndef STYLE_24HR 317 | sprintf(time, "%s",timeinfo->tm_hour>=12?"pm":"am"); 318 | ui.drawString(192, 69, time); 319 | #endif 320 | drawSeparator(78); 321 | } 322 | 323 | // draws current weather information 324 | void drawCurrentWeather() { 325 | // Weather Icon 326 | String weatherIcon = getMeteoconIcon(wunderground.getTodayIcon()); 327 | ui.drawBmp(weatherIcon + ".bmp", 0, 75); 328 | 329 | // Weather Text 330 | tft.setFont(&ArialRoundedMTBold_14); 331 | ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK); 332 | ui.setTextAlignment(RIGHT); 333 | ui.drawString(228, 100, wunderground.getWeatherText()); 334 | 335 | tft.setFont(&ArialRoundedMTBold_36); 336 | ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK); 337 | ui.setTextAlignment(RIGHT); 338 | String degreeSign = "F"; 339 | if (IS_METRIC) { 340 | degreeSign = "C"; 341 | } 342 | String temp = wunderground.getCurrentTemp() + "\x7F" + degreeSign; // Custom version of ArialRoundedMTBold_36 font with Degree symbol in character 0x7F 343 | ui.drawString(228, 140, temp); 344 | drawSeparator(165); 345 | } 346 | 347 | // draws the three forecast columns 348 | void drawForecast() { 349 | drawForecastDetail(10, 185, 0); 350 | drawForecastDetail(95, 185, 2); 351 | drawForecastDetail(180, 185, 4); 352 | drawSeparator(170 + 65 + 10 + 10); 353 | } 354 | 355 | // helper for the forecast columns 356 | void drawForecastDetail(uint16_t x, uint16_t y, uint8_t dayIndex) { 357 | ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK); 358 | tft.setFont(&ArialRoundedMTBold_14); 359 | ui.setTextAlignment(CENTER); 360 | String day = wunderground.getForecastTitle(dayIndex).substring(0, 3); 361 | day.toUpperCase(); 362 | ui.drawString(x + 25, y, day); 363 | 364 | ui.setTextColor(ILI9341_WHITE, ILI9341_BLACK); 365 | ui.drawString(x + 25, y + 14, wunderground.getForecastLowTemp(dayIndex) + "|" + wunderground.getForecastHighTemp(dayIndex)); 366 | 367 | String weatherIcon = getMeteoconIcon(wunderground.getForecastIcon(dayIndex)); 368 | ui.drawBmp("/mini/" + weatherIcon + ".bmp", x, y + 15); 369 | 370 | } 371 | 372 | // draw moonphase and sunrise/set and moonrise/set 373 | void drawAstronomy() { 374 | int moonAgeImage = 24 * wunderground.getMoonAge().toInt() / 30.0; 375 | ui.drawBmp("/moon" + String(moonAgeImage) + ".bmp", 120 - 30, 255); 376 | 377 | ui.setTextColor(ILI9341_WHITE, ILI9341_BLACK); 378 | tft.setFont(&ArialRoundedMTBold_14); 379 | ui.setTextAlignment(LEFT); 380 | ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK); 381 | ui.drawString(20, 270, "Sun"); 382 | ui.setTextColor(ILI9341_WHITE, ILI9341_BLACK); 383 | ui.drawString(20, 285, wunderground.getSunriseTime()); 384 | ui.drawString(20, 300, wunderground.getSunsetTime()); 385 | 386 | ui.setTextAlignment(RIGHT); 387 | ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK); 388 | ui.drawString(220, 270, "Moon"); 389 | ui.setTextColor(ILI9341_WHITE, ILI9341_BLACK); 390 | ui.drawString(220, 285, wunderground.getMoonriseTime()); 391 | ui.drawString(220, 300, wunderground.getMoonsetTime()); 392 | 393 | } 394 | 395 | // Helper function, should be part of the weather station library and should disappear soon 396 | String getMeteoconIcon(String iconText) { 397 | if (iconText == "F") return "chanceflurries"; 398 | if (iconText == "Q") return "chancerain"; 399 | if (iconText == "W") return "chancesleet"; 400 | if (iconText == "V") return "chancesnow"; 401 | if (iconText == "S") return "chancetstorms"; 402 | if (iconText == "B") return "clear"; 403 | if (iconText == "Y") return "cloudy"; 404 | if (iconText == "F") return "flurries"; 405 | if (iconText == "M") return "fog"; 406 | if (iconText == "E") return "hazy"; 407 | if (iconText == "Y") return "mostlycloudy"; 408 | if (iconText == "H") return "mostlysunny"; 409 | if (iconText == "H") return "partlycloudy"; 410 | if (iconText == "J") return "partlysunny"; 411 | if (iconText == "W") return "sleet"; 412 | if (iconText == "R") return "rain"; 413 | if (iconText == "W") return "snow"; 414 | if (iconText == "B") return "sunny"; 415 | if (iconText == "0") return "tstorms"; 416 | 417 | return "unknown"; 418 | } 419 | 420 | // if you want separators, uncomment the tft-line 421 | void drawSeparator(uint16_t y) { 422 | // tft.drawFastHLine(10, y, 240 - 2 * 10, 0x4228); 423 | } 424 | 425 | -------------------------------------------------------------------------------- /resources/7seg_silhoutte.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/resources/7seg_silhoutte.jpg -------------------------------------------------------------------------------- /resources/Boston_EDT.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/resources/Boston_EDT.jpg -------------------------------------------------------------------------------- /resources/Boston_EST.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/resources/Boston_EST.jpg -------------------------------------------------------------------------------- /resources/Sydney_AEDT.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/resources/Sydney_AEDT.jpg -------------------------------------------------------------------------------- /resources/Sydney_AEST.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/resources/Sydney_AEST.jpg -------------------------------------------------------------------------------- /resources/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/resources/Thumbs.db -------------------------------------------------------------------------------- /resources/Zurich_CEST.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/resources/Zurich_CEST.jpg -------------------------------------------------------------------------------- /resources/Zurich_CET.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/resources/Zurich_CET.jpg -------------------------------------------------------------------------------- /resources/wemos_color_weatherstation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neptune2/esp8266-weather-station-color-DST/792b9a088f06e3999ac7fdb531bcff1a8425ef20/resources/wemos_color_weatherstation.jpg -------------------------------------------------------------------------------- /settings.h: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | Copyright (c) 2015 by Daniel Eichhorn 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | The above copyright notice and this permission notice shall be included in all 10 | copies or substantial portions of the Software. 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 16 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 17 | SOFTWARE. 18 | See more at http://blog.squix.ch 19 | */ 20 | 21 | #include 22 | 23 | // Setup 24 | const int UPDATE_INTERVAL_SECS = 10 * 60; // Update every 10 minutes 25 | 26 | // Pins for a WEMOS D1 R2 to ILI9341 27 | #define TFT_DC D3 28 | #define TFT_CS D2 29 | 30 | // Custom color 31 | #define ILI9341_CLOCKGREEN 0x7FE5 32 | #define ILI9341_SILHOUTTEGREEN 0x0280 33 | 34 | // Change LED_SILHOUETTE to 0 to disable 35 | #define LED_SILHOUETTE 1 36 | 37 | 38 | // NTP settings Maximum of 3 servers 39 | #define NTP_SERVERS "0.pool.ntp.org", "1.pool.ntp.org", "1.pool.ntp.org" 40 | 41 | // Locales (uncomment only 1) 42 | #define Zurich 43 | //#define Boston 44 | //#define Sydney 45 | 46 | 47 | #ifdef Zurich 48 | //DST rules for Central European Time Zone 49 | #define UTC_OFFSET +1 50 | struct dstRule StartRule = {"CEST", Last, Sun, Mar, 2, 3600}; // Central European Summer Time = UTC/GMT +2 hours 51 | struct dstRule EndRule = {"CET", Last, Sun, Oct, 2, 0}; // Central European Time = UTC/GMT +1 hour 52 | 53 | // Uncomment for 24 Hour style clock 54 | #define STYLE_24HR 55 | 56 | // Wunderground Settings 57 | const boolean IS_METRIC = true; 58 | const String WUNDERGRROUND_API_KEY = ""; 59 | const String WUNDERGRROUND_LANGUAGE = "EN"; 60 | const String WUNDERGROUND_COUNTRY = "CH"; 61 | const String WUNDERGROUND_CITY = "Zurich"; 62 | #endif 63 | 64 | #ifdef Boston 65 | //DST rules for US Eastern Time Zone (New York, Boston) 66 | #define UTC_OFFSET -5 67 | struct dstRule StartRule = {"EDT", Second, Sun, Mar, 2, 3600}; // Eastern Daylight time = UTC/GMT -4 hours 68 | struct dstRule EndRule = {"EST", First, Sun, Nov, 1, 0}; // Eastern Standard time = UTC/GMT -5 hour 69 | 70 | // Uncomment for 24 Hour style clock 71 | //#define STYLE_24HR 72 | 73 | // Wunderground Settings 74 | const boolean IS_METRIC = false; 75 | const String WUNDERGRROUND_API_KEY = ""; 76 | const String WUNDERGRROUND_LANGUAGE = "EN"; 77 | const String WUNDERGROUND_COUNTRY = "MA"; 78 | const String WUNDERGROUND_CITY = "Boston"; 79 | #endif 80 | 81 | #ifdef Sydney 82 | //DST Rules for Australia Eastern Time Zone (Sydney) 83 | #define UTC_OFFSET +10 84 | struct dstRule StartRule = {"AEDT", First, Sun, Oct, 2, 3600}; // Australia Eastern Daylight time = UTC/GMT +11 hours 85 | struct dstRule EndRule = {"AEST", First, Sun, Apr, 2, 0}; // Australia Eastern Standard time = UTC/GMT +10 hour 86 | 87 | // Uncomment for 24 Hour style clock 88 | //#define STYLE_24HR 89 | 90 | // Wunderground Settings 91 | const boolean IS_METRIC = true; 92 | const String WUNDERGRROUND_API_KEY = ""; 93 | const String WUNDERGRROUND_LANGUAGE = "EN"; 94 | const String WUNDERGROUND_COUNTRY = "AU"; 95 | const String WUNDERGROUND_CITY = "Sydney"; 96 | #endif 97 | 98 | // List, so that the downloader knows what to fetch 99 | String wundergroundIcons [] = {"chanceflurries","chancerain","chancesleet","chancesnow","clear","cloudy","flurries","fog","hazy","mostlycloudy","mostlysunny","partlycloudy","partlysunny","rain","sleet","snow","sunny","tstorms","unknown"}; 100 | 101 | /*************************** 102 | * End Settings 103 | **************************/ 104 | --------------------------------------------------------------------------------