Initial import
This commit is contained in:
220
ArialRoundedMTBold_36.h
Normal file
220
ArialRoundedMTBold_36.h
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
/**The MIT License (MIT)
|
||||||
|
Copyright (c) 2015 by Daniel Eichhorn
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
See more at http://blog.squix.ch
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Created by http://oleddisplay.squix.ch/ Consider a donation
|
||||||
|
// In case of problems make sure that you are using the font file with the correct version!
|
||||||
|
const uint8_t ArialRoundedMTBold_36Bitmaps[] PROGMEM = {
|
||||||
|
|
||||||
|
// Bitmap Data:
|
||||||
|
0x00, // ' '
|
||||||
|
0x77,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x39,0xCE,0x73,0x00,0x00,0x3B,0xFF,0xFB,0x80, // '!'
|
||||||
|
0xFC,0xFF,0xF3,0xFF,0xCF,0xFF,0x3F,0xFC,0xFF,0xF3,0xFF,0xCF,0xDE,0x1E,0x78,0x78, // '"'
|
||||||
|
0x01,0x83,0x80,0x78,0x70,0x0F,0x0E,0x01,0xC3,0xC0,0x78,0x78,0x0F,0x0F,0x01,0xE1,0xE3,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0x07,0x87,0x80,0xF0,0xE0,0x1E,0x3C,0x07,0x87,0x80,0xF0,0xF0,0x7F,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xE3,0xC3,0xC0,0x78,0x78,0x0F,0x0E,0x01,0xC3,0xC0,0x78,0x78,0x07,0x06,0x00, // '#'
|
||||||
|
0x00,0x60,0x00,0x0C,0x00,0x01,0x80,0x00,0x30,0x00,0x7F,0xE0,0x3F,0xFE,0x0F,0xFF,0xE1,0xF3,0x7E,0x7C,0x67,0xCF,0x0C,0x79,0xE1,0x8F,0x3C,0x30,0xC7,0xC6,0x00,0xFE,0xC0,0x0F,0xF8,0x00,0xFF,0xE0,0x0F,0xFF,0x00,0x7F,0xF0,0x01,0xFF,0x00,0x37,0xE0,0x06,0x3E,0xE0,0xC3,0xFC,0x18,0x7F,0xC3,0x0F,0xF8,0x61,0xEF,0x8C,0x79,0xFD,0x9F,0x1F,0xFF,0xC1,0xFF,0xF0,0x0F,0xFC,0x00,0x38,0x00,0x03,0x00,0x00,0x60,0x00,0x0C,0x00,0x01,0x80,0x00,0x30,0x00,0x06,0x00, // '$'
|
||||||
|
0x1F,0x00,0x06,0x03,0xFC,0x00,0x70,0x1C,0x70,0x03,0x01,0xC1,0x80,0x38,0x0E,0x0E,0x03,0x80,0x70,0x70,0x1C,0x03,0x83,0x81,0xC0,0x1C,0x1C,0x0C,0x00,0xE0,0xE0,0xE0,0x07,0x07,0x0E,0x00,0x1C,0x70,0x70,0x00,0xFF,0x87,0x00,0x03,0xF8,0x30,0x00,0x00,0x03,0x87,0xF0,0x00,0x38,0x7F,0xC0,0x01,0xC3,0x8E,0x00,0x1C,0x38,0x38,0x00,0xC1,0xC1,0xC0,0x0E,0x0E,0x0E,0x00,0xE0,0x70,0x70,0x07,0x03,0x83,0x80,0x70,0x1C,0x1C,0x07,0x00,0xE0,0xE0,0x38,0x03,0x8E,0x03,0x80,0x0F,0xE0,0x1C,0x00,0x3E,0x00,0xC0,0x00,0x00, // '%'
|
||||||
|
0x00,0xFC,0x00,0x01,0xFF,0x80,0x01,0xFF,0xE0,0x01,0xF0,0xF0,0x00,0xF0,0x3C,0x00,0x78,0x1E,0x00,0x3C,0x0F,0x00,0x1F,0x0F,0x80,0x0F,0xDF,0x80,0x03,0xFF,0x80,0x00,0xFF,0x80,0x00,0xFF,0x00,0x00,0xFF,0xC1,0x81,0xFF,0xF0,0xE1,0xF9,0xF8,0xF8,0xF8,0x7E,0x78,0xF8,0x1F,0xFC,0x7C,0x07,0xFC,0x3E,0x01,0xFE,0x1F,0x00,0x7F,0x0F,0xC0,0x3F,0xC3,0xF0,0x7F,0xF1,0xFF,0xFF,0xFC,0x7F,0xFF,0x3F,0x0F,0xFE,0x0F,0x01,0xFC,0x03,0x80, // '&'
|
||||||
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xDE,0x78, // '''
|
||||||
|
0x03,0x81,0xC1,0xC1,0xE0,0xF0,0xF0,0xF8,0x78,0x3C,0x3E,0x1F,0x0F,0x0F,0x87,0xC3,0xE1,0xF0,0xF8,0x7C,0x3E,0x1F,0x0F,0x83,0xC1,0xF0,0xF8,0x3C,0x1E,0x0F,0x83,0xC0,0xF0,0x78,0x1C,0x07,0x01,0x80, // '('
|
||||||
|
0xE0,0x70,0x1C,0x0F,0x03,0x81,0xE0,0xF8,0x3C,0x1E,0x0F,0x87,0xC1,0xE0,0xF8,0x7C,0x3E,0x1F,0x0F,0x87,0xC3,0xE1,0xF0,0xF8,0x78,0x7C,0x3E,0x1E,0x0F,0x0F,0x87,0x83,0x83,0xC1,0xC1,0xC0,0xE0,0x00, // ')'
|
||||||
|
0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x0E,0x38,0xFF,0x77,0xDF,0xFF,0x07,0xF0,0x07,0xC0,0x1D,0xC0,0x3B,0xC0,0xE3,0x83,0xC7,0x83,0x06,0x00, // '*'
|
||||||
|
0x01,0xF0,0x00,0x3E,0x00,0x07,0xC0,0x00,0xF8,0x00,0x1F,0x00,0x03,0xE0,0x00,0x7C,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x1F,0x00,0x03,0xE0,0x00,0x7C,0x00,0x0F,0x80,0x01,0xF0,0x00,0x3E,0x00, // '+'
|
||||||
|
0x7B,0xEF,0xFF,0x7C,0x71,0xCE,0x7B,0xCE,0x00, // ','
|
||||||
|
0x7F,0xDF,0xFF,0xFF,0xBF,0xE0, // '-'
|
||||||
|
0x77,0xFF,0xF7,0x00, // '.'
|
||||||
|
0x03,0x81,0xC1,0xE0,0xF0,0x70,0x78,0x3C,0x1E,0x0E,0x07,0x07,0x83,0xC1,0xC0,0xE0,0xF0,0x78,0x38,0x1C,0x1E,0x0F,0x07,0x03,0x83,0xC1,0xE0,0xE0,0x70,0x00, // '/'
|
||||||
|
0x03,0xF0,0x03,0xFF,0x01,0xFF,0xE0,0xFF,0xFC,0x3E,0x1F,0x1F,0x03,0xE7,0xC0,0xF9,0xE0,0x1E,0xF8,0x07,0xFE,0x01,0xFF,0x80,0x7F,0xE0,0x1F,0xF8,0x07,0xFE,0x01,0xFF,0x80,0x7F,0xE0,0x1F,0xF8,0x07,0xFE,0x01,0xF7,0x80,0x79,0xF0,0x3E,0x7C,0x0F,0x8F,0x87,0xC3,0xFF,0xF0,0x7F,0xF8,0x0F,0xFC,0x00,0xFC,0x00, // '0'
|
||||||
|
0x00,0x30,0x03,0xC0,0x3E,0x03,0xF0,0x3F,0x83,0xFC,0x7F,0xEF,0xDF,0xFC,0xFF,0xC7,0xD8,0x3E,0x01,0xF0,0x0F,0x80,0x7C,0x03,0xE0,0x1F,0x00,0xF8,0x07,0xC0,0x3E,0x01,0xF0,0x0F,0x80,0x7C,0x03,0xE0,0x1F,0x00,0xF8,0x03,0x80, // '1'
|
||||||
|
0x03,0xF8,0x03,0xFF,0x83,0xFF,0xF0,0xFF,0xFE,0x7E,0x1F,0x9F,0x03,0xFF,0x80,0x7F,0xE0,0x1F,0xF0,0x07,0xD8,0x01,0xF0,0x00,0xF8,0x00,0x7E,0x00,0x1F,0x00,0x1F,0x80,0x0F,0xC0,0x07,0xE0,0x03,0xF0,0x01,0xF8,0x00,0xFC,0x00,0x7E,0x00,0x3F,0x00,0x1F,0x80,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xF0, // '2'
|
||||||
|
0x03,0xF0,0x07,0xFF,0x03,0xFF,0xE1,0xF0,0xFC,0x78,0x1F,0x1E,0x03,0xE7,0x00,0xF8,0x80,0x3E,0x00,0x1F,0x00,0x0F,0xC0,0x7F,0xE0,0x1F,0xF0,0x07,0xFE,0x01,0xFF,0xC0,0x01,0xF8,0x00,0x3F,0x00,0x07,0xD8,0x01,0xFF,0x00,0x7F,0xE0,0x1F,0xF8,0x0F,0x9F,0x07,0xE7,0xFF,0xF0,0xFF,0xF8,0x1F,0xFC,0x01,0xFC,0x00, // '3'
|
||||||
|
0x00,0x0F,0x00,0x00,0xFC,0x00,0x07,0xE0,0x00,0x7F,0x00,0x07,0xF8,0x00,0x7F,0xC0,0x03,0xFE,0x00,0x3D,0xF0,0x03,0xCF,0x80,0x3C,0x7C,0x03,0xE3,0xE0,0x1E,0x1F,0x01,0xE0,0xF8,0x1E,0x07,0xC1,0xF0,0x3E,0x0F,0x01,0xF0,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xE0,0x00,0xF8,0x00,0x07,0xC0,0x00,0x3E,0x00,0x01,0xF0,0x00,0x0F,0x80,0x00,0x38,0x00, // '4'
|
||||||
|
0x1F,0xFF,0x8F,0xFF,0xE3,0xFF,0xF8,0xFF,0xFC,0x3C,0x00,0x0F,0x00,0x07,0xC0,0x01,0xF0,0x00,0x78,0x00,0x1E,0x7E,0x07,0xFF,0xE1,0xFF,0xFC,0xFF,0xFF,0xBF,0x07,0xE7,0x80,0xFC,0x80,0x1F,0x00,0x07,0xC0,0x01,0xF6,0x00,0x7F,0xC0,0x1F,0xF0,0x0F,0xBE,0x03,0xE7,0xC1,0xF1,0xFF,0xF8,0x1F,0xFC,0x01,0xFC,0x00, // '5'
|
||||||
|
0x03,0xF8,0x01,0xFF,0x81,0xFF,0xF0,0x7C,0x7C,0x3C,0x0F,0x9F,0x03,0xE7,0x80,0x71,0xE0,0x00,0xF8,0x00,0x3E,0x3E,0x0F,0xBF,0xE3,0xFF,0xFC,0xFE,0x1F,0xBF,0x03,0xEF,0x80,0x7F,0xE0,0x1F,0xF8,0x07,0xFE,0x01,0xF7,0x80,0x7D,0xF0,0x1F,0x7C,0x0F,0x8F,0x87,0xE3,0xFF,0xF0,0x7F,0xFC,0x0F,0xFC,0x00,0xFC,0x00, // '6'
|
||||||
|
0x7F,0xFF,0xBF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0x00,0x0F,0x80,0x07,0xC0,0x01,0xE0,0x00,0xF8,0x00,0x7C,0x00,0x1E,0x00,0x0F,0x80,0x03,0xC0,0x01,0xF0,0x00,0x78,0x00,0x3E,0x00,0x0F,0x80,0x07,0xC0,0x01,0xF0,0x00,0x7C,0x00,0x3F,0x00,0x0F,0x80,0x03,0xE0,0x00,0xF8,0x00,0x3E,0x00,0x0F,0x80,0x01,0xC0,0x00, // '7'
|
||||||
|
0x03,0xF8,0x01,0xFF,0xC0,0x7F,0xFC,0x1F,0x0F,0xC7,0xC0,0xFC,0xF8,0x0F,0x9F,0x01,0xF3,0xE0,0x3E,0x7C,0x07,0xCF,0x80,0xF0,0xF8,0x7E,0x0F,0xFF,0x80,0xFF,0xE0,0x7F,0xFE,0x1F,0x83,0xF3,0xE0,0x3E,0xF8,0x03,0xFF,0x00,0x7F,0xE0,0x0F,0xFC,0x01,0xFF,0x80,0x3E,0xF8,0x0F,0x9F,0x83,0xF1,0xFF,0xFC,0x1F,0xFF,0x00,0x7F,0x00, // '8'
|
||||||
|
0x03,0xF0,0x03,0xFF,0x03,0xFF,0xE0,0xFF,0xFC,0x7E,0x1F,0x1F,0x03,0xEF,0x80,0xFB,0xE0,0x1E,0xF8,0x07,0xFE,0x01,0xFF,0x80,0x7F,0xE0,0x1F,0x7C,0x0F,0xDF,0x87,0xF3,0xFF,0xFC,0x7F,0xDF,0x07,0xC7,0xC0,0x01,0xF0,0x00,0x78,0xE0,0x1E,0x78,0x0F,0x9F,0x03,0xC3,0xE3,0xE0,0xFF,0xF8,0x1F,0xF8,0x01,0xF8,0x00, // '9'
|
||||||
|
0x77,0xFF,0xF7,0x00,0x00,0x00,0x00,0x00,0x01,0xDF,0xFF,0xDC, // ':'
|
||||||
|
0x77,0xFF,0xF7,0x00,0x00,0x00,0x00,0x00,0x01,0xDE,0xFF,0xFE,0x73,0x9B,0xDC,0xC0, // ';'
|
||||||
|
0x00,0x00,0x40,0x00,0x70,0x00,0xFC,0x00,0xFF,0x00,0xFF,0xC1,0xFF,0xE1,0xFF,0xC1,0xFF,0xC0,0xFF,0x80,0x3F,0x80,0x0F,0xE0,0x03,0xFE,0x00,0x7F,0xF0,0x07,0xFF,0x00,0x7F,0xF8,0x03,0xFF,0x00,0x3F,0xC0,0x03,0xF0,0x00,0x1C,0x00,0x01, // '<'
|
||||||
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0, // '='
|
||||||
|
0x80,0x00,0x38,0x00,0x0F,0xC0,0x03,0xFC,0x00,0xFF,0xC0,0x1F,0xFE,0x00,0xFF,0xE0,0x0F,0xFE,0x00,0x7F,0xC0,0x07,0xF0,0x01,0xFC,0x01,0xFF,0x03,0xFF,0x83,0xFF,0x87,0xFF,0x83,0xFF,0x00,0xFF,0x00,0x3F,0x00,0x0E,0x00,0x02,0x00,0x00, // '>'
|
||||||
|
0x03,0xF8,0x03,0xFF,0x83,0xFF,0xF0,0xFF,0xFE,0x7E,0x1F,0xBF,0x03,0xFF,0x80,0x7F,0xE0,0x1F,0x70,0x07,0xC8,0x03,0xE0,0x01,0xF8,0x00,0xFC,0x00,0x7E,0x00,0x3F,0x00,0x0F,0x80,0x03,0xC0,0x01,0xF0,0x00,0x78,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x1F,0x00,0x07,0xC0,0x01,0xF0,0x00,0x38,0x00, // '?'
|
||||||
|
0x00,0x07,0xFE,0x00,0x00,0x0F,0xFF,0xF0,0x00,0x0F,0xFF,0xFE,0x00,0x07,0xE0,0x0F,0xE0,0x07,0xC0,0x00,0x7C,0x03,0xE0,0x00,0x0F,0x00,0xE0,0x00,0x01,0xE0,0x70,0x1F,0x9F,0x3C,0x3C,0x1F,0xF7,0xC7,0x0E,0x0F,0xFF,0xE1,0xC7,0x07,0xE3,0xF8,0x39,0xC3,0xE0,0x7E,0x0E,0x70,0xF8,0x0F,0x83,0xB8,0x7C,0x03,0xE0,0xEE,0x1F,0x00,0xF0,0x3B,0x8F,0x80,0x3C,0x0E,0xE3,0xE0,0x1F,0x07,0xB8,0xF8,0x07,0xC1,0xCE,0x3E,0x01,0xE0,0xF3,0x8F,0x80,0xF8,0x78,0xE3,0xE0,0x3E,0x1E,0x1C,0x7C,0x1F,0x9F,0x07,0x1F,0xFF,0xFF,0x81,0xC3,0xFF,0xFF,0xC0,0x38,0x7F,0xBF,0xE0,0x0F,0x07,0x87,0xE0,0x01,0xE0,0x00,0x00,0x3C,0x3C,0x00,0x00,0x3E,0x07,0xC0,0x00,0x1F,0x00,0xFE,0x00,0x3F,0x80,0x1F,0xFF,0xFF,0x80,0x00,0xFF,0xFF,0x80,0x00,0x07,0xFF,0x00,0x00, // '@'
|
||||||
|
0x00,0x3C,0x00,0x00,0x7E,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x01,0xFF,0x00,0x01,0xFF,0x80,0x01,0xEF,0x80,0x03,0xE7,0xC0,0x03,0xE7,0xC0,0x07,0xC7,0xC0,0x07,0xC3,0xE0,0x07,0xC3,0xE0,0x0F,0x81,0xF0,0x0F,0x81,0xF0,0x1F,0x81,0xF8,0x1F,0x00,0xF8,0x1F,0xFF,0xF8,0x3F,0xFF,0xFC,0x3F,0xFF,0xFC,0x7F,0xFF,0xFE,0x7C,0x00,0x7E,0x7C,0x00,0x3E,0xFC,0x00,0x3F,0xF8,0x00,0x1F,0xF8,0x00,0x1F,0x70,0x00,0x0E, // 'A'
|
||||||
|
0x7F,0xFF,0x07,0xFF,0xFC,0x3F,0xFF,0xF1,0xFF,0xFF,0xCF,0x80,0x7F,0x7C,0x01,0xFB,0xE0,0x07,0xDF,0x00,0x3E,0xF8,0x01,0xF7,0xC0,0x1F,0x3E,0x01,0xF9,0xFF,0xFF,0x8F,0xFF,0xF0,0x7F,0xFF,0xE3,0xFF,0xFF,0x9F,0x00,0x7E,0xF8,0x01,0xFF,0xC0,0x07,0xFE,0x00,0x3F,0xF0,0x01,0xFF,0x80,0x1F,0xFC,0x01,0xFB,0xFF,0xFF,0xDF,0xFF,0xFC,0xFF,0xFF,0xC3,0xFF,0xF8,0x00, // 'B'
|
||||||
|
0x00,0xFF,0x00,0x07,0xFF,0x80,0x3F,0xFF,0xC0,0xFF,0xFF,0xC3,0xF8,0x1F,0xC7,0xE0,0x1F,0x9F,0x80,0x1F,0x3E,0x00,0x1F,0x7C,0x00,0x3D,0xF0,0x00,0x33,0xE0,0x00,0x07,0xC0,0x00,0x0F,0x80,0x00,0x1F,0x00,0x00,0x3E,0x00,0x00,0x7C,0x00,0x04,0xF8,0x00,0x1C,0xF8,0x00,0x7D,0xF0,0x00,0xFB,0xF0,0x03,0xE3,0xF0,0x0F,0xC7,0xF0,0x3F,0x07,0xFF,0xFE,0x07,0xFF,0xF8,0x03,0xFF,0xC0,0x01,0xFE,0x00, // 'C'
|
||||||
|
0x7F,0xFE,0x03,0xFF,0xFE,0x0F,0xFF,0xFC,0x3F,0xFF,0xF8,0xF8,0x07,0xF3,0xE0,0x07,0xEF,0x80,0x1F,0xBE,0x00,0x3E,0xF8,0x00,0xFF,0xE0,0x01,0xFF,0x80,0x07,0xFE,0x00,0x1F,0xF8,0x00,0x7F,0xE0,0x01,0xFF,0x80,0x07,0xFE,0x00,0x1F,0xF8,0x00,0x7F,0xE0,0x03,0xFF,0x80,0x0F,0xBE,0x00,0x7E,0xF8,0x01,0xFB,0xE0,0x1F,0xCF,0xFF,0xFE,0x3F,0xFF,0xF0,0xFF,0xFF,0x81,0xFF,0xF8,0x00, // 'D'
|
||||||
|
0x7F,0xFF,0xEF,0xFF,0xFE,0xFF,0xFF,0xEF,0xFF,0xFE,0xF8,0x00,0x0F,0x80,0x00,0xF8,0x00,0x0F,0x80,0x00,0xF8,0x00,0x0F,0x80,0x00,0xFF,0xFF,0xCF,0xFF,0xFC,0xFF,0xFF,0xCF,0xFF,0xFC,0xF8,0x00,0x0F,0x80,0x00,0xF8,0x00,0x0F,0x80,0x00,0xF8,0x00,0x0F,0x80,0x00,0xF8,0x00,0x0F,0x80,0x00,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFE, // 'E'
|
||||||
|
0x7F,0xFF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x3E,0x00,0x0F,0x80,0x03,0xE0,0x00,0xF8,0x00,0x3E,0x00,0x0F,0x80,0x03,0xFF,0xF8,0xFF,0xFF,0x3F,0xFF,0xCF,0xFF,0xE3,0xE0,0x00,0xF8,0x00,0x3E,0x00,0x0F,0x80,0x03,0xE0,0x00,0xF8,0x00,0x3E,0x00,0x0F,0x80,0x03,0xE0,0x00,0xF8,0x00,0x1C,0x00,0x00, // 'F'
|
||||||
|
0x00,0x7F,0x80,0x03,0xFF,0xF0,0x07,0xFF,0xF8,0x1F,0xFF,0xFC,0x1F,0xC1,0xFE,0x3F,0x00,0x7E,0x7E,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0xF8,0x07,0xFE,0xF8,0x0F,0xFF,0xF8,0x0F,0xFF,0xF8,0x07,0xFF,0xF8,0x00,0x1F,0x7C,0x00,0x1F,0x7C,0x00,0x1F,0x7E,0x00,0x1F,0x3F,0x00,0x3F,0x1F,0xC0,0xFF,0x1F,0xFF,0xFE,0x07,0xFF,0xFC,0x03,0xFF,0xF0,0x00,0x7F,0x80, // 'G'
|
||||||
|
0x70,0x00,0x77,0xC0,0x07,0xFE,0x00,0x3F,0xF0,0x01,0xFF,0x80,0x0F,0xFC,0x00,0x7F,0xE0,0x03,0xFF,0x00,0x1F,0xF8,0x00,0xFF,0xC0,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x03,0xFF,0x00,0x1F,0xF8,0x00,0xFF,0xC0,0x07,0xFE,0x00,0x3F,0xF0,0x01,0xFF,0x80,0x0F,0xFC,0x00,0x7F,0xE0,0x03,0xFF,0x00,0x1F,0xF8,0x00,0xFB,0x80,0x03,0x80, // 'H'
|
||||||
|
0x77,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0x80, // 'I'
|
||||||
|
0x00,0x07,0x00,0x07,0xC0,0x03,0xE0,0x01,0xF0,0x00,0xF8,0x00,0x7C,0x00,0x3E,0x00,0x1F,0x00,0x0F,0x80,0x07,0xC0,0x03,0xE0,0x01,0xF0,0x00,0xF8,0x00,0x7C,0x00,0x3E,0x00,0x1F,0x70,0x0F,0xFC,0x07,0xFE,0x03,0xFF,0x01,0xFF,0xC1,0xFB,0xF1,0xF9,0xFF,0xFC,0x7F,0xFC,0x1F,0xFC,0x03,0xF8,0x00, // 'J'
|
||||||
|
0x70,0x00,0xE3,0xE0,0x07,0xCF,0x80,0x3F,0x3E,0x01,0xFC,0xF8,0x0F,0xE3,0xE0,0x7F,0x0F,0x83,0xF8,0x3E,0x1F,0xC0,0xF8,0xFE,0x03,0xE7,0xF0,0x0F,0xBF,0x80,0x3F,0xFF,0x00,0xFF,0xFC,0x03,0xFF,0xF8,0x0F,0xFB,0xF0,0x3F,0xCF,0xE0,0xFE,0x1F,0x83,0xE0,0x3F,0x0F,0x80,0xFE,0x3E,0x01,0xF8,0xF8,0x03,0xF3,0xE0,0x0F,0xEF,0x80,0x1F,0xBE,0x00,0x3F,0xF8,0x00,0xFD,0xC0,0x01,0xE0, // 'K'
|
||||||
|
0x70,0x00,0x3E,0x00,0x0F,0x80,0x03,0xE0,0x00,0xF8,0x00,0x3E,0x00,0x0F,0x80,0x03,0xE0,0x00,0xF8,0x00,0x3E,0x00,0x0F,0x80,0x03,0xE0,0x00,0xF8,0x00,0x3E,0x00,0x0F,0x80,0x03,0xE0,0x00,0xF8,0x00,0x3E,0x00,0x0F,0x80,0x03,0xE0,0x00,0xF8,0x00,0x3E,0x00,0x0F,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xE0, // 'L'
|
||||||
|
0x7E,0x00,0x3F,0x7F,0x80,0x3F,0xFF,0xE0,0x1F,0xFF,0xF0,0x1F,0xFF,0xF8,0x0F,0xFF,0xFC,0x07,0xFF,0xFF,0x07,0xFF,0xFF,0x83,0xFF,0xFB,0xC1,0xEF,0xFD,0xE0,0xF7,0xFE,0xF8,0xFB,0xFF,0x7C,0x7D,0xFF,0x9E,0x3C,0xFF,0xCF,0x1E,0x7F,0xE7,0xDF,0x3F,0xF3,0xEF,0x9F,0xF8,0xF7,0x8F,0xFC,0x7B,0xC7,0xFE,0x3F,0xE3,0xFF,0x1F,0xF1,0xFF,0x87,0xF0,0xFF,0xC3,0xF8,0x7F,0xE1,0xFC,0x3F,0xF0,0x7C,0x1F,0xF8,0x3E,0x0F,0xB8,0x0E,0x03,0x80, // 'M'
|
||||||
|
0x78,0x00,0x3B,0xF0,0x01,0xFF,0xC0,0x07,0xFF,0x80,0x1F,0xFF,0x00,0x7F,0xFE,0x01,0xFF,0xF8,0x07,0xFF,0xF0,0x1F,0xFF,0xE0,0x7F,0xEF,0x81,0xFF,0x9F,0x07,0xFE,0x7E,0x1F,0xF8,0xF8,0x7F,0xE1,0xF1,0xFF,0x87,0xE7,0xFE,0x0F,0x9F,0xF8,0x1F,0x7F,0xE0,0x7F,0xFF,0x80,0xFF,0xFE,0x01,0xFF,0xF8,0x07,0xFF,0xE0,0x0F,0xFF,0x80,0x1F,0xFE,0x00,0x7F,0xF8,0x00,0xFD,0xC0,0x01,0xE0, // 'N'
|
||||||
|
0x00,0xFF,0x00,0x01,0xFF,0xF0,0x03,0xFF,0xFE,0x03,0xFF,0xFF,0x83,0xFC,0x1F,0xE1,0xF8,0x03,0xF1,0xF8,0x00,0xFC,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x7C,0x00,0x07,0xFE,0x00,0x03,0xFF,0x00,0x01,0xFF,0x80,0x00,0xFF,0xC0,0x00,0x7F,0xE0,0x00,0x3F,0xF0,0x00,0x1F,0xFC,0x00,0x0F,0xBE,0x00,0x0F,0x9F,0x00,0x07,0xCF,0xC0,0x07,0xE3,0xF0,0x07,0xE0,0xFE,0x0F,0xF0,0x7F,0xFF,0xF0,0x1F,0xFF,0xF0,0x03,0xFF,0xE0,0x00,0x3F,0xC0,0x00, // 'O'
|
||||||
|
0x7F,0xFC,0x1F,0xFF,0xE3,0xFF,0xFE,0x7F,0xFF,0xEF,0x80,0xFD,0xF0,0x0F,0xFE,0x00,0xFF,0xC0,0x1F,0xF8,0x03,0xFF,0x00,0x7F,0xE0,0x1F,0xFC,0x07,0xEF,0xFF,0xFD,0xFF,0xFF,0x3F,0xFF,0xC7,0xFF,0xE0,0xF8,0x00,0x1F,0x00,0x03,0xE0,0x00,0x7C,0x00,0x0F,0x80,0x01,0xF0,0x00,0x3E,0x00,0x07,0xC0,0x00,0xF8,0x00,0x0E,0x00,0x00, // 'P'
|
||||||
|
0x00,0xFF,0x00,0x00,0xFF,0xF8,0x00,0xFF,0xFF,0x80,0x7F,0xFF,0xF0,0x3F,0xC1,0xFE,0x0F,0xC0,0x1F,0x87,0xE0,0x03,0xF1,0xF0,0x00,0x7C,0x7C,0x00,0x1F,0x3E,0x00,0x03,0xEF,0x80,0x00,0xFB,0xE0,0x00,0x3E,0xF8,0x00,0x0F,0xBE,0x00,0x03,0xEF,0x80,0x00,0xFB,0xE0,0x00,0x3E,0xF8,0x00,0x0F,0x9F,0x07,0x07,0xC7,0xC1,0xF1,0xF1,0xF8,0x3F,0xFC,0x3F,0x03,0xFE,0x07,0xF0,0x7F,0x81,0xFF,0xFF,0xC0,0x1F,0xFF,0xF8,0x03,0xFF,0xFF,0x80,0x1F,0xE3,0xF0,0x00,0x00,0x7C,0x00,0x00,0x07, // 'Q'
|
||||||
|
0x7F,0xFF,0x07,0xFF,0xFE,0x3F,0xFF,0xF9,0xFF,0xFF,0xEF,0x80,0x3F,0xFC,0x00,0xFF,0xE0,0x03,0xFF,0x00,0x1F,0xF8,0x00,0xFF,0xC0,0x0F,0xFE,0x00,0xFD,0xFF,0xFF,0xEF,0xFF,0xFE,0x7F,0xFF,0xC3,0xFF,0xF8,0x1F,0x07,0xE0,0xF8,0x1F,0x87,0xC0,0x7E,0x3E,0x01,0xF9,0xF0,0x0F,0xCF,0x80,0x3F,0x7C,0x00,0xFF,0xE0,0x07,0xFF,0x00,0x1F,0xF8,0x00,0xFB,0x80,0x03,0xC0, // 'R'
|
||||||
|
0x03,0xF8,0x01,0xFF,0xF0,0x3F,0xFF,0x87,0xFF,0xFC,0x7E,0x0F,0xCF,0xC0,0x7E,0xF8,0x03,0xEF,0x80,0x1E,0xFC,0x00,0xCF,0xF0,0x00,0x7F,0xF0,0x03,0xFF,0xE0,0x1F,0xFF,0x80,0x7F,0xFC,0x00,0x7F,0xE0,0x00,0x7F,0x60,0x03,0xFF,0x00,0x1F,0xF0,0x01,0xFF,0x80,0x1F,0xFC,0x03,0xFF,0xE0,0x7E,0x7F,0xFF,0xC3,0xFF,0xFC,0x0F,0xFF,0x00,0x3F,0xC0, // 'S'
|
||||||
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x0F,0x80,0x00,0x7C,0x00,0x03,0xE0,0x00,0x1F,0x00,0x00,0xF8,0x00,0x07,0xC0,0x00,0x3E,0x00,0x01,0xF0,0x00,0x0F,0x80,0x00,0x7C,0x00,0x03,0xE0,0x00,0x1F,0x00,0x00,0xF8,0x00,0x07,0xC0,0x00,0x3E,0x00,0x01,0xF0,0x00,0x0F,0x80,0x00,0x7C,0x00,0x03,0xE0,0x00,0x1F,0x00,0x00,0xF8,0x00,0x03,0x80,0x00, // 'T'
|
||||||
|
0x70,0x00,0x77,0xC0,0x07,0xFE,0x00,0x3F,0xF0,0x01,0xFF,0x80,0x0F,0xFC,0x00,0x7F,0xE0,0x03,0xFF,0x00,0x1F,0xF8,0x00,0xFF,0xC0,0x07,0xFE,0x00,0x3F,0xF0,0x01,0xFF,0x80,0x0F,0xFC,0x00,0x7F,0xE0,0x03,0xFF,0x00,0x1F,0xF8,0x00,0xFF,0xC0,0x07,0xFE,0x00,0x3F,0xF8,0x03,0xF7,0xC0,0x1F,0x3F,0x83,0xF8,0xFF,0xFF,0x83,0xFF,0xF8,0x0F,0xFF,0x80,0x1F,0xF0,0x00, // 'U'
|
||||||
|
0x70,0x00,0x1D,0xF0,0x00,0x7F,0xE0,0x00,0xFF,0xE0,0x03,0xF7,0xC0,0x07,0xCF,0x80,0x0F,0x9F,0x80,0x3F,0x1F,0x00,0x7C,0x3F,0x00,0xF8,0x7E,0x03,0xE0,0x7C,0x07,0xC0,0xFC,0x0F,0x80,0xF8,0x3E,0x01,0xF0,0x7C,0x03,0xF0,0xF8,0x03,0xE3,0xE0,0x07,0xC7,0xC0,0x07,0xDF,0x00,0x0F,0xBE,0x00,0x1F,0x7C,0x00,0x1F,0xF0,0x00,0x3F,0xE0,0x00,0x7F,0x80,0x00,0x7F,0x00,0x00,0xFE,0x00,0x00,0x70,0x00, // 'V'
|
||||||
|
0x70,0x03,0xC0,0x0E,0xF8,0x07,0xE0,0x1F,0xF8,0x07,0xE0,0x1F,0xF8,0x0F,0xF0,0x1F,0xF8,0x0F,0xF0,0x1F,0x7C,0x0F,0xF0,0x3E,0x7C,0x0F,0xF0,0x3E,0x7C,0x1F,0xF8,0x3E,0x7C,0x1E,0x78,0x3E,0x3E,0x1E,0x78,0x7C,0x3E,0x1E,0x78,0x7C,0x3E,0x3E,0x7C,0x7C,0x3E,0x3C,0x3C,0x7C,0x1E,0x3C,0x3C,0x78,0x1F,0x7C,0x3E,0xF8,0x1F,0x78,0x1E,0xF8,0x1F,0x78,0x1E,0xF8,0x0F,0x78,0x1E,0xF0,0x0F,0xF8,0x1F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x07,0xF0,0x0F,0xE0,0x07,0xF0,0x0F,0xE0,0x07,0xE0,0x07,0xE0,0x03,0xE0,0x07,0xC0,0x03,0xC0,0x03,0xC0, // 'W'
|
||||||
|
0x38,0x00,0x73,0xE0,0x07,0x9F,0x00,0x7E,0xFC,0x07,0xE3,0xF0,0x3F,0x1F,0x83,0xF0,0x7E,0x3F,0x01,0xF9,0xF8,0x0F,0xDF,0x80,0x3F,0xF8,0x00,0xFF,0xC0,0x07,0xFC,0x00,0x1F,0xC0,0x00,0xFE,0x00,0x0F,0xF8,0x00,0xFF,0xE0,0x07,0xFF,0x80,0x7E,0xFC,0x07,0xE3,0xF0,0x7F,0x1F,0xC3,0xF0,0x7E,0x3F,0x01,0xFB,0xF0,0x07,0xFF,0x80,0x3F,0xF8,0x00,0xFB,0x80,0x03,0x80, // 'X'
|
||||||
|
0x70,0x00,0x77,0xC0,0x07,0xFF,0x00,0x3E,0xF8,0x03,0xF7,0xE0,0x3F,0x1F,0x01,0xF0,0xFC,0x1F,0x83,0xF0,0xF8,0x0F,0x8F,0x80,0x7E,0xFC,0x01,0xF7,0xC0,0x07,0xFC,0x00,0x3F,0xE0,0x00,0xFE,0x00,0x03,0xE0,0x00,0x1F,0x00,0x00,0xF8,0x00,0x07,0xC0,0x00,0x3E,0x00,0x01,0xF0,0x00,0x0F,0x80,0x00,0x7C,0x00,0x03,0xE0,0x00,0x1F,0x00,0x00,0xF8,0x00,0x03,0x80,0x00, // 'Y'
|
||||||
|
0x3F,0xFF,0xF8,0x7F,0xFF,0xF9,0xFF,0xFF,0xF1,0xFF,0xFF,0xE0,0x00,0x1F,0x80,0x00,0x7F,0x00,0x01,0xFC,0x00,0x07,0xF0,0x00,0x0F,0xC0,0x00,0x3F,0x00,0x00,0xFC,0x00,0x03,0xF0,0x00,0x0F,0xE0,0x00,0x3F,0x80,0x00,0x7E,0x00,0x01,0xF8,0x00,0x07,0xE0,0x00,0x1F,0x80,0x00,0x7F,0x00,0x01,0xFC,0x00,0x07,0xF0,0x00,0x0F,0xC0,0x00,0x3F,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xF8, // 'Z'
|
||||||
|
0x7F,0xFF,0xFF,0xFF,0xFF,0xF8,0x3E,0x0F,0x83,0xE0,0xF8,0x3E,0x0F,0x83,0xE0,0xF8,0x3E,0x0F,0x83,0xE0,0xF8,0x3E,0x0F,0x83,0xE0,0xF8,0x3E,0x0F,0x83,0xE0,0xF8,0x3E,0x0F,0x83,0xE0,0xF8,0x3F,0xFF,0xFF,0xFF,0x7F,0xC0, // '['
|
||||||
|
0x70,0x3C,0x07,0x01,0xE0,0x78,0x1E,0x03,0x80,0xF0,0x3C,0x0F,0x01,0xC0,0x78,0x1E,0x07,0x80,0xE0,0x3C,0x0F,0x03,0xC0,0x70,0x1E,0x07,0x81,0xE0,0x38,0x0F,0x03,0xC0,0x60, // '\'
|
||||||
|
0xFF,0xBF,0xFF,0xFF,0xFF,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0x80, // ']'
|
||||||
|
0x03,0xE0,0x01,0xF0,0x01,0xFC,0x00,0xFE,0x00,0x7F,0x80,0x7B,0xC0,0x3D,0xF0,0x3E,0xF8,0x1E,0x3C,0x1F,0x1F,0x0F,0x07,0x8F,0x83,0xE7,0xC1,0xF7,0xC0,0x7C, // '^'
|
||||||
|
0xFF,0xFF,0xFF,0xFF,0xF0, // '_'
|
||||||
|
0xF8,0x3C,0x1E,0x0E,0x07, // '`'
|
||||||
|
0x03,0xFC,0x03,0xFF,0xE0,0xFF,0xFE,0x3F,0x07,0xC7,0xC0,0x7C,0xF0,0x0F,0x9C,0x01,0xF0,0x00,0xFE,0x01,0xFF,0xC3,0xFF,0xF8,0xFF,0x9F,0x3F,0x03,0xEF,0x80,0x7D,0xF0,0x0F,0xBE,0x03,0xF7,0xE1,0xFE,0x7F,0xFF,0xE7,0xFE,0x7C,0x3E,0x07,0x00, // 'a'
|
||||||
|
0x70,0x00,0x1F,0x00,0x03,0xE0,0x00,0x7C,0x00,0x0F,0x80,0x01,0xF0,0x00,0x3E,0x00,0x07,0xC7,0xE0,0xF9,0xFF,0x1F,0x7F,0xF3,0xFF,0xFF,0x7F,0x87,0xEF,0xE0,0x7D,0xF8,0x0F,0xFF,0x00,0xFF,0xC0,0x1F,0xF8,0x03,0xFF,0x00,0x7F,0xE0,0x0F,0xFE,0x03,0xFF,0xC0,0x7D,0xFE,0x1F,0xBF,0xFF,0xE7,0xDF,0xFC,0xF9,0xFF,0x0E,0x1F,0x80, // 'b'
|
||||||
|
0x03,0xF8,0x03,0xFF,0x81,0xFF,0xF0,0xFF,0xFE,0x7F,0x0F,0xDF,0x01,0xFF,0xC0,0x3F,0xE0,0x04,0xF8,0x00,0x3E,0x00,0x0F,0x80,0x03,0xE0,0x07,0xFC,0x03,0xDF,0x01,0xF7,0xF0,0xFC,0xFF,0xFE,0x1F,0xFF,0x83,0xFF,0x80,0x3F,0x80, // 'c'
|
||||||
|
0x00,0x01,0xC0,0x00,0x7C,0x00,0x0F,0x80,0x01,0xF0,0x00,0x3E,0x00,0x07,0xC0,0x00,0xF8,0x3F,0x1F,0x1F,0xF3,0xE7,0xFF,0x7D,0xFF,0xFF,0xBF,0x0F,0xF7,0xC0,0xFF,0xF8,0x0F,0xFE,0x01,0xFF,0xC0,0x1F,0xF8,0x03,0xFF,0x00,0x7F,0xE0,0x1F,0xFE,0x03,0xF7,0xC0,0x7E,0xFC,0x3F,0xCF,0xFF,0xF9,0xFF,0xDF,0x1F,0xF3,0xE0,0xF8,0x38, // 'd'
|
||||||
|
0x03,0xF8,0x03,0xFF,0x81,0xFF,0xF0,0xF8,0x7E,0x7C,0x07,0x9F,0x01,0xFF,0x80,0x7F,0xE0,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xE0,0x00,0xF8,0x00,0x1F,0x00,0x77,0xC0,0x3C,0xFC,0x3F,0x1F,0xFF,0x83,0xFF,0xC0,0x3F,0x80, // 'e'
|
||||||
|
0x01,0xF8,0x0F,0xF8,0x1F,0xF8,0x7F,0xE0,0xF8,0x01,0xF0,0x03,0xE0,0x3F,0xF8,0x7F,0xF9,0xFF,0xF1,0xFF,0xC0,0x7C,0x00,0xF8,0x01,0xF0,0x03,0xE0,0x07,0xC0,0x0F,0x80,0x1F,0x00,0x3E,0x00,0x7C,0x00,0xF8,0x01,0xF0,0x03,0xE0,0x07,0xC0,0x0F,0x80,0x0E,0x00, // 'f'
|
||||||
|
0x07,0xE1,0xC3,0xFE,0x7C,0xFF,0xEF,0xBF,0xFF,0xF7,0xE1,0xFE,0xF8,0x0F,0xFF,0x01,0xFF,0xC0,0x1F,0xF8,0x03,0xFF,0x00,0x7F,0xE0,0x0F,0xFC,0x01,0xFF,0xC0,0x7E,0xF8,0x0F,0xDF,0x87,0xF9,0xFF,0xFF,0x3F,0xFB,0xE3,0xFE,0x7C,0x1F,0x8F,0x80,0x01,0xF7,0x00,0x7E,0xF0,0x0F,0x9F,0x83,0xF3,0xFF,0xFC,0x1F,0xFF,0x00,0xFF,0x80, // 'g'
|
||||||
|
0x70,0x00,0x3E,0x00,0x0F,0x80,0x03,0xE0,0x00,0xF8,0x00,0x3E,0x00,0x0F,0x80,0x03,0xE3,0xF0,0xF9,0xFF,0x3E,0xFF,0xEF,0xFF,0xFB,0xF8,0x3F,0xFC,0x0F,0xFE,0x01,0xFF,0x80,0x7F,0xE0,0x1F,0xF8,0x07,0xFE,0x01,0xFF,0x80,0x7F,0xE0,0x1F,0xF8,0x07,0xFE,0x01,0xFF,0x80,0x7F,0xE0,0x1F,0xF8,0x07,0xDC,0x00,0xE0, // 'h'
|
||||||
|
0x77,0xFF,0xF7,0x00,0x0E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0x80, // 'i'
|
||||||
|
0x03,0x81,0xF0,0x7C,0x1F,0x03,0x80,0x00,0x00,0x0E,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xFF,0xFF,0xFB,0xFE,0x7E,0x00, // 'j'
|
||||||
|
0x70,0x00,0x7C,0x00,0x3E,0x00,0x1F,0x00,0x0F,0x80,0x07,0xC0,0x03,0xE0,0x01,0xF0,0x1C,0xF8,0x1E,0x7C,0x1F,0x3E,0x1F,0x9F,0x1F,0x8F,0x9F,0x07,0xDF,0x03,0xFF,0x81,0xFF,0xE0,0xFF,0xF0,0x7F,0x7C,0x3F,0x1F,0x1F,0x0F,0x8F,0x83,0xE7,0xC1,0xFB,0xE0,0x7D,0xF0,0x1F,0xF8,0x0F,0xB8,0x03,0x80, // 'k'
|
||||||
|
0x77,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0x80, // 'l'
|
||||||
|
0x70,0xFC,0x0F,0x8F,0x3F,0xE3,0xFC,0xFF,0xFF,0x7F,0xEF,0xFF,0xFF,0xFE,0xFE,0x1F,0xE3,0xFF,0xC0,0xFC,0x1F,0xF8,0x0F,0x81,0xFF,0x80,0xF8,0x1F,0xF8,0x0F,0x81,0xFF,0x80,0xF8,0x1F,0xF8,0x0F,0x81,0xFF,0x80,0xF8,0x1F,0xF8,0x0F,0x81,0xFF,0x80,0xF8,0x1F,0xF8,0x0F,0x81,0xFF,0x80,0xF8,0x1F,0xF8,0x0F,0x81,0xFF,0x80,0xF8,0x1F,0x70,0x07,0x00,0xE0, // 'm'
|
||||||
|
0x70,0xFC,0x3C,0x7F,0xCF,0xBF,0xFB,0xFF,0xFE,0xFE,0x0F,0xFF,0x03,0xFF,0xC0,0x7F,0xE0,0x1F,0xF8,0x07,0xFE,0x01,0xFF,0x80,0x7F,0xE0,0x1F,0xF8,0x07,0xFE,0x01,0xFF,0x80,0x7F,0xE0,0x1F,0xF8,0x07,0xFE,0x01,0xF7,0x00,0x38, // 'n'
|
||||||
|
0x01,0xF8,0x00,0xFF,0xF0,0x1F,0xFF,0x83,0xFF,0xFC,0x7F,0x0F,0xE7,0xC0,0x3E,0xFC,0x03,0xFF,0x80,0x1F,0xF8,0x01,0xFF,0x80,0x1F,0xF8,0x01,0xFF,0x80,0x1F,0xFC,0x03,0xF7,0xC0,0x3E,0x7F,0x0F,0xE3,0xFF,0xFC,0x1F,0xFF,0x80,0xFF,0xF0,0x01,0xF8,0x00, // 'o'
|
||||||
|
0x70,0xFC,0x1F,0x3F,0xE3,0xEF,0xFE,0x7F,0xFF,0xCF,0xF0,0xFD,0xF8,0x0F,0xBF,0x01,0xFF,0xC0,0x1F,0xF8,0x03,0xFF,0x00,0x7F,0xE0,0x0F,0xFC,0x01,0xFF,0xC0,0x7F,0xF8,0x0F,0xBF,0xC3,0xF7,0xFF,0xFC,0xFB,0xFF,0x9F,0x3F,0xE3,0xE3,0xF0,0x7C,0x00,0x0F,0x80,0x01,0xF0,0x00,0x3E,0x00,0x07,0xC0,0x00,0xF8,0x00,0x0E,0x00,0x00, // 'p'
|
||||||
|
0x07,0xE1,0xC3,0xFE,0x7C,0xFF,0xEF,0x9F,0xFF,0xF7,0xE1,0xFE,0xF8,0x0F,0xFF,0x01,0xFF,0xC0,0x1F,0xF8,0x03,0xFF,0x00,0x7F,0xE0,0x0F,0xFC,0x01,0xFF,0xC0,0x7E,0xF8,0x0F,0xDF,0x87,0xF9,0xFF,0xFF,0x3F,0xFB,0xE3,0xFE,0x7C,0x1F,0x0F,0x80,0x01,0xF0,0x00,0x3E,0x00,0x07,0xC0,0x00,0xF8,0x00,0x1F,0x00,0x03,0xE0,0x00,0x38, // 'q'
|
||||||
|
0x71,0xE7,0xDF,0xFF,0xFF,0xFF,0xFF,0xE1,0x7E,0x03,0xF0,0x1F,0x00,0xF8,0x07,0xC0,0x3E,0x01,0xF0,0x0F,0x80,0x7C,0x03,0xE0,0x1F,0x00,0xF8,0x07,0xC0,0x1C,0x00, // 'r'
|
||||||
|
0x0F,0xF0,0x1F,0xFE,0x1F,0xFF,0x8F,0x87,0xEF,0x81,0xF7,0xC0,0x7B,0xF0,0x00,0xFF,0x80,0x3F,0xF8,0x0F,0xFF,0x00,0xFF,0xC0,0x0F,0xF6,0x01,0xFF,0x80,0x7F,0xE0,0x3F,0xF8,0x3E,0x7F,0xFF,0x1F,0xFF,0x03,0xFC,0x00, // 's'
|
||||||
|
0x0E,0x00,0xF8,0x07,0xC0,0x3E,0x01,0xF0,0x0F,0x80,0x7C,0x0F,0xFC,0xFF,0xF7,0xFF,0x9F,0xF8,0x3E,0x01,0xF0,0x0F,0x80,0x7C,0x03,0xE0,0x1F,0x00,0xF8,0x07,0xC0,0x3E,0x01,0xF0,0x0F,0x80,0x7F,0xE3,0xFF,0x0F,0xF8,0x3F,0x80, // 't'
|
||||||
|
0x70,0x03,0xBE,0x01,0xFF,0x80,0x7F,0xE0,0x1F,0xF8,0x07,0xFE,0x01,0xFF,0x80,0x7F,0xE0,0x1F,0xF8,0x07,0xFE,0x01,0xFF,0x80,0x7F,0xE0,0x1F,0xF8,0x07,0xFF,0x03,0xFF,0xE3,0xFD,0xFF,0xFF,0x7F,0xF7,0xCF,0xF8,0xF0,0xF8,0x38, // 'u'
|
||||||
|
0x70,0x03,0xBC,0x00,0xFF,0x80,0x7F,0xE0,0x1F,0x7C,0x07,0x9F,0x03,0xE3,0xC0,0xF0,0xF8,0x7C,0x3E,0x1E,0x07,0x87,0x81,0xF3,0xE0,0x3C,0xF0,0x0F,0x3C,0x01,0xFE,0x00,0x7F,0x80,0x1F,0xE0,0x03,0xF0,0x00,0xFC,0x00,0x1E,0x00, // 'v'
|
||||||
|
0x70,0x0F,0x00,0xEF,0x00,0xF0,0x0F,0xF8,0x1F,0x81,0xFF,0x81,0xF8,0x1F,0x78,0x1F,0x81,0xE7,0x83,0xFC,0x1E,0x7C,0x3F,0xC3,0xE3,0xC3,0xFC,0x3C,0x3C,0x79,0xE3,0xC3,0xE7,0x9E,0x7C,0x1E,0x79,0xE7,0x81,0xE7,0x0E,0x78,0x0E,0xF0,0xF7,0x00,0xFF,0x0F,0xF0,0x0F,0xE0,0x7F,0x00,0x7E,0x07,0xE0,0x07,0xE0,0x7E,0x00,0x7C,0x03,0xE0,0x03,0xC0,0x3C,0x00, // 'w'
|
||||||
|
0x70,0x07,0x3C,0x07,0xBF,0x07,0xEF,0xC7,0xE3,0xE3,0xE0,0xFB,0xE0,0x7F,0xE0,0x1F,0xF0,0x07,0xF0,0x03,0xF8,0x03,0xFE,0x01,0xFF,0x01,0xF7,0xC1,0xF1,0xF1,0xF8,0xFC,0xF8,0x3E,0xF8,0x0F,0xFC,0x07,0xDC,0x01,0xC0, // 'x'
|
||||||
|
0x38,0x01,0xCF,0x80,0x3D,0xF0,0x0F,0xBE,0x01,0xF3,0xE0,0x3C,0x7C,0x0F,0x87,0x81,0xE0,0xF8,0x7C,0x1F,0x0F,0x81,0xE1,0xE0,0x3E,0x7C,0x03,0xCF,0x00,0x7D,0xE0,0x07,0xFC,0x00,0xFF,0x00,0x1F,0xE0,0x01,0xF8,0x00,0x3F,0x00,0x07,0xE0,0x00,0xF8,0x00,0x1F,0x00,0x07,0xC0,0x1F,0xF8,0x07,0xFE,0x00,0x7F,0xC0,0x07,0xE0,0x00, // 'y'
|
||||||
|
0x7F,0xFF,0x1F,0xFF,0xE7,0xFF,0xF9,0xFF,0xFE,0x00,0x3F,0x00,0x1F,0x80,0x07,0xC0,0x03,0xE0,0x01,0xF0,0x00,0xF8,0x00,0x7E,0x00,0x3F,0x00,0x1F,0x80,0x0F,0xC0,0x07,0xE0,0x03,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xF8, // 'z'
|
||||||
|
0x01,0xF0,0x1F,0xC1,0xFE,0x1F,0xE0,0xFC,0x07,0xC0,0x3E,0x01,0xF0,0x0F,0x80,0x7C,0x03,0xE0,0x1F,0x01,0xF8,0x0F,0x81,0xFC,0x1F,0xC0,0xF8,0x07,0xF0,0x1F,0xC0,0x3E,0x01,0xF8,0x07,0xC0,0x3E,0x01,0xF0,0x0F,0x80,0x7C,0x03,0xE0,0x1F,0x00,0xFC,0x07,0xF8,0x1F,0xE0,0x7F,0x01,0xF0, // '{'
|
||||||
|
0x6F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x60, // '|'
|
||||||
|
0x7C,0x07,0xF0,0x3F,0xC0,0xFF,0x01,0xF8,0x07,0xC0,0x3E,0x01,0xF0,0x0F,0x80,0x7C,0x03,0xE0,0x1F,0x00,0xFC,0x03,0xE0,0x1F,0xC0,0x7F,0x00,0xF8,0x1F,0xC1,0xFC,0x0F,0x80,0xFC,0x07,0xC0,0x3E,0x01,0xF0,0x0F,0x80,0x7C,0x03,0xE0,0x1F,0x01,0xF8,0x3F,0xC3,0xFC,0x1F,0xC0,0x7C,0x00 // '}'
|
||||||
|
};
|
||||||
|
const GFXglyph ArialRoundedMTBold_36Glyphs[] PROGMEM = {
|
||||||
|
// bitmapOffset, width, height, xAdvance, xOffset, yOffset
|
||||||
|
{ 0, 1, 1, 10, 0, 0 }, // ' '
|
||||||
|
{ 1, 5, 26, 13, 4, -26 }, // '!'
|
||||||
|
{ 18, 14, 9, 18, 2, -26 }, // '"'
|
||||||
|
{ 34, 19, 26, 21, 0, -26 }, // '#'
|
||||||
|
{ 96, 19, 37, 22, 1, -30 }, // '$'
|
||||||
|
{ 184, 29, 27, 32, 1, -26 }, // '%'
|
||||||
|
{ 282, 25, 26, 28, 2, -26 }, // '&'
|
||||||
|
{ 364, 6, 9, 10, 1, -26 }, // '''
|
||||||
|
{ 371, 9, 33, 14, 2, -26 }, // '('
|
||||||
|
{ 409, 9, 33, 14, 2, -26 }, // ')'
|
||||||
|
{ 447, 15, 14, 17, 0, -28 }, // '*'
|
||||||
|
{ 474, 19, 18, 22, 1, -22 }, // '+'
|
||||||
|
{ 517, 6, 11, 12, 3, -5 }, // ','
|
||||||
|
{ 526, 11, 4, 13, 1, -11 }, // '-'
|
||||||
|
{ 532, 5, 5, 12, 3, -5 }, // '.'
|
||||||
|
{ 536, 9, 26, 11, 1, -26 }, // '/'
|
||||||
|
{ 566, 18, 26, 22, 2, -26 }, // '0'
|
||||||
|
{ 625, 13, 26, 22, 2, -26 }, // '1'
|
||||||
|
{ 668, 18, 26, 22, 2, -26 }, // '2'
|
||||||
|
{ 727, 18, 26, 22, 2, -26 }, // '3'
|
||||||
|
{ 786, 21, 26, 22, 0, -26 }, // '4'
|
||||||
|
{ 855, 18, 26, 22, 2, -26 }, // '5'
|
||||||
|
{ 914, 18, 26, 22, 2, -26 }, // '6'
|
||||||
|
{ 973, 18, 26, 22, 3, -26 }, // '7'
|
||||||
|
{ 1032, 19, 26, 22, 1, -26 }, // '8'
|
||||||
|
{ 1094, 18, 26, 22, 1, -26 }, // '9'
|
||||||
|
{ 1153, 5, 19, 12, 3, -19 }, // ':'
|
||||||
|
{ 1165, 5, 25, 12, 3, -19 }, // ';'
|
||||||
|
{ 1181, 18, 20, 22, 1, -23 }, // '<'
|
||||||
|
{ 1226, 18, 13, 22, 2, -19 }, // '='
|
||||||
|
{ 1256, 18, 20, 22, 1, -23 }, // '>'
|
||||||
|
{ 1301, 18, 26, 22, 1, -26 }, // '?'
|
||||||
|
{ 1360, 34, 33, 36, 1, -26 }, // '@'
|
||||||
|
{ 1501, 24, 26, 27, 1, -26 }, // 'A'
|
||||||
|
{ 1579, 21, 26, 27, 3, -26 }, // 'B'
|
||||||
|
{ 1648, 23, 26, 28, 2, -26 }, // 'C'
|
||||||
|
{ 1723, 22, 26, 28, 3, -26 }, // 'D'
|
||||||
|
{ 1795, 20, 26, 25, 3, -26 }, // 'E'
|
||||||
|
{ 1860, 18, 26, 23, 3, -26 }, // 'F'
|
||||||
|
{ 1919, 24, 26, 30, 2, -26 }, // 'G'
|
||||||
|
{ 1997, 21, 26, 28, 3, -26 }, // 'H'
|
||||||
|
{ 2066, 5, 26, 12, 3, -26 }, // 'I'
|
||||||
|
{ 2083, 17, 26, 22, 1, -26 }, // 'J'
|
||||||
|
{ 2139, 22, 26, 28, 3, -26 }, // 'K'
|
||||||
|
{ 2211, 18, 26, 23, 3, -26 }, // 'L'
|
||||||
|
{ 2270, 25, 26, 31, 3, -26 }, // 'M'
|
||||||
|
{ 2352, 22, 26, 28, 3, -26 }, // 'N'
|
||||||
|
{ 2424, 25, 26, 30, 2, -26 }, // 'O'
|
||||||
|
{ 2506, 19, 26, 25, 3, -26 }, // 'P'
|
||||||
|
{ 2568, 26, 28, 30, 2, -26 }, // 'Q'
|
||||||
|
{ 2659, 21, 26, 27, 3, -26 }, // 'R'
|
||||||
|
{ 2728, 20, 26, 25, 2, -26 }, // 'S'
|
||||||
|
{ 2793, 21, 26, 24, 1, -26 }, // 'T'
|
||||||
|
{ 2862, 21, 26, 28, 3, -26 }, // 'U'
|
||||||
|
{ 2931, 23, 26, 26, 1, -26 }, // 'V'
|
||||||
|
{ 3006, 32, 26, 35, 1, -26 }, // 'W'
|
||||||
|
{ 3110, 21, 26, 23, 0, -26 }, // 'X'
|
||||||
|
{ 3179, 21, 26, 24, 1, -26 }, // 'Y'
|
||||||
|
{ 3248, 23, 26, 24, 0, -26 }, // 'Z'
|
||||||
|
{ 3323, 10, 33, 14, 2, -26 }, // '['
|
||||||
|
{ 3365, 10, 26, 11, 0, -26 }, // '\'
|
||||||
|
{ 3398, 10, 33, 14, 0, -26 }, // ']'
|
||||||
|
{ 3440, 17, 14, 22, 2, -26 }, // '^'
|
||||||
|
{ 3470, 18, 2, 19, 0, 3 }, // '_'
|
||||||
|
{ 3475, 8, 5, 13, 1, -26 }, // '`'
|
||||||
|
{ 3480, 19, 19, 22, 1, -19 }, // 'a'
|
||||||
|
{ 3526, 19, 26, 24, 2, -26 }, // 'b'
|
||||||
|
{ 3588, 18, 19, 22, 1, -19 }, // 'c'
|
||||||
|
{ 3631, 19, 26, 24, 1, -26 }, // 'd'
|
||||||
|
{ 3693, 18, 19, 22, 2, -19 }, // 'e'
|
||||||
|
{ 3736, 15, 26, 13, -1, -26 }, // 'f'
|
||||||
|
{ 3785, 19, 26, 24, 1, -19 }, // 'g'
|
||||||
|
{ 3847, 18, 26, 23, 2, -26 }, // 'h'
|
||||||
|
{ 3906, 5, 26, 11, 2, -26 }, // 'i'
|
||||||
|
{ 3923, 10, 33, 11, -3, -26 }, // 'j'
|
||||||
|
{ 3965, 17, 26, 22, 3, -26 }, // 'k'
|
||||||
|
{ 4021, 5, 26, 11, 2, -26 }, // 'l'
|
||||||
|
{ 4038, 28, 19, 33, 2, -19 }, // 'm'
|
||||||
|
{ 4105, 18, 19, 23, 2, -19 }, // 'n'
|
||||||
|
{ 4148, 20, 19, 23, 1, -19 }, // 'o'
|
||||||
|
{ 4196, 19, 26, 24, 2, -19 }, // 'p'
|
||||||
|
{ 4258, 19, 26, 24, 1, -19 }, // 'q'
|
||||||
|
{ 4320, 13, 19, 17, 2, -19 }, // 'r'
|
||||||
|
{ 4351, 17, 19, 21, 1, -19 }, // 's'
|
||||||
|
{ 4392, 13, 26, 14, 0, -26 }, // 't'
|
||||||
|
{ 4435, 18, 19, 23, 2, -19 }, // 'u'
|
||||||
|
{ 4478, 18, 19, 21, 1, -19 }, // 'v'
|
||||||
|
{ 4521, 28, 19, 30, 1, -19 }, // 'w'
|
||||||
|
{ 4588, 17, 19, 20, 1, -19 }, // 'x'
|
||||||
|
{ 4629, 19, 26, 21, 0, -19 }, // 'y'
|
||||||
|
{ 4691, 18, 19, 20, 1, -19 }, // 'z'
|
||||||
|
{ 4734, 13, 33, 15, 1, -26 }, // '{'
|
||||||
|
{ 4788, 4, 33, 11, 3, -26 }, // '|'
|
||||||
|
{ 4805, 13, 33, 15, 0, -26 } // '}'
|
||||||
|
};
|
||||||
|
const GFXfont ArialRoundedMTBold_36 PROGMEM = {
|
||||||
|
(uint8_t *)ArialRoundedMTBold_36Bitmaps,(GFXglyph *)ArialRoundedMTBold_36Glyphs,0x20, 0x7E, 43};
|
||||||
|
|
||||||
220
ArialRoundedMtBold_14.h
Normal file
220
ArialRoundedMtBold_14.h
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
/**The MIT License (MIT)
|
||||||
|
Copyright (c) 2015 by Daniel Eichhorn
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
See more at http://blog.squix.ch
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Created by http://oleddisplay.squix.ch/ Consider a donation
|
||||||
|
// In case of problems make sure that you are using the font file with the correct version!
|
||||||
|
const uint8_t ArialRoundedMTBold_14Bitmaps[] PROGMEM = {
|
||||||
|
|
||||||
|
// Bitmap Data:
|
||||||
|
0x00, // ' '
|
||||||
|
0xFF,0xF8,0xF0, // '!'
|
||||||
|
0xDE,0xF6, // '"'
|
||||||
|
0x12,0x32,0x36,0xFF,0xFF,0x24,0xFF,0xFF,0x4C,0x48, // '#'
|
||||||
|
0x10,0x61,0xF6,0xAD,0x7A,0x1E,0x0E,0xD7,0xAF,0x5B,0xE1,0x02,0x04,0x00, // '$'
|
||||||
|
0x60,0x92,0x22,0x44,0x49,0x07,0x60,0x0B,0x82,0x48,0xC9,0x11,0x24,0x18, // '%'
|
||||||
|
0x3C,0x19,0x82,0x60,0xF0,0x39,0x33,0x6C,0x73,0x1C,0xFF,0x8E,0x30, // '&'
|
||||||
|
0xFC, // '''
|
||||||
|
0x32,0x64,0xCC,0xCC,0xC4,0x62,0x30, // '('
|
||||||
|
0xC4,0x62,0x33,0x33,0x32,0x64,0xC0, // ')'
|
||||||
|
0x21,0x2A,0xE5,0x28, // '*'
|
||||||
|
0x18,0x18,0x18,0xFF,0xFF,0x18,0x18, // '+'
|
||||||
|
0xF6, // ','
|
||||||
|
0xFF, // '-'
|
||||||
|
0xF0, // '.'
|
||||||
|
0x33,0x32,0x66,0x4C,0xCC, // '/'
|
||||||
|
0x38,0xFB,0x9E,0x3C,0x78,0xF1,0xF6,0x7C,0x70, // '0'
|
||||||
|
0x19,0xDF,0xB1,0x8C,0x63,0x18,0xC0, // '1'
|
||||||
|
0x38,0xFF,0x1E,0x30,0xC3,0x0C,0x30,0xFF,0xFC, // '2'
|
||||||
|
0x79,0x9B,0x10,0x63,0xC7,0x81,0xC3,0xC6,0xF0, // '3'
|
||||||
|
0x06,0x0E,0x1E,0x16,0x26,0x46,0xFF,0xFF,0x06,0x06, // '4'
|
||||||
|
0x7E,0xFD,0x06,0x0F,0xD8,0xC1,0xC3,0xCC,0xF0, // '5'
|
||||||
|
0x38,0xDB,0x1E,0x0F,0xD8,0xF1,0xE3,0x66,0x78, // '6'
|
||||||
|
0xFF,0xFC,0x30,0x41,0x82,0x0C,0x18,0x30,0xC0, // '7'
|
||||||
|
0x38,0xDB,0x1F,0x63,0x98,0xF1,0xE3,0xC6,0xF8, // '8'
|
||||||
|
0x3C,0x66,0xC3,0xC3,0xE7,0x3F,0x03,0xC3,0x66,0x3C, // '9'
|
||||||
|
0xF0,0x3C, // ':'
|
||||||
|
0xF0,0x3D,0x80, // ';'
|
||||||
|
0x02,0x1D,0xF7,0x0E,0x0F,0x83,0x81, // '<'
|
||||||
|
0xFF,0xFC,0x07,0xFF,0xE0, // '='
|
||||||
|
0x81,0xC1,0xF0,0x70,0xEF,0xB8,0x40, // '>'
|
||||||
|
0x3C,0xFF,0x1E,0x30,0xC7,0x0C,0x00,0x30,0x60, // '?'
|
||||||
|
0x0F,0x83,0x06,0x60,0x24,0xED,0x99,0x9B,0x19,0xB1,0xBB,0x12,0xBF,0xE4,0xDC,0x40,0x13,0x06,0x0F,0xC0, // '@'
|
||||||
|
0x1C,0x0E,0x05,0x06,0xC3,0x63,0x19,0xFC,0xFE,0xC1,0xE0,0xC0, // 'A'
|
||||||
|
0xFC,0xFE,0xC7,0xC6,0xFE,0xFE,0xC3,0xC3,0xFF,0xFE, // 'B'
|
||||||
|
0x3E,0x3F,0xB8,0xF8,0x3C,0x06,0x03,0x06,0xC7,0x7F,0x0F,0x00, // 'C'
|
||||||
|
0xFE,0x7F,0xB0,0xF8,0x3C,0x1E,0x0F,0x07,0x87,0xFF,0x7F,0x00, // 'D'
|
||||||
|
0xFE,0xFF,0xC0,0xC0,0xFE,0xFE,0xC0,0xC0,0xFF,0xFF, // 'E'
|
||||||
|
0xFF,0xFF,0x06,0x0F,0xDF,0xB0,0x60,0xC1,0x80, // 'F'
|
||||||
|
0x1E,0x3F,0x98,0xF8,0x2C,0x06,0x3F,0x1E,0xC3,0x7F,0x9F,0x00, // 'G'
|
||||||
|
0xC1,0xE0,0xF0,0x78,0x3F,0xFF,0xFF,0x07,0x83,0xC1,0xE0,0xC0, // 'H'
|
||||||
|
0xFF,0xFF,0xF0, // 'I'
|
||||||
|
0x06,0x0C,0x18,0x30,0x60,0xF1,0xF3,0x7E,0x78, // 'J'
|
||||||
|
0xC3,0x63,0xB3,0x9B,0x8F,0x87,0x63,0x19,0x8E,0xC3,0x60,0xC0, // 'K'
|
||||||
|
0xC1,0x83,0x06,0x0C,0x18,0x30,0x60,0xFF,0xFC, // 'L'
|
||||||
|
0xE1,0xFC,0xFF,0x3F,0xCF,0xD2,0xF7,0xBD,0xEF,0x7B,0xCC,0xF3,0x30, // 'M'
|
||||||
|
0xC1,0xF0,0xFC,0x7E,0x3D,0x9E,0x6F,0x3F,0x8F,0xC3,0xE0,0xC0, // 'N'
|
||||||
|
0x1E,0x1F,0xE6,0x1B,0x03,0xC0,0xF0,0x3C,0x0D,0x86,0x7F,0x87,0x80, // 'O'
|
||||||
|
0xFE,0xFF,0xC3,0xC3,0xFF,0xFE,0xC0,0xC0,0xC0,0xC0, // 'P'
|
||||||
|
0x1E,0x0F,0xF1,0x87,0x60,0x6C,0x0D,0x81,0xB1,0x33,0x7C,0x7F,0x83,0xD8,0x01,0x80, // 'Q'
|
||||||
|
0xFE,0xFF,0xC3,0xC3,0xFE,0xFC,0xCE,0xC6,0xC3,0xC3, // 'R'
|
||||||
|
0x7C,0xFE,0xC7,0xC2,0x7C,0x0F,0xC3,0xC3,0x7E,0x3C, // 'S'
|
||||||
|
0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, // 'T'
|
||||||
|
0xC1,0xE0,0xF0,0x78,0x3C,0x1E,0x0F,0x07,0xC7,0x7F,0x1F,0x00, // 'U'
|
||||||
|
0xC1,0xE0,0xD8,0xCC,0x66,0x31,0xB0,0xD8,0x6C,0x1C,0x0E,0x00, // 'V'
|
||||||
|
0xC7,0x1E,0x38,0xF1,0x46,0xDB,0x66,0xDB,0x36,0xD9,0xA2,0xC7,0x1C,0x38,0xE1,0x83,0x00, // 'W'
|
||||||
|
0xC3,0x66,0x7E,0x3C,0x18,0x3C,0x7E,0x66,0xC3,0xC3, // 'X'
|
||||||
|
0xC3,0xC3,0x66,0x3E,0x3C,0x18,0x18,0x18,0x18,0x18, // 'Y'
|
||||||
|
0x7F,0x3F,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0xC0, // 'Z'
|
||||||
|
0xFF,0xCC,0xCC,0xCC,0xCC,0xCF,0xF0, // '['
|
||||||
|
0xCC,0x44,0x66,0x22,0x33, // '\'
|
||||||
|
0xFF,0x33,0x33,0x33,0x33,0x3F,0xF0, // ']'
|
||||||
|
0x30,0xE7,0x9A,0xCF,0x30, // '^'
|
||||||
|
0xFE, // '_'
|
||||||
|
0xD0, // '`'
|
||||||
|
0x7D,0x8C,0x7F,0x3C,0x79,0xDD,0x80, // 'a'
|
||||||
|
0xC1,0x83,0x06,0xEF,0xF8,0xF1,0xE3,0xFF,0xB8, // 'b'
|
||||||
|
0x3C,0xFF,0x1E,0x0C,0x6F,0xCF,0x00, // 'c'
|
||||||
|
0x06,0x0C,0x1B,0xBF,0xF8,0xF1,0xE3,0xFE,0xEC, // 'd'
|
||||||
|
0x3C,0xCF,0x1F,0xFC,0x0C,0xCF,0x00, // 'e'
|
||||||
|
0x3B,0x19,0xF6,0x31,0x8C,0x63,0x00, // 'f'
|
||||||
|
0x77,0xFF,0x1E,0x3C,0x7F,0xDD,0xE3,0xC6,0xF8, // 'g'
|
||||||
|
0xC1,0x83,0x06,0xEF,0xF8,0xF1,0xE3,0xC7,0x8C, // 'h'
|
||||||
|
0xF3,0xFF,0xF0, // 'i'
|
||||||
|
0x33,0x03,0x33,0x33,0x33,0x3F,0xE0, // 'j'
|
||||||
|
0xC1,0x83,0x06,0x6D,0x9E,0x3E,0x66,0xCD,0x8C, // 'k'
|
||||||
|
0xFF,0xFF,0xF0, // 'l'
|
||||||
|
0xD9,0xDF,0xFF,0x31,0xE6,0x3C,0xC7,0x98,0xF3,0x18, // 'm'
|
||||||
|
0xDD,0xFF,0x1E,0x3C,0x78,0xF1,0x80, // 'n'
|
||||||
|
0x38,0xFB,0x1E,0x3C,0x6F,0x8E,0x00, // 'o'
|
||||||
|
0xDD,0xFF,0x1E,0x3C,0x7F,0xF7,0x60,0xC1,0x80, // 'p'
|
||||||
|
0x77,0xFF,0x1E,0x3C,0x7F,0xDD,0x83,0x06,0x0C, // 'q'
|
||||||
|
0xDF,0xF1,0x8C,0x63,0x00, // 'r'
|
||||||
|
0x7B,0x3E,0x1E,0x0F,0x37,0x80, // 's'
|
||||||
|
0x63,0x19,0xF6,0x31,0x8C,0x79,0xC0, // 't'
|
||||||
|
0xC7,0x8F,0x1E,0x3C,0x7F,0xDD,0x80, // 'u'
|
||||||
|
0xC7,0x8D,0x93,0x62,0x87,0x04,0x00, // 'v'
|
||||||
|
0xC4,0x79,0xCD,0x29,0x35,0x67,0xBC,0x63,0x0C,0x60, // 'w'
|
||||||
|
0xC6,0xD9,0xF1,0xC7,0xCD,0xB1,0x80, // 'x'
|
||||||
|
0xC7,0x8D,0x93,0x62,0xC7,0x06,0x18,0xF1,0xC0, // 'y'
|
||||||
|
0xFE,0x18,0x61,0x86,0x1F,0xFF,0x80, // 'z'
|
||||||
|
0x19,0xCC,0x63,0x3B,0x8E,0x31,0x8C,0x71,0x80, // '{'
|
||||||
|
0xFF,0xFF,0xFF,0xC0, // '|'
|
||||||
|
0xC7,0x18,0xC6,0x38,0xEE,0x63,0x19,0xCC,0x00 // '}'
|
||||||
|
};
|
||||||
|
const GFXglyph ArialRoundedMTBold_14Glyphs[] PROGMEM = {
|
||||||
|
// bitmapOffset, width, height, xAdvance, xOffset, yOffset
|
||||||
|
{ 0, 1, 1, 5, 0, 0 }, // ' '
|
||||||
|
{ 1, 2, 10, 6, 1, -10 }, // '!'
|
||||||
|
{ 4, 5, 3, 8, 1, -10 }, // '"'
|
||||||
|
{ 6, 8, 10, 9, 0, -10 }, // '#'
|
||||||
|
{ 16, 7, 15, 9, 1, -12 }, // '$'
|
||||||
|
{ 30, 11, 10, 13, 0, -10 }, // '%'
|
||||||
|
{ 44, 10, 10, 12, 1, -10 }, // '&'
|
||||||
|
{ 57, 2, 3, 4, 1, -10 }, // '''
|
||||||
|
{ 58, 4, 13, 6, 1, -10 }, // '('
|
||||||
|
{ 65, 4, 13, 6, 0, -10 }, // ')'
|
||||||
|
{ 72, 5, 6, 7, 1, -11 }, // '*'
|
||||||
|
{ 76, 8, 7, 9, 0, -9 }, // '+'
|
||||||
|
{ 83, 2, 4, 5, 1, -2 }, // ','
|
||||||
|
{ 84, 4, 2, 6, 0, -5 }, // '-'
|
||||||
|
{ 85, 2, 2, 5, 1, -2 }, // '.'
|
||||||
|
{ 86, 4, 10, 5, 0, -10 }, // '/'
|
||||||
|
{ 91, 7, 10, 9, 1, -10 }, // '0'
|
||||||
|
{ 100, 5, 10, 9, 1, -10 }, // '1'
|
||||||
|
{ 107, 7, 10, 9, 1, -10 }, // '2'
|
||||||
|
{ 116, 7, 10, 9, 1, -10 }, // '3'
|
||||||
|
{ 125, 8, 10, 9, 0, -10 }, // '4'
|
||||||
|
{ 135, 7, 10, 9, 1, -10 }, // '5'
|
||||||
|
{ 144, 7, 10, 9, 1, -10 }, // '6'
|
||||||
|
{ 153, 7, 10, 9, 1, -10 }, // '7'
|
||||||
|
{ 162, 7, 10, 9, 1, -10 }, // '8'
|
||||||
|
{ 171, 8, 10, 9, 0, -10 }, // '9'
|
||||||
|
{ 181, 2, 7, 5, 1, -7 }, // ':'
|
||||||
|
{ 183, 2, 9, 5, 1, -7 }, // ';'
|
||||||
|
{ 186, 7, 8, 9, 1, -9 }, // '<'
|
||||||
|
{ 193, 7, 5, 9, 1, -7 }, // '='
|
||||||
|
{ 198, 7, 8, 9, 1, -9 }, // '>'
|
||||||
|
{ 205, 7, 10, 9, 1, -10 }, // '?'
|
||||||
|
{ 214, 12, 13, 15, 1, -10 }, // '@'
|
||||||
|
{ 234, 9, 10, 11, 1, -10 }, // 'A'
|
||||||
|
{ 246, 8, 10, 11, 1, -10 }, // 'B'
|
||||||
|
{ 256, 9, 10, 11, 1, -10 }, // 'C'
|
||||||
|
{ 268, 9, 10, 11, 1, -10 }, // 'D'
|
||||||
|
{ 280, 8, 10, 10, 1, -10 }, // 'E'
|
||||||
|
{ 290, 7, 10, 9, 1, -10 }, // 'F'
|
||||||
|
{ 299, 9, 10, 12, 1, -10 }, // 'G'
|
||||||
|
{ 311, 9, 10, 12, 1, -10 }, // 'H'
|
||||||
|
{ 323, 2, 10, 5, 1, -10 }, // 'I'
|
||||||
|
{ 326, 7, 10, 9, 0, -10 }, // 'J'
|
||||||
|
{ 335, 9, 10, 11, 1, -10 }, // 'K'
|
||||||
|
{ 347, 7, 10, 9, 1, -10 }, // 'L'
|
||||||
|
{ 356, 10, 10, 13, 1, -10 }, // 'M'
|
||||||
|
{ 369, 9, 10, 12, 1, -10 }, // 'N'
|
||||||
|
{ 381, 10, 10, 12, 1, -10 }, // 'O'
|
||||||
|
{ 394, 8, 10, 10, 1, -10 }, // 'P'
|
||||||
|
{ 404, 11, 11, 12, 1, -10 }, // 'Q'
|
||||||
|
{ 420, 8, 10, 11, 1, -10 }, // 'R'
|
||||||
|
{ 430, 8, 10, 10, 1, -10 }, // 'S'
|
||||||
|
{ 440, 8, 10, 10, 0, -10 }, // 'T'
|
||||||
|
{ 450, 9, 10, 12, 1, -10 }, // 'U'
|
||||||
|
{ 462, 9, 10, 11, 0, -10 }, // 'V'
|
||||||
|
{ 474, 13, 10, 14, 0, -10 }, // 'W'
|
||||||
|
{ 491, 8, 10, 9, 0, -10 }, // 'X'
|
||||||
|
{ 501, 8, 10, 10, 0, -10 }, // 'Y'
|
||||||
|
{ 511, 9, 10, 10, 0, -10 }, // 'Z'
|
||||||
|
{ 523, 4, 13, 6, 1, -10 }, // '['
|
||||||
|
{ 530, 4, 10, 5, 0, -10 }, // '\'
|
||||||
|
{ 535, 4, 13, 6, 0, -10 }, // ']'
|
||||||
|
{ 542, 6, 6, 9, 1, -10 }, // '^'
|
||||||
|
{ 547, 7, 1, 8, 0, 1 }, // '_'
|
||||||
|
{ 548, 2, 2, 6, 1, -10 }, // '`'
|
||||||
|
{ 549, 7, 7, 9, 1, -7 }, // 'a'
|
||||||
|
{ 556, 7, 10, 10, 1, -10 }, // 'b'
|
||||||
|
{ 565, 7, 7, 9, 1, -7 }, // 'c'
|
||||||
|
{ 572, 7, 10, 10, 1, -10 }, // 'd'
|
||||||
|
{ 581, 7, 7, 9, 1, -7 }, // 'e'
|
||||||
|
{ 588, 5, 10, 6, 0, -10 }, // 'f'
|
||||||
|
{ 595, 7, 10, 10, 1, -7 }, // 'g'
|
||||||
|
{ 604, 7, 10, 9, 1, -10 }, // 'h'
|
||||||
|
{ 613, 2, 10, 5, 1, -10 }, // 'i'
|
||||||
|
{ 616, 4, 13, 5, -1, -10 }, // 'j'
|
||||||
|
{ 623, 7, 10, 9, 1, -10 }, // 'k'
|
||||||
|
{ 632, 2, 10, 5, 1, -10 }, // 'l'
|
||||||
|
{ 635, 11, 7, 13, 1, -7 }, // 'm'
|
||||||
|
{ 645, 7, 7, 9, 1, -7 }, // 'n'
|
||||||
|
{ 652, 7, 7, 9, 1, -7 }, // 'o'
|
||||||
|
{ 659, 7, 10, 10, 1, -7 }, // 'p'
|
||||||
|
{ 668, 7, 10, 10, 1, -7 }, // 'q'
|
||||||
|
{ 677, 5, 7, 7, 1, -7 }, // 'r'
|
||||||
|
{ 682, 6, 7, 9, 1, -7 }, // 's'
|
||||||
|
{ 688, 5, 10, 6, 0, -10 }, // 't'
|
||||||
|
{ 695, 7, 7, 9, 1, -7 }, // 'u'
|
||||||
|
{ 702, 7, 7, 9, 0, -7 }, // 'v'
|
||||||
|
{ 709, 11, 7, 12, 0, -7 }, // 'w'
|
||||||
|
{ 719, 7, 7, 8, 0, -7 }, // 'x'
|
||||||
|
{ 726, 7, 10, 9, 0, -7 }, // 'y'
|
||||||
|
{ 735, 7, 7, 8, 0, -7 }, // 'z'
|
||||||
|
{ 742, 5, 13, 6, 0, -10 }, // '{'
|
||||||
|
{ 751, 2, 13, 5, 1, -10 }, // '|'
|
||||||
|
{ 755, 5, 13, 6, 1, -10 } // '}'
|
||||||
|
};
|
||||||
|
const GFXfont ArialRoundedMTBold_14 PROGMEM = {
|
||||||
|
(uint8_t *)ArialRoundedMTBold_14Bitmaps,(GFXglyph *)ArialRoundedMTBold_14Glyphs,0x20, 0x7E, 17};
|
||||||
|
|
||||||
213
GfxUi.cpp
Normal file
213
GfxUi.cpp
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
/**The MIT License (MIT)
|
||||||
|
Copyright (c) 2015 by Daniel Eichhorn
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
See more at http://blog.squix.ch
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "GfxUi.h"
|
||||||
|
|
||||||
|
GfxUi::GfxUi(Adafruit_ILI9341 *tft) {
|
||||||
|
_tft = tft;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GfxUi::drawString(int x, int y, char *text) {
|
||||||
|
int16_t x1, y1;
|
||||||
|
uint16_t w, h;
|
||||||
|
_tft->setTextWrap(false);
|
||||||
|
_tft->getTextBounds(text, 0, 0, &x1, &y1, &w, &h);
|
||||||
|
switch (_alignment) {
|
||||||
|
case LEFT:
|
||||||
|
x1 = x;
|
||||||
|
break;
|
||||||
|
case CENTER:
|
||||||
|
x1 = x - w / 2;
|
||||||
|
break;
|
||||||
|
case RIGHT:
|
||||||
|
x1 = x - w;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (_textColor != _backgroundColor) {
|
||||||
|
_tft->fillRect(x1, y - h -1, w + 1, h + 1, _backgroundColor);
|
||||||
|
}
|
||||||
|
_tft->setCursor(x1, y);
|
||||||
|
_tft->print(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GfxUi::drawString(int x, int y, String text) {
|
||||||
|
char buf[text.length()+2];
|
||||||
|
text.toCharArray(buf, text.length() + 1);
|
||||||
|
drawString(x, y, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GfxUi::setTextColor(uint16_t c) {
|
||||||
|
setTextColor(c, c);
|
||||||
|
}
|
||||||
|
void GfxUi::setTextColor(uint16_t c, uint16_t bg) {
|
||||||
|
_textColor = c;
|
||||||
|
_backgroundColor = bg;
|
||||||
|
_tft->setTextColor(_textColor, _backgroundColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GfxUi::setTextAlignment(TextAlignment alignment) {
|
||||||
|
_alignment = alignment;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GfxUi::drawProgressBar(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint8_t percentage, uint16_t frameColor, uint16_t barColor) {
|
||||||
|
if (percentage == 0) {
|
||||||
|
_tft->fillRoundRect(x0, y0, w, h, 3, _backgroundColor);
|
||||||
|
}
|
||||||
|
uint8_t margin = 2;
|
||||||
|
uint16_t barHeight = h - 2 * margin;
|
||||||
|
uint16_t barWidth = w - 2 * margin;
|
||||||
|
_tft->drawRoundRect(x0, y0, w, h, 3, frameColor);
|
||||||
|
_tft->fillRect(x0 + margin, y0 + margin, barWidth * percentage / 100.0, barHeight, barColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Code mostly from
|
||||||
|
// https://github.com/adafruit/Adafruit_ILI9341/blob/master/examples/spitftbitmap/spitftbitmap.ino
|
||||||
|
void GfxUi::drawBmp(String filename, uint8_t x, uint16_t y) {
|
||||||
|
|
||||||
|
File bmpFile;
|
||||||
|
int bmpWidth, bmpHeight; // W+H in pixels
|
||||||
|
uint8_t bmpDepth; // Bit depth (currently must be 24)
|
||||||
|
uint32_t bmpImageoffset; // Start of image data in file
|
||||||
|
uint32_t rowSize; // Not always = bmpWidth; may have padding
|
||||||
|
uint8_t sdbuffer[3*BUFFPIXEL]; // pixel buffer (R+G+B per pixel)
|
||||||
|
uint8_t buffidx = sizeof(sdbuffer); // Current position in sdbuffer
|
||||||
|
boolean goodBmp = false; // Set to true on valid header parse
|
||||||
|
boolean flip = true; // BMP is stored bottom-to-top
|
||||||
|
int w, h, row, col;
|
||||||
|
uint8_t r, g, b;
|
||||||
|
uint32_t pos = 0, startTime = millis();
|
||||||
|
|
||||||
|
if((x >= _tft->width()) || (y >= _tft->height())) return;
|
||||||
|
|
||||||
|
Serial.println();
|
||||||
|
Serial.print(F("Loading image '"));
|
||||||
|
Serial.print(filename);
|
||||||
|
Serial.println('\'');
|
||||||
|
|
||||||
|
// Open requested file on SD card
|
||||||
|
if ((bmpFile = SPIFFS.open(filename, "r")) == NULL) {
|
||||||
|
Serial.print(F("File not found"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse BMP header
|
||||||
|
if(read16(bmpFile) == 0x4D42) { // BMP signature
|
||||||
|
Serial.print(F("File size: ")); Serial.println(read32(bmpFile));
|
||||||
|
(void)read32(bmpFile); // Read & ignore creator bytes
|
||||||
|
bmpImageoffset = read32(bmpFile); // Start of image data
|
||||||
|
Serial.print(F("Image Offset: ")); Serial.println(bmpImageoffset, DEC);
|
||||||
|
// Read DIB header
|
||||||
|
Serial.print(F("Header size: ")); Serial.println(read32(bmpFile));
|
||||||
|
bmpWidth = read32(bmpFile);
|
||||||
|
bmpHeight = read32(bmpFile);
|
||||||
|
if(read16(bmpFile) == 1) { // # planes -- must be '1'
|
||||||
|
bmpDepth = read16(bmpFile); // bits per pixel
|
||||||
|
Serial.print(F("Bit Depth: ")); Serial.println(bmpDepth);
|
||||||
|
if((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed
|
||||||
|
|
||||||
|
goodBmp = true; // Supported BMP format -- proceed!
|
||||||
|
Serial.print(F("Image size: "));
|
||||||
|
Serial.print(bmpWidth);
|
||||||
|
Serial.print('x');
|
||||||
|
Serial.println(bmpHeight);
|
||||||
|
|
||||||
|
// BMP rows are padded (if needed) to 4-byte boundary
|
||||||
|
rowSize = (bmpWidth * 3 + 3) & ~3;
|
||||||
|
|
||||||
|
// If bmpHeight is negative, image is in top-down order.
|
||||||
|
// This is not canon but has been observed in the wild.
|
||||||
|
if(bmpHeight < 0) {
|
||||||
|
bmpHeight = -bmpHeight;
|
||||||
|
flip = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crop area to be loaded
|
||||||
|
w = bmpWidth;
|
||||||
|
h = bmpHeight;
|
||||||
|
if((x+w-1) >= _tft->width()) w = _tft->width() - x;
|
||||||
|
if((y+h-1) >= _tft->height()) h = _tft->height() - y;
|
||||||
|
|
||||||
|
// Set TFT address window to clipped image bounds
|
||||||
|
_tft->setAddrWindow(x, y, x+w-1, y+h-1);
|
||||||
|
|
||||||
|
for (row=0; row<h; row++) { // For each scanline...
|
||||||
|
|
||||||
|
// Seek to start of scan line. It might seem labor-
|
||||||
|
// intensive to be doing this on every line, but this
|
||||||
|
// method covers a lot of gritty details like cropping
|
||||||
|
// and scanline padding. Also, the seek only takes
|
||||||
|
// place if the file position actually needs to change
|
||||||
|
// (avoids a lot of cluster math in SD library).
|
||||||
|
if(flip) // Bitmap is stored bottom-to-top order (normal BMP)
|
||||||
|
pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize;
|
||||||
|
else // Bitmap is stored top-to-bottom
|
||||||
|
pos = bmpImageoffset + row * rowSize;
|
||||||
|
if(bmpFile.position() != pos) { // Need seek?
|
||||||
|
bmpFile.seek(pos, SeekSet);
|
||||||
|
buffidx = sizeof(sdbuffer); // Force buffer reload
|
||||||
|
}
|
||||||
|
|
||||||
|
for (col=0; col<w; col++) { // For each pixel...
|
||||||
|
// Time to read more pixel data?
|
||||||
|
if (buffidx >= sizeof(sdbuffer)) { // Indeed
|
||||||
|
bmpFile.read(sdbuffer, sizeof(sdbuffer));
|
||||||
|
buffidx = 0; // Set index to beginning
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert pixel from BMP to TFT format, push to display
|
||||||
|
b = sdbuffer[buffidx++];
|
||||||
|
g = sdbuffer[buffidx++];
|
||||||
|
r = sdbuffer[buffidx++];
|
||||||
|
_tft->pushColor(_tft->color565(r,g,b));
|
||||||
|
yield();
|
||||||
|
} // end pixel
|
||||||
|
} // end scanline
|
||||||
|
Serial.print(F("Loaded in "));
|
||||||
|
Serial.print(millis() - startTime);
|
||||||
|
Serial.println(" ms");
|
||||||
|
} // end goodBmp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bmpFile.close();
|
||||||
|
if(!goodBmp) Serial.println(F("BMP format not recognized."));
|
||||||
|
}
|
||||||
|
|
||||||
|
// These read 16- and 32-bit types from the SD card file.
|
||||||
|
// BMP data is stored little-endian, Arduino is little-endian too.
|
||||||
|
// May need to reverse subscript order if porting elsewhere.
|
||||||
|
|
||||||
|
uint16_t GfxUi::read16(File &f) {
|
||||||
|
uint16_t result;
|
||||||
|
((uint8_t *)&result)[0] = f.read(); // LSB
|
||||||
|
((uint8_t *)&result)[1] = f.read(); // MSB
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t GfxUi::read32(File &f) {
|
||||||
|
uint32_t result;
|
||||||
|
((uint8_t *)&result)[0] = f.read(); // LSB
|
||||||
|
((uint8_t *)&result)[1] = f.read();
|
||||||
|
((uint8_t *)&result)[2] = f.read();
|
||||||
|
((uint8_t *)&result)[3] = f.read(); // MSB
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
56
GfxUi.h
Normal file
56
GfxUi.h
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/**The MIT License (MIT)
|
||||||
|
Copyright (c) 2015 by Daniel Eichhorn
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
See more at http://blog.squix.ch
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Adafruit_ILI9341.h>
|
||||||
|
#include <FS.h>
|
||||||
|
|
||||||
|
#ifndef _GFX_UI_H
|
||||||
|
#define _GFX_UI_H
|
||||||
|
|
||||||
|
|
||||||
|
#define BUFFPIXEL 20
|
||||||
|
|
||||||
|
enum TextAlignment {
|
||||||
|
LEFT, CENTER, RIGHT
|
||||||
|
};
|
||||||
|
|
||||||
|
class GfxUi {
|
||||||
|
public:
|
||||||
|
GfxUi(Adafruit_ILI9341 * tft);
|
||||||
|
void drawString(int x, int y, char *text);
|
||||||
|
void drawString(int x, int y, String text);
|
||||||
|
void setTextAlignment(TextAlignment alignment);
|
||||||
|
void setTextColor(uint16_t c);
|
||||||
|
void setTextColor(uint16_t c, uint16_t bg);
|
||||||
|
void drawBmp(String filename, uint8_t x, uint16_t y);
|
||||||
|
void drawProgressBar(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t percentage, uint16_t frameColor, uint16_t barColor);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Adafruit_ILI9341 * _tft;
|
||||||
|
TextAlignment _alignment = LEFT;
|
||||||
|
uint16_t _textColor;
|
||||||
|
uint16_t _backgroundColor;
|
||||||
|
uint16_t read16(File &f);
|
||||||
|
uint32_t read32(File &f);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
104
WebResource.cpp
Normal file
104
WebResource.cpp
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
/**The MIT License (MIT)
|
||||||
|
Copyright (c) 2015 by Daniel Eichhorn
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
See more at http://blog.squix.ch
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "WebResource.h"
|
||||||
|
|
||||||
|
WebResource::WebResource(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebResource::downloadFile(String url, String filename) {
|
||||||
|
downloadFile(url, filename, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebResource::downloadFile(String url, String filename, ProgressCallback progressCallback) {
|
||||||
|
Serial.println("Downloading " + url + " and saving as " + filename);
|
||||||
|
|
||||||
|
if (SPIFFS.exists(filename) == true) {
|
||||||
|
Serial.println("File already exists. Skipping");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// wait for WiFi connection
|
||||||
|
if((_wifiMulti.run() == WL_CONNECTED)) {
|
||||||
|
HTTPClient http;
|
||||||
|
|
||||||
|
Serial.print("[HTTP] begin...\n");
|
||||||
|
|
||||||
|
// configure server and url
|
||||||
|
http.begin(url);
|
||||||
|
|
||||||
|
Serial.print("[HTTP] GET...\n");
|
||||||
|
// start connection and send HTTP header
|
||||||
|
int httpCode = http.GET();
|
||||||
|
if(httpCode > 0) {
|
||||||
|
//SPIFFS.remove(filename);
|
||||||
|
File f = SPIFFS.open(filename, "w+");
|
||||||
|
if (!f) {
|
||||||
|
Serial.println("file open failed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// HTTP header has been send and Server response header has been handled
|
||||||
|
Serial.printf("[HTTP] GET... code: %d\n", httpCode);
|
||||||
|
|
||||||
|
// file found at server
|
||||||
|
if(httpCode == HTTP_CODE_OK) {
|
||||||
|
|
||||||
|
// get lenght of document (is -1 when Server sends no Content-Length header)
|
||||||
|
int total = http.getSize();
|
||||||
|
int len = total;
|
||||||
|
progressCallback(filename, 0,total);
|
||||||
|
// create buffer for read
|
||||||
|
uint8_t buff[128] = { 0 };
|
||||||
|
|
||||||
|
// get tcp stream
|
||||||
|
WiFiClient * stream = http.getStreamPtr();
|
||||||
|
|
||||||
|
// read all data from server
|
||||||
|
while(http.connected() && (len > 0 || len == -1)) {
|
||||||
|
// get available data size
|
||||||
|
size_t size = stream->available();
|
||||||
|
|
||||||
|
if(size) {
|
||||||
|
// read up to 128 byte
|
||||||
|
int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size));
|
||||||
|
|
||||||
|
// write it to Serial
|
||||||
|
f.write(buff, c);
|
||||||
|
|
||||||
|
if(len > 0) {
|
||||||
|
len -= c;
|
||||||
|
}
|
||||||
|
progressCallback(filename, total - len,total);
|
||||||
|
}
|
||||||
|
delay(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println();
|
||||||
|
Serial.print("[HTTP] connection closed or file end.\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
f.close();
|
||||||
|
} else {
|
||||||
|
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
http.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
45
WebResource.h
Normal file
45
WebResource.h
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/**The MIT License (MIT)
|
||||||
|
Copyright (c) 2015 by Daniel Eichhorn
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
See more at http://blog.squix.ch
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <FS.h>
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <ESP8266WiFi.h>
|
||||||
|
#include <ESP8266WiFiMulti.h>
|
||||||
|
#include <ESP8266HTTPClient.h>
|
||||||
|
|
||||||
|
#ifndef _WEBRESOURCE_H
|
||||||
|
#define _WEBRESOURCE_H
|
||||||
|
|
||||||
|
typedef void (*ProgressCallback)(String fileName, int16_t bytesDownloaded, int16_t bytesTotal);
|
||||||
|
|
||||||
|
class WebResource {
|
||||||
|
public:
|
||||||
|
WebResource();
|
||||||
|
void downloadFile(String url, String filename, ProgressCallback progressCallback);
|
||||||
|
void downloadFile(String url, String filename);
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
ESP8266WiFiMulti _wifiMulti;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
341
esp8266-weather-station-color.ino
Normal file
341
esp8266-weather-station-color.ino
Normal file
@@ -0,0 +1,341 @@
|
|||||||
|
/**The MIT License (MIT)
|
||||||
|
Copyright (c) 2015 by Daniel Eichhorn
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
See more at http://blog.squix.ch
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
#include <Adafruit_GFX.h> // Core graphics library
|
||||||
|
#include <Adafruit_ILI9341.h> // Hardware-specific library
|
||||||
|
#include <SPI.h>
|
||||||
|
// Additional UI functions
|
||||||
|
#include "GfxUi.h"
|
||||||
|
|
||||||
|
// Fonts created by http://oleddisplay.squix.ch/
|
||||||
|
#include "ArialRoundedMTBold_14.h"
|
||||||
|
#include "ArialRoundedMTBold_36.h"
|
||||||
|
|
||||||
|
// Download helper
|
||||||
|
#include "WebResource.h"
|
||||||
|
|
||||||
|
#include <ESP8266WiFi.h>
|
||||||
|
#include <ArduinoOTA.h>
|
||||||
|
#include <ESP8266mDNS.h>
|
||||||
|
#include <DNSServer.h>
|
||||||
|
#include <ESP8266WebServer.h>
|
||||||
|
|
||||||
|
// Helps with connecting to internet
|
||||||
|
#include <WiFiManager.h>
|
||||||
|
|
||||||
|
// check settings.h for adapting to your needs
|
||||||
|
#include "settings.h"
|
||||||
|
#include <JsonListener.h>
|
||||||
|
#include <WundergroundClient.h>
|
||||||
|
#include "TimeClient.h"
|
||||||
|
|
||||||
|
// HOSTNAME for OTA update
|
||||||
|
#define HOSTNAME "ESP8266-OTA-"
|
||||||
|
|
||||||
|
/*****************************
|
||||||
|
* Important: see settings.h to configure your settings!!!
|
||||||
|
* ***************************/
|
||||||
|
|
||||||
|
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
|
||||||
|
GfxUi ui = GfxUi(&tft);
|
||||||
|
|
||||||
|
|
||||||
|
WebResource webResource;
|
||||||
|
TimeClient timeClient(UTC_OFFSET);
|
||||||
|
|
||||||
|
// Set to false, if you prefere imperial/inches, Fahrenheit
|
||||||
|
WundergroundClient wunderground(IS_METRIC);
|
||||||
|
|
||||||
|
//declaring prototypes
|
||||||
|
void configModeCallback (WiFiManager *myWiFiManager);
|
||||||
|
void downloadCallback(String filename, int16_t bytesDownloaded, int16_t bytesTotal);
|
||||||
|
ProgressCallback _downloadCallback = downloadCallback;
|
||||||
|
void downloadResources();
|
||||||
|
void updateData();
|
||||||
|
void drawProgress(uint8_t percentage, String text);
|
||||||
|
void drawTime();
|
||||||
|
void drawCurrentWeather();
|
||||||
|
void drawForecast();
|
||||||
|
void drawForecastDetail(uint16_t x, uint16_t y, uint8_t dayIndex);
|
||||||
|
String getMeteoconIcon(String iconText);
|
||||||
|
void drawAstronomy();
|
||||||
|
void drawSeparator(uint16_t y);
|
||||||
|
|
||||||
|
long lastDownloadUpdate = millis();
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
tft.begin();
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
tft.setFont(&ArialRoundedMTBold_14);
|
||||||
|
ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK);
|
||||||
|
ui.setTextAlignment(CENTER);
|
||||||
|
ui.drawString(120, 160, "Connecting to WiFi");
|
||||||
|
|
||||||
|
//WiFiManager
|
||||||
|
//Local intialization. Once its business is done, there is no need to keep it around
|
||||||
|
WiFiManager wifiManager;
|
||||||
|
// Uncomment for testing wifi manager
|
||||||
|
//wifiManager.resetSettings();
|
||||||
|
wifiManager.setAPCallback(configModeCallback);
|
||||||
|
|
||||||
|
//or use this for auto generated name ESP + ChipID
|
||||||
|
wifiManager.autoConnect();
|
||||||
|
|
||||||
|
//Manual Wifi
|
||||||
|
//WiFi.begin(WIFI_SSID, WIFI_PWD);
|
||||||
|
|
||||||
|
// OTA Setup
|
||||||
|
String hostname(HOSTNAME);
|
||||||
|
hostname += String(ESP.getChipId(), HEX);
|
||||||
|
WiFi.hostname(hostname);
|
||||||
|
ArduinoOTA.setHostname((const char *)hostname.c_str());
|
||||||
|
ArduinoOTA.begin();
|
||||||
|
SPIFFS.begin();
|
||||||
|
|
||||||
|
//Uncomment if you want to update all internet resources
|
||||||
|
//SPIFFS.format();
|
||||||
|
|
||||||
|
// download images from the net. If images already exist don't download
|
||||||
|
downloadResources();
|
||||||
|
|
||||||
|
// load the weather information
|
||||||
|
updateData();
|
||||||
|
}
|
||||||
|
|
||||||
|
long lastDrew = 0;
|
||||||
|
void loop() {
|
||||||
|
// Handle OTA update requests
|
||||||
|
ArduinoOTA.handle();
|
||||||
|
|
||||||
|
// Check if we should update the clock
|
||||||
|
if (millis() - lastDrew > 30000 && wunderground.getSeconds() == "00") {
|
||||||
|
drawTime();
|
||||||
|
lastDrew = millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if we should update weather information
|
||||||
|
if (millis() - lastDownloadUpdate > 1000 * UPDATE_INTERVAL_SECS) {
|
||||||
|
updateData();
|
||||||
|
lastDownloadUpdate = millis();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called if WiFi has not been configured yet
|
||||||
|
void configModeCallback (WiFiManager *myWiFiManager) {
|
||||||
|
ui.setTextAlignment(CENTER);
|
||||||
|
tft.setFont(&ArialRoundedMTBold_14);
|
||||||
|
tft.setTextColor(ILI9341_ORANGE);
|
||||||
|
ui.drawString(120, 28, "Wifi Manager");
|
||||||
|
ui.drawString(120, 42, "Please connect to AP");
|
||||||
|
tft.setTextColor(ILI9341_WHITE);
|
||||||
|
ui.drawString(120, 56, myWiFiManager->getConfigPortalSSID());
|
||||||
|
tft.setTextColor(ILI9341_ORANGE);
|
||||||
|
ui.drawString(120, 70, "To setup Wifi Configuration");
|
||||||
|
}
|
||||||
|
|
||||||
|
// callback called during download of files. Updates progress bar
|
||||||
|
void downloadCallback(String filename, int16_t bytesDownloaded, int16_t bytesTotal) {
|
||||||
|
Serial.println(String(bytesDownloaded) + " / " + String(bytesTotal));
|
||||||
|
|
||||||
|
int percentage = 100 * bytesDownloaded / bytesTotal;
|
||||||
|
if (percentage == 0) {
|
||||||
|
ui.drawString(120, 160, filename);
|
||||||
|
}
|
||||||
|
if (percentage % 5 == 0) {
|
||||||
|
ui.setTextAlignment(CENTER);
|
||||||
|
ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK);
|
||||||
|
//ui.drawString(120, 160, String(percentage) + "%");
|
||||||
|
ui.drawProgressBar(10, 165, 240 - 20, 15, percentage, ILI9341_WHITE, ILI9341_BLUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Download the bitmaps
|
||||||
|
void downloadResources() {
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
char id[5];
|
||||||
|
for (int i = 0; i < 21; i++) {
|
||||||
|
sprintf(id, "%02d", i);
|
||||||
|
tft.fillRect(0, 120, 240, 40, ILI9341_BLACK);
|
||||||
|
webResource.downloadFile("http://www.squix.org/blog/wunderground/" + wundergroundIcons[i] + ".bmp", wundergroundIcons[i] + ".bmp", _downloadCallback);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 21; i++) {
|
||||||
|
sprintf(id, "%02d", i);
|
||||||
|
tft.fillRect(0, 120, 240, 40, ILI9341_BLACK);
|
||||||
|
webResource.downloadFile("http://www.squix.org/blog/wunderground/mini/" + wundergroundIcons[i] + ".bmp", "/mini/" + wundergroundIcons[i] + ".bmp", _downloadCallback);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 23; i++) {
|
||||||
|
tft.fillRect(0, 120, 240, 40, ILI9341_BLACK);
|
||||||
|
webResource.downloadFile("http://www.squix.org/blog/moonphase_L" + String(i) + ".bmp", "/moon" + String(i) + ".bmp", _downloadCallback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the internet based information and update screen
|
||||||
|
void updateData() {
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
drawProgress(20, "Updating time...");
|
||||||
|
timeClient.updateTime();
|
||||||
|
drawProgress(50, "Updating conditions...");
|
||||||
|
wunderground.updateConditions(WUNDERGRROUND_API_KEY, WUNDERGRROUND_LANGUAGE, WUNDERGROUND_COUNTRY, WUNDERGROUND_CITY);
|
||||||
|
drawProgress(70, "Updating forecasts...");
|
||||||
|
wunderground.updateForecast(WUNDERGRROUND_API_KEY, WUNDERGRROUND_LANGUAGE, WUNDERGROUND_COUNTRY, WUNDERGROUND_CITY);
|
||||||
|
drawProgress(90, "Updating astronomy...");
|
||||||
|
wunderground.updateAstronomy(WUNDERGRROUND_API_KEY, WUNDERGRROUND_LANGUAGE, WUNDERGROUND_COUNTRY, WUNDERGROUND_CITY);
|
||||||
|
//lastUpdate = timeClient.getFormattedTime();
|
||||||
|
//readyForWeatherUpdate = false;
|
||||||
|
drawProgress(100, "Done...");
|
||||||
|
delay(1000);
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
drawTime();
|
||||||
|
drawCurrentWeather();
|
||||||
|
drawForecast();
|
||||||
|
drawAstronomy();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Progress bar helper
|
||||||
|
void drawProgress(uint8_t percentage, String text) {
|
||||||
|
ui.setTextAlignment(CENTER);
|
||||||
|
ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK);
|
||||||
|
tft.fillRect(0, 140, 240, 45, ILI9341_BLACK);
|
||||||
|
ui.drawString(120, 160, text);
|
||||||
|
ui.drawProgressBar(10, 165, 240 - 20, 15, percentage, ILI9341_WHITE, ILI9341_BLUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// draws the clock
|
||||||
|
void drawTime() {
|
||||||
|
ui.setTextAlignment(CENTER);
|
||||||
|
ui.setTextColor(ILI9341_WHITE, ILI9341_BLACK);
|
||||||
|
tft.setFont(&ArialRoundedMTBold_14);
|
||||||
|
String date = wunderground.getDate();
|
||||||
|
ui.drawString(120, 20, date);
|
||||||
|
|
||||||
|
tft.setFont(&ArialRoundedMTBold_36);
|
||||||
|
String time = timeClient.getHours() + ":" + timeClient.getMinutes();
|
||||||
|
ui.drawString(120, 56, time);
|
||||||
|
drawSeparator(65);
|
||||||
|
}
|
||||||
|
|
||||||
|
// draws current weather information
|
||||||
|
void drawCurrentWeather() {
|
||||||
|
// Weather Icon
|
||||||
|
String weatherIcon = getMeteoconIcon(wunderground.getTodayIcon());
|
||||||
|
ui.drawBmp(weatherIcon + ".bmp", 0, 55);
|
||||||
|
|
||||||
|
// Weather Text
|
||||||
|
tft.setFont(&ArialRoundedMTBold_14);
|
||||||
|
ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK);
|
||||||
|
ui.setTextAlignment(RIGHT);
|
||||||
|
ui.drawString(220, 90, wunderground.getWeatherText());
|
||||||
|
|
||||||
|
tft.setFont(&ArialRoundedMTBold_36);
|
||||||
|
ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK);
|
||||||
|
ui.setTextAlignment(RIGHT);
|
||||||
|
String degreeSign = "F";
|
||||||
|
if (IS_METRIC) {
|
||||||
|
degreeSign = "C";
|
||||||
|
}
|
||||||
|
String temp = wunderground.getCurrentTemp() + degreeSign;
|
||||||
|
ui.drawString(220, 125, temp);
|
||||||
|
drawSeparator(135);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// draws the three forecast columns
|
||||||
|
void drawForecast() {
|
||||||
|
drawForecastDetail(10, 165, 0);
|
||||||
|
drawForecastDetail(95, 165, 2);
|
||||||
|
drawForecastDetail(180, 165, 4);
|
||||||
|
drawSeparator(165 + 65 + 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
// helper for the forecast columns
|
||||||
|
void drawForecastDetail(uint16_t x, uint16_t y, uint8_t dayIndex) {
|
||||||
|
ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK);
|
||||||
|
tft.setFont(&ArialRoundedMTBold_14);
|
||||||
|
ui.setTextAlignment(CENTER);
|
||||||
|
String day = wunderground.getForecastTitle(dayIndex).substring(0, 3);
|
||||||
|
day.toUpperCase();
|
||||||
|
ui.drawString(x + 25, y, day);
|
||||||
|
|
||||||
|
ui.setTextColor(ILI9341_WHITE, ILI9341_BLACK);
|
||||||
|
ui.drawString(x + 25, y + 14, wunderground.getForecastLowTemp(dayIndex) + "|" + wunderground.getForecastHighTemp(dayIndex));
|
||||||
|
|
||||||
|
String weatherIcon = getMeteoconIcon(wunderground.getForecastIcon(dayIndex));
|
||||||
|
ui.drawBmp("/mini/" + weatherIcon + ".bmp", x, y + 15);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw moonphase and sunrise/set and moonrise/set
|
||||||
|
void drawAstronomy() {
|
||||||
|
int moonAgeImage = 24 * wunderground.getMoonAge().toInt() / 30.0;
|
||||||
|
ui.drawBmp("/moon" + String(moonAgeImage) + ".bmp", 120 - 30, 255);
|
||||||
|
|
||||||
|
ui.setTextColor(ILI9341_WHITE, ILI9341_BLACK);
|
||||||
|
tft.setFont(&ArialRoundedMTBold_14);
|
||||||
|
ui.setTextAlignment(LEFT);
|
||||||
|
ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK);
|
||||||
|
ui.drawString(20, 270, "Sun");
|
||||||
|
ui.setTextColor(ILI9341_WHITE, ILI9341_BLACK);
|
||||||
|
ui.drawString(20, 285, wunderground.getSunriseTime());
|
||||||
|
ui.drawString(20, 300, wunderground.getSunsetTime());
|
||||||
|
|
||||||
|
ui.setTextAlignment(RIGHT);
|
||||||
|
ui.setTextColor(ILI9341_ORANGE, ILI9341_BLACK);
|
||||||
|
ui.drawString(220, 270, "Moon");
|
||||||
|
ui.setTextColor(ILI9341_WHITE, ILI9341_BLACK);
|
||||||
|
ui.drawString(220, 285, wunderground.getMoonriseTime());
|
||||||
|
ui.drawString(220, 300, wunderground.getMoonsetTime());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper function, should be part of the weather station library and should disappear soon
|
||||||
|
String getMeteoconIcon(String iconText) {
|
||||||
|
if (iconText == "F") return "chanceflurries";
|
||||||
|
if (iconText == "Q") return "chancerain";
|
||||||
|
if (iconText == "W") return "chancesleet";
|
||||||
|
if (iconText == "V") return "chancesnow";
|
||||||
|
if (iconText == "S") return "chancetstorms";
|
||||||
|
if (iconText == "B") return "clear";
|
||||||
|
if (iconText == "Y") return "cloudy";
|
||||||
|
if (iconText == "F") return "flurries";
|
||||||
|
if (iconText == "M") return "fog";
|
||||||
|
if (iconText == "E") return "hazy";
|
||||||
|
if (iconText == "Y") return "mostlycloudy";
|
||||||
|
if (iconText == "H") return "mostlysunny";
|
||||||
|
if (iconText == "H") return "partlycloudy";
|
||||||
|
if (iconText == "J") return "partlysunny";
|
||||||
|
if (iconText == "W") return "sleet";
|
||||||
|
if (iconText == "R") return "rain";
|
||||||
|
if (iconText == "W") return "snow";
|
||||||
|
if (iconText == "B") return "sunny";
|
||||||
|
if (iconText == "0") return "tstorms";
|
||||||
|
|
||||||
|
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
|
||||||
|
// if you want separators, uncomment the tft-line
|
||||||
|
void drawSeparator(uint16_t y) {
|
||||||
|
//tft.drawFastHLine(10, y, 240 - 2 * 10, 0x4228);
|
||||||
|
}
|
||||||
|
|
||||||
47
settings.h
Normal file
47
settings.h
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
/**The MIT License (MIT)
|
||||||
|
Copyright (c) 2015 by Daniel Eichhorn
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
See more at http://blog.squix.ch
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Setup
|
||||||
|
const int UPDATE_INTERVAL_SECS = 10 * 60; // Update every 10 minutes
|
||||||
|
|
||||||
|
// Pins for the ILI9341
|
||||||
|
#define TFT_DC 2
|
||||||
|
#define TFT_CS 5
|
||||||
|
|
||||||
|
// TimeClient settings
|
||||||
|
const float UTC_OFFSET = 2;
|
||||||
|
|
||||||
|
// Wunderground Settings
|
||||||
|
const boolean IS_METRIC = true;
|
||||||
|
const String WUNDERGRROUND_API_KEY = "<WUNDERGROUND KEY HERE>";
|
||||||
|
const String WUNDERGRROUND_LANGUAGE = "EN";
|
||||||
|
const String WUNDERGROUND_COUNTRY = "CH";
|
||||||
|
const String WUNDERGROUND_CITY = "Zurich";
|
||||||
|
|
||||||
|
//Thingspeak Settings
|
||||||
|
const String THINGSPEAK_CHANNEL_ID = "67284";
|
||||||
|
const String THINGSPEAK_API_READ_KEY = "L2VIW20QVNZJBLAK";
|
||||||
|
|
||||||
|
// List, so that the downloader knows what to fetch
|
||||||
|
String wundergroundIcons [] = {"chanceflurries","chancerain","chancesleet","chancesnow","clear","cloudy","flurries","fog","hazy","mostlycloudy","mostlysunny","partlycloudy","partlysunny","rain","sleet","snow","sunny","tstorms","unknown"};
|
||||||
|
|
||||||
|
/***************************
|
||||||
|
* End Settings
|
||||||
|
**************************/
|
||||||
Reference in New Issue
Block a user