├── LICENSE ├── README.md ├── cyd_getting_started └── cyd_getting_started.ino ├── cyd_sprite_demo ├── DejaVu_Sans_Bold_10.h └── cyd_sprite_demo.ino ├── cyd_weather ├── README.txt ├── Roboto_24.h ├── Roboto_25.h ├── Roboto_Black_16.h ├── Roboto_Black_20.h ├── Roboto_Black_24.h ├── Roboto_Black_28.h ├── Roboto_Black_40.h ├── Roboto_Black_50.h ├── Roboto_Thin66pt7b.h ├── cyd_weather.ino ├── debug.cfg ├── debug_custom.json ├── esp32s3.svd ├── hand_4bpp.h ├── humidity_4bpp.h ├── rain_4bpp.h ├── sunrise_4bpp.h ├── sunset_4bpp.h ├── temp_4bpp.h ├── uv_icon_4bpp.h ├── weather_icons.h └── wind_4bpp.h ├── gif_example ├── bart_396x222.h ├── darthvader.h ├── earth_128x128.h ├── gif_example.ino ├── homer_car_240x135.h ├── hyperspace.h └── thisisfine_128x128.h ├── gif_from_sd └── gif_from_sd.ino ├── ip_camera_viewer └── ip_camera_viewer.ino ├── jpeg_example ├── jpeg_example.ino └── zebra.h ├── lcd_clock ├── DejaVu_Sans_Mono_Bold_28.h ├── DejaVu_Sans_Mono_Bold_48.h ├── Roboto_Thin100pt7b.h ├── Roboto_Thin66pt7b.h ├── humidity.h ├── lcd_clock.ino └── temp_bw.h ├── scrolling_terminal └── scrolling_terminal.ino ├── sound_board ├── doh.h ├── looking.h ├── pacman_death.h ├── sorry_dave.h └── sound_board.ino └── web_image_viewer └── web_image_viewer.ino /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 BitBank Software, Inc. All rights reserved. 2 | 3 | Apache License 4 | Version 2.0, January 2004 5 | http://www.apache.org/licenses/ 6 | 7 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 8 | 9 | 1. Definitions. 10 | 11 | "License" shall mean the terms and conditions for use, reproduction, 12 | and distribution as defined by Sections 1 through 9 of this document. 13 | 14 | "Licensor" shall mean the copyright owner or entity authorized by 15 | the copyright owner that is granting the License. 16 | 17 | "Legal Entity" shall mean the union of the acting entity and all 18 | other entities that control, are controlled by, or are under common 19 | control with that entity. For the purposes of this definition, 20 | "control" means (i) the power, direct or indirect, to cause the 21 | direction or management of such entity, whether by contract or 22 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 23 | outstanding shares, or (iii) beneficial ownership of such entity. 24 | 25 | "You" (or "Your") shall mean an individual or Legal Entity 26 | exercising permissions granted by this License. 27 | 28 | "Source" form shall mean the preferred form for making modifications, 29 | including but not limited to software source code, documentation 30 | source, and configuration files. 31 | 32 | "Object" form shall mean any form resulting from mechanical 33 | transformation or translation of a Source form, including but 34 | not limited to compiled object code, generated documentation, 35 | and conversions to other media types. 36 | 37 | "Work" shall mean the work of authorship, whether in Source or 38 | Object form, made available under the License, as indicated by a 39 | copyright notice that is included in or attached to the work 40 | (an example is provided in the Appendix below). 41 | 42 | "Derivative Works" shall mean any work, whether in Source or Object 43 | form, that is based on (or derived from) the Work and for which the 44 | editorial revisions, annotations, elaborations, or other modifications 45 | represent, as a whole, an original work of authorship. For the purposes 46 | of this License, Derivative Works shall not include works that remain 47 | separable from, or merely link (or bind by name) to the interfaces of, 48 | the Work and Derivative Works thereof. 49 | 50 | "Contribution" shall mean any work of authorship, including 51 | the original version of the Work and any modifications or additions 52 | to that Work or Derivative Works thereof, that is intentionally 53 | submitted to Licensor for inclusion in the Work by the copyright owner 54 | or by an individual or Legal Entity authorized to submit on behalf of 55 | the copyright owner. For the purposes of this definition, "submitted" 56 | means any form of electronic, verbal, or written communication sent 57 | to the Licensor or its representatives, including but not limited to 58 | communication on electronic mailing lists, source code control systems, 59 | and issue tracking systems that are managed by, or on behalf of, the 60 | Licensor for the purpose of discussing and improving the Work, but 61 | excluding communication that is conspicuously marked or otherwise 62 | designated in writing by the copyright owner as "Not a Contribution." 63 | 64 | "Contributor" shall mean Licensor and any individual or Legal Entity 65 | on behalf of whom a Contribution has been received by Licensor and 66 | subsequently incorporated within the Work. 67 | 68 | 2. Grant of Copyright License. Subject to the terms and conditions of 69 | this License, each Contributor hereby grants to You a perpetual, 70 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 71 | copyright license to reproduce, prepare Derivative Works of, 72 | publicly display, publicly perform, sublicense, and distribute the 73 | Work and such Derivative Works in Source or Object form. 74 | 75 | 3. Grant of Patent License. Subject to the terms and conditions of 76 | this License, each Contributor hereby grants to You a perpetual, 77 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 78 | (except as stated in this section) patent license to make, have made, 79 | use, offer to sell, sell, import, and otherwise transfer the Work, 80 | where such license applies only to those patent claims licensable 81 | by such Contributor that are necessarily infringed by their 82 | Contribution(s) alone or by combination of their Contribution(s) 83 | with the Work to which such Contribution(s) was submitted. If You 84 | institute patent litigation against any entity (including a 85 | cross-claim or counterclaim in a lawsuit) alleging that the Work 86 | or a Contribution incorporated within the Work constitutes direct 87 | or contributory patent infringement, then any patent licenses 88 | granted to You under this License for that Work shall terminate 89 | as of the date such litigation is filed. 90 | 91 | 4. Redistribution. You may reproduce and distribute copies of the 92 | Work or Derivative Works thereof in any medium, with or without 93 | modifications, and in Source or Object form, provided that You 94 | meet the following conditions: 95 | 96 | (a) You must give any other recipients of the Work or 97 | Derivative Works a copy of this License; and 98 | 99 | (b) You must cause any modified files to carry prominent notices 100 | stating that You changed the files; and 101 | 102 | (c) You must retain, in the Source form of any Derivative Works 103 | that You distribute, all copyright, patent, trademark, and 104 | attribution notices from the Source form of the Work, 105 | excluding those notices that do not pertain to any part of 106 | the Derivative Works; and 107 | 108 | (d) If the Work includes a "NOTICE" text file as part of its 109 | distribution, then any Derivative Works that You distribute must 110 | include a readable copy of the attribution notices contained 111 | within such NOTICE file, excluding those notices that do not 112 | pertain to any part of the Derivative Works, in at least one 113 | of the following places: within a NOTICE text file distributed 114 | as part of the Derivative Works; within the Source form or 115 | documentation, if provided along with the Derivative Works; or, 116 | within a display generated by the Derivative Works, if and 117 | wherever such third-party notices normally appear. The contents 118 | of the NOTICE file are for informational purposes only and 119 | do not modify the License. You may add Your own attribution 120 | notices within Derivative Works that You distribute, alongside 121 | or as an addendum to the NOTICE text from the Work, provided 122 | that such additional attribution notices cannot be construed 123 | as modifying the License. 124 | 125 | You may add Your own copyright statement to Your modifications and 126 | may provide additional or different license terms and conditions 127 | for use, reproduction, or distribution of Your modifications, or 128 | for any such Derivative Works as a whole, provided Your use, 129 | reproduction, and distribution of the Work otherwise complies with 130 | the conditions stated in this License. 131 | 132 | 5. Submission of Contributions. Unless You explicitly state otherwise, 133 | any Contribution intentionally submitted for inclusion in the Work 134 | by You to the Licensor shall be under the terms and conditions of 135 | this License, without any additional terms or conditions. 136 | Notwithstanding the above, nothing herein shall supersede or modify 137 | the terms of any separate license agreement you may have executed 138 | with Licensor regarding such Contributions. 139 | 140 | 6. Trademarks. This License does not grant permission to use the trade 141 | names, trademarks, service marks, or product names of the Licensor, 142 | except as required for reasonable and customary use in describing the 143 | origin of the Work and reproducing the content of the NOTICE file. 144 | 145 | 7. Disclaimer of Warranty. Unless required by applicable law or 146 | agreed to in writing, Licensor provides the Work (and each 147 | Contributor provides its Contributions) on an "AS IS" BASIS, 148 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 149 | implied, including, without limitation, any warranties or conditions 150 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 151 | PARTICULAR PURPOSE. You are solely responsible for determining the 152 | appropriateness of using or redistributing the Work and assume any 153 | risks associated with Your exercise of permissions under this License. 154 | 155 | 8. Limitation of Liability. In no event and under no legal theory, 156 | whether in tort (including negligence), contract, or otherwise, 157 | unless required by applicable law (such as deliberate and grossly 158 | negligent acts) or agreed to in writing, shall any Contributor be 159 | liable to You for damages, including any direct, indirect, special, 160 | incidental, or consequential damages of any character arising as a 161 | result of this License or out of the use or inability to use the 162 | Work (including but not limited to damages for loss of goodwill, 163 | work stoppage, computer failure or malfunction, or any and all 164 | other commercial damages or losses), even if such Contributor 165 | has been advised of the possibility of such damages. 166 | 167 | 9. Accepting Warranty or Additional Liability. While redistributing 168 | the Work or Derivative Works thereof, You may choose to offer, 169 | and charge a fee for, acceptance of support, warranty, indemnity, 170 | or other liability obligations and/or rights consistent with this 171 | License. However, in accepting such obligations, You may act only 172 | on Your own behalf and on Your sole responsibility, not on behalf 173 | of any other Contributor, and only if You agree to indemnify, 174 | defend, and hold each Contributor harmless for any liability 175 | incurred by, or claims asserted against, such Contributor by reason 176 | of your accepting any such warranty or additional liability. 177 | 178 | END OF TERMS AND CONDITIONS 179 | 180 | APPENDIX: How to apply the Apache License to your work. 181 | 182 | To apply the Apache License to your work, attach the following 183 | boilerplate notice, with the fields enclosed by brackets "[]" 184 | replaced with your own identifying information. (Don't include 185 | the brackets!) The text should be enclosed in the appropriate 186 | comment syntax for the file format. We also recommend that a 187 | file or class name and description of purpose be included on the 188 | same "printed page" as the copyright notice for easier 189 | identification within third-party archives. 190 | 191 | Copyright 2020 BitBank Software, Inc. 192 | 193 | Licensed under the Apache License, Version 2.0 (the "License"); 194 | you may not use this file except in compliance with the License. 195 | You may obtain a copy of the License at 196 | 197 | http://www.apache.org/licenses/LICENSE-2.0 198 | 199 | Unless required by applicable law or agreed to in writing, software 200 | distributed under the License is distributed on an "AS IS" BASIS, 201 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 202 | See the License for the specific language governing permissions and 203 | limitations under the License. 204 | 205 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## CYD_Projects 2 | A collection of Arduino sketches for the various ESP32+LCD PCBs which we collectively call "Cheap Yellow Displays". Not every project is targeted to run on every permutation of CYD. My 2 favorite flavors are the original (2.8" ILI9341 w/resistive touch) and the JC4827W543 (4.3" 480x270 S3 w/resistive touch). 3 | Please feel free to add your own projects and improve the documentation.
4 | 5 | For each project, make sure to set the correct display type (constant value used by my bb_spi_lcd display library).
6 | Here is a list of the most common 'CYD's:
7 | - DISPLAY_CYD (original 2.8" with one Micro-USB port)
8 | - DISPLAY_CYD_2USB (newer 2.8" with 2 USB ports)
9 | - DISPLAY_CYD_22C (2.2" ST7789 w/capacitive touch)
10 | - DISPLAY_CYD_24R (2.4" ST7789 w/resistive touch)
11 | - DISPLAY_CYD_543 (4.3" JC4827W543 w/resistive or capacitive touch)
12 | - DISPLAY_CYD_128 (1.28" round ESP32-C3 w/capactive touch)
13 | - DISPLAY_CYD_35 (3.5" 480x320 w/capacitive touch)
14 | - DISPLAY_CYD_28C (2.8" 320x240 w/capacitive touch)
15 | 16 | 17 | -------------------------------------------------------------------------------- /cyd_getting_started/cyd_getting_started.ino: -------------------------------------------------------------------------------- 1 | // 2 | // Simple example of display and touch on CYDs (Cheap Yellow Displays) 3 | // 4 | // written by Larry Bank 5 | // Copyright (c) 2024 BitBank Software, Inc. 6 | // 7 | #include 8 | BB_SPI_LCD lcd; 9 | 10 | void setup() { 11 | lcd.begin(DISPLAY_CYD); // initialize the LCD in landscape mode 12 | lcd.fillScreen(TFT_BLACK); 13 | lcd.setFont(FONT_12x16); 14 | lcd.setTextColor(TFT_GREEN, TFT_BLACK); 15 | lcd.println("CYD LCD & Touch Test"); 16 | lcd.rtInit(); // initialize the resistive touch controller 17 | } /* setup() */ 18 | 19 | void loop() { 20 | TOUCHINFO ti; 21 | bool bPrinted = false; 22 | 23 | while (1) { 24 | lcd.rtReadTouch(&ti); 25 | if (ti.count > 0) { 26 | lcd.setCursor(0,16); 27 | lcd.printf("Touch at: %d,%d ", ti.x[0], ti.y[0]); 28 | bPrinted = true; 29 | } else { 30 | if (bPrinted) { // erase old info 31 | bPrinted = false; 32 | lcd.setCursor(0,16); 33 | lcd.print(" "); // erase the line 34 | } 35 | } 36 | } 37 | } /* loop() */ 38 | -------------------------------------------------------------------------------- /cyd_sprite_demo/DejaVu_Sans_Bold_10.h: -------------------------------------------------------------------------------- 1 | // Created by https://oleddisplay.squix.ch/ Consider a donation 2 | // In case of problems make sure that you are using the font file with the correct version! 3 | const uint8_t DejaVu_Sans_Bold_10Bitmaps[] PROGMEM = { 4 | 5 | // Bitmap Data: 6 | 0x00, // ' ' 7 | 0xDB,0x61,0xB0, // '!' 8 | 0xAA,0xA0, // '"' 9 | 0x14,0x24,0x7E,0x28,0xFC,0x48,0x50, // '#' 10 | 0x21,0xEA,0x3C,0x78,0xAF,0x08, // '$' 11 | 0x62,0x25,0x09,0x41,0xAC,0x14,0x85,0x22,0x30, // '%' 12 | 0x38,0x30,0x18,0x0E,0x2D,0xF6,0x71,0xEC, // '&' 13 | 0xA8, // ''' 14 | 0x64,0xCC,0xCC,0xC4,0x60, // '(' 15 | 0xC4,0x66,0x66,0x64,0xC0, // ')' 16 | 0x22,0xA7,0x1C,0xA8,0x80, // '*' 17 | 0x10,0x10,0x10,0xFE,0x10,0x10,0x10, // '+' 18 | 0xDA,0x00, // ',' 19 | 0xE0, // '-' 20 | 0xD8, // '.' 21 | 0x11,0x08,0x44,0x21,0x10, // '/' 22 | 0x79,0x9B,0x36,0x6C,0xD9,0x9E,0x00, // '0' 23 | 0xF0,0x60,0xC1,0x83,0x06,0x3F,0x00, // '1' 24 | 0xF8,0x18,0x30,0xC3,0x0C,0x3F,0x00, // '2' 25 | 0xF8,0x18,0x33,0xC0,0xC1,0xBE,0x00, // '3' 26 | 0x18,0x71,0x64,0xCF,0xC3,0x06,0x00, // '4' 27 | 0xF9,0x83,0xE0,0x60,0xC1,0xBE,0x00, // '5' 28 | 0x3C,0x83,0xE6,0x6C,0xD9,0x9E,0x00, // '6' 29 | 0xFC,0x18,0x60,0xC3,0x06,0x18,0x00, // '7' 30 | 0x79,0x9B,0x31,0x8C,0xD9,0x9E,0x00, // '8' 31 | 0x79,0x9B,0x36,0x67,0xC1,0x3C,0x00, // '9' 32 | 0xD8,0x6C, // ':' 33 | 0xD8,0x6D,0x00, // ';' 34 | 0x04,0x73,0x87,0x03,0x80,0x80, // '<' 35 | 0xFC,0x03,0xF0, // '=' 36 | 0x80,0xE0,0x70,0xE7,0x10,0x00, // '>' 37 | 0xF1,0x9C,0xC0,0x31,0x80, // '?' 38 | 0x3E,0x18,0x4D,0xEA,0x8A,0xA2,0xA8,0xAD,0xF1,0x88,0x3C,0x00, // '@' 39 | 0x18,0x1E,0x0F,0x0C,0xC7,0xE3,0x33,0x0C, // 'A' 40 | 0xF9,0x9B,0x37,0xCC,0xD9,0xBE,0x00, // 'B' 41 | 0x3C,0xCB,0x06,0x0C,0x0C,0x8F,0x00, // 'C' 42 | 0xF8,0xCC,0xC6,0xC6,0xC6,0xCC,0xF8, // 'D' 43 | 0xFB,0x0C,0x3E,0xC3,0x0F,0x80, // 'E' 44 | 0xFB,0x0C,0x3E,0xC3,0x0C,0x00, // 'F' 45 | 0x3E,0x62,0xC0,0xCE,0xC6,0x66,0x3E, // 'G' 46 | 0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6, // 'H' 47 | 0xDB,0x6D,0xB0, // 'I' 48 | 0x66,0x66,0x66,0x66,0xC0, // 'J' 49 | 0xCC,0xD8,0xF0,0xE0,0xF0,0xD8,0xCC, // 'K' 50 | 0xC3,0x0C,0x30,0xC3,0x0F,0x80, // 'L' 51 | 0xC3,0x73,0xB9,0xDB,0x6D,0xB6,0x1B,0x0C, // 'M' 52 | 0xE6,0xE6,0xD6,0xD6,0xCE,0xCE,0xC6, // 'N' 53 | 0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C, // 'O' 54 | 0xF9,0x9B,0x36,0x6F,0x98,0x30,0x00, // 'P' 55 | 0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x0C, // 'Q' 56 | 0xF8,0xCC,0xCC,0xCC,0xF8,0xCC,0xC6, // 'R' 57 | 0x7D,0x8B,0x03,0xC0,0xD1,0xBE,0x00, // 'S' 58 | 0xFC,0x60,0xC1,0x83,0x06,0x0C,0x00, // 'T' 59 | 0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C, // 'U' 60 | 0xC3,0x33,0x19,0x8C,0xC3,0xC1,0xE0,0x60, // 'V' 61 | 0xCC,0xD9,0x99,0x32,0x3F,0xC7,0x38,0x66,0x0C,0xC0, // 'W' 62 | 0xC6,0x6C,0x28,0x38,0x28,0x6C,0xC6, // 'X' 63 | 0xC3,0x33,0x0F,0x03,0x01,0x80,0xC0,0x60, // 'Y' 64 | 0xFC,0x18,0x61,0x86,0x18,0x3F,0x00, // 'Z' 65 | 0xEC,0xCC,0xCC,0xCC,0xE0, // '[' 66 | 0x82,0x10,0x82,0x10,0x82, // '\' 67 | 0xE6,0x66,0x66,0x66,0xE0, // ']' 68 | 0x30,0xF3,0x30, // '^' 69 | 0xF8, // '_' 70 | 0x42, // '`' 71 | 0xF8,0x19,0xF6,0x6F,0xC0, // 'a' 72 | 0xC1,0x83,0x07,0xCC,0xD9,0xB3,0x7C, // 'b' 73 | 0x7B,0x0C,0x30,0x78, // 'c' 74 | 0x0C,0x18,0x33,0xEC,0xD9,0xB3,0x3E, // 'd' 75 | 0x79,0x9B,0xF6,0x07,0xC0, // 'e' 76 | 0x39,0x86,0x3E,0x61,0x86,0x18, // 'f' 77 | 0x7D,0x9B,0x36,0x67,0xC1,0x9E,0x00, // 'g' 78 | 0xC1,0x83,0x07,0xCC,0xD9,0xB3,0x66, // 'h' 79 | 0xD8,0x6D,0xB6, // 'i' 80 | 0x66,0x06,0x66,0x66,0x6C, // 'j' 81 | 0xC1,0x83,0x06,0x6D,0x9E,0x36,0x66, // 'k' 82 | 0xDB,0x6D,0xB6, // 'l' 83 | 0xFF,0x99,0x9B,0x33,0x66,0x6C,0xCC, // 'm' 84 | 0xF9,0x9B,0x36,0x6C,0xC0, // 'n' 85 | 0x79,0x9B,0x36,0x67,0x80, // 'o' 86 | 0xF9,0x9B,0x36,0x6F,0x98,0x30,0x00, // 'p' 87 | 0x7D,0x9B,0x36,0x67,0xC1,0x83,0x00, // 'q' 88 | 0xF6,0x31,0x8C,0x00, // 'r' 89 | 0xFB,0x0F,0x86,0xF0, // 's' 90 | 0x61,0x8F,0x98,0x61,0x87,0x80, // 't' 91 | 0xCD,0x9B,0x36,0x67,0xC0, // 'u' 92 | 0xCD,0x99,0x23,0xC3,0x00, // 'v' 93 | 0xDB,0x6D,0x9F,0x8C,0xC6,0x60, // 'w' 94 | 0xCC,0xF0,0xC3,0xCC,0xC0, // 'x' 95 | 0xCC,0x91,0xE1,0x83,0x04,0x18,0x00, // 'y' 96 | 0xF1,0x99,0x8F,0x00, // 'z' 97 | 0x38,0xC3,0x0C,0xE0,0xC3,0x0C,0x38, // '{' 98 | 0xAA,0xAA,0xA0, // '|' 99 | 0xE1,0x86,0x18,0x39,0x86,0x18,0xE0 // '}' 100 | }; 101 | const GFXglyph DejaVu_Sans_Bold_10Glyphs[] PROGMEM = { 102 | // bitmapOffset, width, height, xAdvance, xOffset, yOffset 103 | { 0, 2, 1, 4, 0, -1 }, // ' ' 104 | { 1, 3, 7, 6, 1, -7 }, // '!' 105 | { 4, 4, 3, 6, 1, -7 }, // '"' 106 | { 6, 8, 7, 9, 1, -7 }, // '#' 107 | { 13, 6, 8, 8, 1, -7 }, // '$' 108 | { 19, 10, 7, 11, 1, -7 }, // '%' 109 | { 28, 9, 7, 10, 1, -7 }, // '&' 110 | { 36, 2, 3, 4, 1, -7 }, // ''' 111 | { 37, 4, 9, 6, 1, -8 }, // '(' 112 | { 42, 4, 9, 6, 1, -8 }, // ')' 113 | { 47, 6, 6, 6, 0, -7 }, // '*' 114 | { 52, 8, 7, 9, 1, -7 }, // '+' 115 | { 59, 3, 3, 5, 1, -2 }, // ',' 116 | { 61, 4, 1, 5, 1, -4 }, // '-' 117 | { 62, 3, 2, 5, 1, -2 }, // '.' 118 | { 63, 5, 8, 5, 0, -7 }, // '/' 119 | { 68, 7, 7, 8, 1, -7 }, // '0' 120 | { 75, 7, 7, 8, 1, -7 }, // '1' 121 | { 82, 7, 7, 8, 1, -7 }, // '2' 122 | { 89, 7, 7, 8, 1, -7 }, // '3' 123 | { 96, 7, 7, 8, 1, -7 }, // '4' 124 | { 103, 7, 7, 8, 1, -7 }, // '5' 125 | { 110, 7, 7, 8, 1, -7 }, // '6' 126 | { 117, 7, 7, 8, 1, -7 }, // '7' 127 | { 124, 7, 7, 8, 1, -7 }, // '8' 128 | { 131, 7, 7, 8, 1, -7 }, // '9' 129 | { 138, 3, 5, 5, 1, -5 }, // ':' 130 | { 140, 3, 6, 5, 1, -5 }, // ';' 131 | { 143, 7, 6, 9, 1, -6 }, // '<' 132 | { 149, 7, 3, 9, 1, -5 }, // '=' 133 | { 152, 7, 6, 9, 1, -6 }, // '>' 134 | { 158, 5, 7, 7, 1, -7 }, // '?' 135 | { 163, 10, 9, 11, 1, -7 }, // '@' 136 | { 175, 9, 7, 10, 1, -7 }, // 'A' 137 | { 183, 7, 7, 8, 1, -7 }, // 'B' 138 | { 190, 7, 7, 8, 1, -7 }, // 'C' 139 | { 197, 8, 7, 9, 1, -7 }, // 'D' 140 | { 204, 6, 7, 7, 1, -7 }, // 'E' 141 | { 210, 6, 7, 7, 1, -7 }, // 'F' 142 | { 216, 8, 7, 9, 1, -7 }, // 'G' 143 | { 223, 8, 7, 9, 1, -7 }, // 'H' 144 | { 230, 3, 7, 4, 1, -7 }, // 'I' 145 | { 233, 4, 9, 4, 0, -7 }, // 'J' 146 | { 238, 8, 7, 8, 1, -7 }, // 'K' 147 | { 245, 6, 7, 7, 1, -7 }, // 'L' 148 | { 251, 9, 7, 10, 1, -7 }, // 'M' 149 | { 259, 8, 7, 9, 1, -7 }, // 'N' 150 | { 266, 8, 7, 9, 1, -7 }, // 'O' 151 | { 273, 7, 7, 8, 1, -7 }, // 'P' 152 | { 280, 8, 8, 9, 1, -7 }, // 'Q' 153 | { 288, 8, 7, 9, 1, -7 }, // 'R' 154 | { 295, 7, 7, 8, 1, -7 }, // 'S' 155 | { 302, 7, 7, 8, 1, -7 }, // 'T' 156 | { 309, 8, 7, 9, 1, -7 }, // 'U' 157 | { 316, 9, 7, 10, 1, -7 }, // 'V' 158 | { 324, 11, 7, 12, 1, -7 }, // 'W' 159 | { 334, 8, 7, 9, 1, -7 }, // 'X' 160 | { 341, 9, 7, 8, 0, -7 }, // 'Y' 161 | { 349, 7, 7, 8, 1, -7 }, // 'Z' 162 | { 356, 4, 9, 6, 1, -8 }, // '[' 163 | { 361, 5, 8, 5, 0, -7 }, // '\' 164 | { 366, 4, 9, 6, 1, -8 }, // ']' 165 | { 371, 7, 3, 9, 1, -7 }, // '^' 166 | { 374, 6, 1, 6, 0, 1 }, // '_' 167 | { 375, 4, 2, 6, 0, -8 }, // '`' 168 | { 376, 7, 5, 8, 1, -5 }, // 'a' 169 | { 381, 7, 8, 8, 1, -8 }, // 'b' 170 | { 388, 6, 5, 7, 1, -5 }, // 'c' 171 | { 392, 7, 8, 8, 1, -8 }, // 'd' 172 | { 399, 7, 5, 8, 1, -5 }, // 'e' 173 | { 404, 6, 8, 5, 0, -8 }, // 'f' 174 | { 410, 7, 7, 8, 1, -5 }, // 'g' 175 | { 417, 7, 8, 8, 1, -8 }, // 'h' 176 | { 424, 3, 8, 4, 1, -8 }, // 'i' 177 | { 427, 4, 10, 4, 0, -8 }, // 'j' 178 | { 432, 7, 8, 8, 1, -8 }, // 'k' 179 | { 439, 3, 8, 4, 1, -8 }, // 'l' 180 | { 442, 11, 5, 12, 1, -5 }, // 'm' 181 | { 449, 7, 5, 8, 1, -5 }, // 'n' 182 | { 454, 7, 5, 8, 1, -5 }, // 'o' 183 | { 459, 7, 7, 8, 1, -5 }, // 'p' 184 | { 466, 7, 7, 8, 1, -5 }, // 'q' 185 | { 473, 5, 5, 6, 1, -5 }, // 'r' 186 | { 477, 6, 5, 7, 1, -5 }, // 's' 187 | { 481, 6, 7, 6, 0, -7 }, // 't' 188 | { 487, 7, 5, 8, 1, -5 }, // 'u' 189 | { 492, 7, 5, 8, 1, -5 }, // 'v' 190 | { 497, 9, 5, 10, 1, -5 }, // 'w' 191 | { 503, 7, 5, 8, 1, -5 }, // 'x' 192 | { 508, 7, 7, 8, 1, -5 }, // 'y' 193 | { 515, 5, 5, 6, 1, -5 }, // 'z' 194 | { 519, 6, 9, 8, 1, -8 }, // '{' 195 | { 526, 2, 10, 5, 1, -8 }, // '|' 196 | { 529, 6, 9, 8, 2, -8 } // '}' 197 | }; 198 | const GFXfont DejaVu_Sans_Bold_10 PROGMEM = { 199 | (uint8_t *)DejaVu_Sans_Bold_10Bitmaps,(GFXglyph *)DejaVu_Sans_Bold_10Glyphs,0x20, 0x7E, 13}; 200 | 201 | -------------------------------------------------------------------------------- /cyd_sprite_demo/cyd_sprite_demo.ino: -------------------------------------------------------------------------------- 1 | // 2 | // Example sketch demonstrating how to create a RAM (memory) drawing 3 | // surface with bb_spi_lcd. Other display libraries can call this a 'Sprite'' 4 | // This memory can be provided by you or the library can allocate it. 5 | // With bb_spi_lcd you will work with the main class instance for your physical LCD 6 | // and additional class instances for each 'sprite' drawing surface. To draw these 7 | // sprites onto the LCD, you can use the pushPixels() or pushImage() methods and 8 | // pass the memory pointer and the width of the source drawing surface. 9 | // 10 | // Written by Larry Bank (bitbank@pobox.com) 7/28/2024 11 | // Copyright (c) 2024 BitBank Software, Inc. 12 | // 13 | #include 14 | #include "DejaVu_Sans_Bold_10.h" 15 | 16 | uint16_t u16VirtualBuffer[88 * 48]; // holds a small block of pixels 17 | 18 | BB_SPI_LCD lcd, virt; // Two instances of the class - one for the physical LCD and the other for drawing into RAM 19 | 20 | void setup() { 21 | Serial.begin(115200); 22 | 23 | lcd.begin(DISPLAY_CYD_24R); // Initialize the display; make sure to set this correctly for your hardware type 24 | lcd.fillScreen(TFT_BLACK); 25 | lcd.setTextColor(TFT_GREEN); 26 | lcd.setFont(FONT_12x16); // use the built-in 12x16 font (really stretched+smoothed from 6x8) 27 | lcd.println("Virtual (sprite) Example"); // the println and printf methods are available on the ESP32 28 | lcd.println("This text is directly"); 29 | lcd.println("drawn on the LCD class"); 30 | virt.createVirtual(88, 48, u16VirtualBuffer); // width, height, optional buffer you provide 31 | virt.fillScreen(TFT_BLACK); 32 | virt.fillCircle(20, 14, 14, 0x2e0); // x, y, radius, color 33 | virt.fillCircle(60, 12, 12, TFT_BLUE); 34 | virt.fillCircle(40, 32, 16, TFT_RED); 35 | virt.setFreeFont(&DejaVu_Sans_Bold_10); // pass the pointer to the Arduino_GFX font data 36 | virt.setTextColor(TFT_YELLOW, TFT_YELLOW); // This will make the background color transparent (GFX font only on RAM drawing surface) 37 | virt.setCursor(0, 12); // Arduino_GFX fonts start from the baseline (y), not top 38 | virt.println("This"); 39 | virt.println("is a"); 40 | virt.println("sprite"); 41 | for (int i=0; i<4; i++) { 42 | lcd.pushImage(i*64, 64 + (i*40), 88, 48, u16VirtualBuffer); // draw 4 copies of the sprite across the LCD 43 | } 44 | } 45 | 46 | void loop() { 47 | } 48 | -------------------------------------------------------------------------------- /cyd_weather/README.txt: -------------------------------------------------------------------------------- 1 | CYD Weather Project 2 | ------------------- 3 | This program reads the current weather data from wttr.in as JSON and parses 4 | the values into useful info to display. The code is currently in a very early 5 | alpha stage because it was originally written for e-paper displays and I'm 6 | porting it for use on various sized LCDs. 7 | 8 | The quantity of font/image data requires that you set the ESP32 program partition 9 | size larger than the default. Try "no-OTA" or "large app". 10 | 11 | -------------------------------------------------------------------------------- /cyd_weather/Roboto_24.h: -------------------------------------------------------------------------------- 1 | // Created by http://oleddisplay.squix.ch/ Consider a donation 2 | // In case of problems make sure that you are using the font file with the correct version! 3 | const uint8_t Roboto_24Bitmaps[] PROGMEM = { 4 | 5 | // Bitmap Data: 6 | 0x00, // ' ' 7 | 0xDB,0x6D,0xB6,0xDB,0x60,0x06,0xC0, // '!' 8 | 0x94,0xA5,0x29,0x48, // '"' 9 | 0x06,0x30,0x18,0xC0,0x62,0x01,0x08,0x7F,0xF9,0xFF,0xE0,0xC6,0x03,0x10,0x08,0x40,0x23,0x0F,0xFF,0xBF,0xFE,0x18,0xC0,0x62,0x01,0x18,0x04,0x60,0x31,0x80, // '#' 10 | 0x06,0x00,0x60,0x06,0x01,0xF0,0x3F,0xC7,0x0C,0x60,0xE6,0x06,0x60,0x07,0x00,0x3C,0x01,0xF8,0x03,0xC0,0x0E,0x00,0x6C,0x06,0xE0,0x67,0x0E,0x3F,0xC1,0xF8,0x06,0x00,0x60, // '$' 11 | 0x3C,0x00,0x33,0x00,0x31,0x84,0x18,0x47,0x0C,0x22,0x06,0x33,0x01,0x99,0x00,0x79,0x80,0x01,0x80,0x00,0x9E,0x00,0xD9,0x80,0xC8,0x40,0x44,0x30,0x62,0x18,0x61,0x08,0x30,0xCC,0x00,0x3C,0x00, // '%' 12 | 0x0F,0x00,0x7F,0x00,0xC7,0x01,0x86,0x03,0x0C,0x06,0x30,0x0F,0xC0,0x0F,0x00,0x1E,0x00,0xEE,0x31,0x8C,0x66,0x0D,0xCC,0x0F,0x1C,0x0E,0x1C,0x3C,0x3F,0xFC,0x1F,0x1C, // '&' 13 | 0xDB,0x6D,0x80, // ''' 14 | 0x08,0x38,0x61,0x86,0x0C,0x18,0x60,0xC1,0x83,0x06,0x0C,0x18,0x30,0x60,0xC1,0x83,0x83,0x06,0x06,0x06,0x0E,0x08, // '(' 15 | 0x40,0xE0,0x30,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x0C,0x0E,0x0E,0x0E,0x0E,0x0E,0x0C,0x0C,0x0C,0x0C,0x18,0x18,0x30,0x30,0x60,0xC0, // ')' 16 | 0x0C,0x01,0x80,0x30,0x36,0xEF,0xFC,0x18,0x07,0x81,0x98,0x33,0x84,0x20, // '*' 17 | 0x06,0x00,0x30,0x01,0x80,0x0C,0x00,0x60,0x7F,0xFB,0xFF,0xC0,0xC0,0x06,0x00,0x30,0x01,0x80,0x0C,0x00, // '+' 18 | 0x73,0x9C,0xC6,0x60, // ',' 19 | 0xFD,0xF8, // '-' 20 | 0xD8, // '.' 21 | 0x01,0x80,0x60,0x30,0x0C,0x02,0x01,0x80,0x60,0x30,0x0C,0x02,0x01,0x80,0x60,0x30,0x0C,0x02,0x01,0x80,0x60,0x30,0x00, // '/' 22 | 0x1F,0x03,0xFC,0x71,0xC6,0x0E,0x60,0x6E,0x06,0xE0,0x6E,0x06,0xE0,0x6E,0x06,0xE0,0x6E,0x06,0x60,0x66,0x0E,0x71,0xC3,0xFC,0x1F,0x00, // '0' 23 | 0x06,0x3E,0xFE,0x8E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, // '1' 24 | 0x1F,0x01,0xFE,0x1C,0x71,0xC1,0xCC,0x06,0x00,0x30,0x03,0x00,0x18,0x01,0x80,0x18,0x01,0x80,0x18,0x01,0x80,0x18,0x01,0xC0,0x1F,0xFE,0xFF,0xF0, // '2' 25 | 0x1F,0x03,0xFC,0x71,0xCE,0x0E,0xC0,0xE0,0x0C,0x01,0xC0,0xF8,0x0F,0x80,0x1C,0x00,0xE0,0x06,0xC0,0x6E,0x0E,0x60,0xC7,0xFC,0x1F,0x00, // '3' 26 | 0x01,0xC0,0x1E,0x00,0xF0,0x0F,0x80,0xDC,0x06,0xE0,0x67,0x06,0x38,0x31,0xC3,0x0E,0x30,0x71,0xFF,0xEF,0xFF,0x00,0xE0,0x07,0x00,0x38,0x01,0xC0, // '4' 27 | 0x7F,0xC7,0xFC,0x60,0x06,0x00,0x60,0x06,0x00,0x7F,0x07,0xF8,0xE1,0xC0,0x0C,0x00,0xC0,0x0E,0xC0,0xCC,0x0C,0xE1,0xC7,0xF8,0x1F,0x00, // '5' 28 | 0x07,0x03,0xE0,0xE0,0x38,0x0E,0x01,0x80,0x37,0xC7,0xFC,0xE1,0xD8,0x1B,0x03,0x60,0x6C,0x0D,0x81,0x98,0x73,0xFC,0x1E,0x00, // '6' 29 | 0xFF,0xEF,0xFE,0x00,0x60,0x0C,0x00,0xC0,0x1C,0x01,0x80,0x18,0x03,0x00,0x30,0x06,0x00,0x60,0x0C,0x00,0xC0,0x1C,0x01,0x80,0x38,0x00, // '7' 30 | 0x1F,0x03,0xFC,0x71,0xC6,0x0E,0x60,0x66,0x0E,0x70,0xC3,0xF8,0x3F,0x87,0x0C,0x60,0x6E,0x06,0xC0,0x6E,0x06,0x70,0xE3,0xFC,0x1F,0x00, // '8' 31 | 0x1F,0x03,0xF8,0x71,0xCE,0x0C,0xC0,0xEC,0x06,0xC0,0x6E,0x0E,0x71,0xE7,0xFE,0x1E,0x60,0x0C,0x00,0xC0,0x1C,0x03,0x81,0xF0,0x1C,0x00, // '9' 32 | 0xD8,0x00,0x00,0x00,0x6C, // ':' 33 | 0x31,0x80,0x00,0x00,0x00,0x00,0x00,0xE7,0x39,0x8C,0xC0, // ';' 34 | 0x00,0x80,0xE0,0xF8,0xF8,0xF8,0x30,0x0F,0x00,0xF8,0x0F,0x80,0xE0,0x08, // '<' 35 | 0xFF,0xDF,0xF8,0x00,0x00,0x00,0x01,0xFF,0xBF,0xF0, // '=' 36 | 0x80,0x1C,0x03,0xE0,0x1F,0x00,0x78,0x03,0x81,0xE1,0xF0,0xF8,0x1C,0x02,0x00,0x00, // '>' 37 | 0x3E,0x1F,0xCE,0x3B,0x06,0x01,0x80,0x60,0x18,0x0C,0x07,0x03,0x01,0xC0,0x60,0x18,0x00,0x00,0x00,0x60,0x1C,0x00, // '?' 38 | 0x01,0xFC,0x00,0x3F,0xF8,0x03,0xC1,0xE0,0x38,0x03,0x83,0x00,0x0C,0x18,0x3C,0x31,0x83,0xF1,0x8C,0x31,0x84,0x43,0x0C,0x22,0x18,0x61,0x30,0xC3,0x09,0x8C,0x10,0x4C,0x60,0x82,0x63,0x0C,0x31,0x0C,0xF1,0x8C,0x7D,0xF8,0x61,0xC7,0x81,0x80,0x00,0x0E,0x00,0x00,0x3C,0x18,0x00,0xFF,0xC0,0x01,0xF8,0x00, // '@' 39 | 0x03,0x00,0x07,0x80,0x07,0x80,0x07,0x80,0x0C,0xC0,0x0C,0xC0,0x0C,0xC0,0x18,0x60,0x18,0x60,0x38,0x70,0x30,0x30,0x3F,0xF0,0x7F,0xF8,0x60,0x18,0xE0,0x1C,0xC0,0x0C,0xC0,0x0E, // 'A' 40 | 0xFF,0x87,0xFE,0x30,0x39,0x80,0xCC,0x06,0x60,0x33,0x03,0x1F,0xF0,0xFF,0xC6,0x07,0x30,0x19,0x80,0xEC,0x07,0x60,0x33,0x03,0x9F,0xF8,0xFF,0x80, // 'B' 41 | 0x07,0xC0,0x3F,0xE0,0xE1,0xC3,0x81,0xC6,0x01,0x8C,0x03,0x38,0x01,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x03,0x00,0xE6,0x01,0x8E,0x03,0x0E,0x1C,0x0F,0xF8,0x0F,0xC0, // 'C' 42 | 0xFF,0x07,0xFC,0x30,0x79,0x80,0xCC,0x07,0x60,0x1B,0x00,0xD8,0x06,0xC0,0x36,0x01,0xB0,0x0D,0x80,0x6C,0x07,0x60,0x33,0x07,0x9F,0xF8,0xFF,0x00, // 'D' 43 | 0xFF,0xEF,0xFE,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0F,0xFC,0xFF,0xCC,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0F,0xFE,0xFF,0xE0, // 'E' 44 | 0xFF,0xEF,0xFE,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xFF,0x8F,0xF8,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x00, // 'F' 45 | 0x0F,0xC0,0x3F,0xE0,0xE0,0xE3,0x80,0xC6,0x01,0x8C,0x00,0xB8,0x00,0x70,0x00,0xE0,0x01,0xC3,0xF9,0x87,0xF3,0x00,0xE6,0x01,0xCE,0x03,0x8E,0x07,0x0F,0xFC,0x07,0xE0, // 'G' 46 | 0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xBF,0xFE,0xFF,0xFB,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x18, // 'H' 47 | 0xDB,0x6D,0xB6,0xDB,0x6D,0xB6,0xC0, // 'I' 48 | 0x00,0xC0,0x18,0x03,0x00,0x60,0x0C,0x01,0x80,0x30,0x06,0x00,0xC0,0x18,0x03,0x00,0x6C,0x0D,0x81,0xB8,0x73,0xFC,0x3F,0x00, // 'J' 49 | 0xC0,0x7B,0x03,0x8C,0x0C,0x30,0x60,0xC3,0x83,0x1C,0x0C,0xE0,0x37,0x00,0xFE,0x03,0xD8,0x0E,0x70,0x30,0xE0,0xC1,0xC3,0x03,0x0C,0x0E,0x30,0x1C,0xC0,0x38, // 'K' 50 | 0xC0,0x18,0x03,0x00,0x60,0x0C,0x01,0x80,0x30,0x06,0x00,0xC0,0x18,0x03,0x00,0x60,0x0C,0x01,0x80,0x30,0x07,0xFE,0xFF,0xC0, // 'L' 51 | 0xE0,0x03,0xB8,0x01,0xEF,0x00,0x7B,0xC0,0x1E,0xD8,0x0D,0xB6,0x03,0x6D,0xC1,0xDB,0x30,0x66,0xCC,0x19,0xB1,0x8C,0x6C,0x63,0x1B,0x1D,0xC6,0xC3,0x61,0xB0,0xD8,0x6C,0x1C,0x1B,0x07,0x06,0xC1,0xC1,0x80, // 'M' 52 | 0xE0,0x1B,0x80,0x6F,0x01,0xBC,0x06,0xD8,0x1B,0x70,0x6C,0xC1,0xB1,0x86,0xC7,0x1B,0x0C,0x6C,0x39,0xB0,0x76,0xC0,0xDB,0x03,0xEC,0x07,0xB0,0x0E,0xC0,0x38, // 'N' 53 | 0x07,0xC0,0x3F,0xE0,0xE1,0xE3,0x80,0xC6,0x01,0xCC,0x01,0xB8,0x03,0x70,0x06,0xE0,0x0D,0xC0,0x1B,0x80,0x33,0x00,0x66,0x01,0xCE,0x03,0x0E,0x1E,0x0F,0xF8,0x07,0xC0, // 'O' 54 | 0xFF,0x87,0xFF,0x30,0x39,0x80,0xEC,0x03,0x60,0x1B,0x00,0xD8,0x0E,0xC0,0xE7,0xFF,0x3F,0xE1,0x80,0x0C,0x00,0x60,0x03,0x00,0x18,0x00,0xC0,0x00, // 'P' 55 | 0x0F,0x80,0xFF,0x87,0x07,0x18,0x0C,0xC0,0x3B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x39,0x80,0xC7,0x07,0x0F,0xF8,0x0F,0xE0,0x01,0xC0,0x03,0x80,0x04, // 'Q' 56 | 0xFF,0x87,0xFE,0x30,0x39,0x80,0xEC,0x07,0x60,0x3B,0x01,0xD8,0x1C,0xFF,0xC7,0xFC,0x30,0x61,0x83,0x8C,0x0C,0x60,0x73,0x01,0x98,0x0E,0xC0,0x30, // 'R' 57 | 0x1F,0x81,0xFF,0x1C,0x39,0xC0,0xEE,0x03,0x70,0x01,0xC0,0x07,0xC0,0x1F,0x80,0x1F,0x00,0x1C,0x00,0x6C,0x03,0x70,0x19,0xC1,0xC7,0xFC,0x1F,0x80, // 'S' 58 | 0xFF,0xFB,0xFF,0xE0,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00, // 'T' 59 | 0xC0,0x36,0x01,0xB0,0x0D,0x80,0x6C,0x03,0x60,0x1B,0x00,0xD8,0x06,0xC0,0x36,0x01,0xB0,0x0D,0x80,0x6C,0x03,0x70,0x39,0xC3,0x87,0xF8,0x1F,0x80, // 'U' 60 | 0xE0,0x0E,0x60,0x0C,0x70,0x1C,0x30,0x1C,0x30,0x18,0x38,0x38,0x18,0x30,0x18,0x30,0x1C,0x70,0x0C,0x60,0x0C,0x60,0x0E,0xE0,0x06,0xC0,0x06,0xC0,0x03,0x80,0x03,0x80,0x03,0x80, // 'V' 61 | 0xC0,0x60,0x76,0x07,0x03,0x38,0x38,0x18,0xC1,0xE0,0xC6,0x0F,0x0E,0x30,0xD8,0x61,0x86,0x63,0x06,0x33,0x18,0x33,0x18,0xC1,0x98,0xCC,0x0C,0xC3,0x60,0x36,0x1B,0x01,0xE0,0xD8,0x0F,0x02,0xC0,0x78,0x1C,0x03,0x80,0xE0,0x0C,0x07,0x00, // 'W' 62 | 0xE0,0x39,0x80,0xC7,0x07,0x0E,0x38,0x18,0xC0,0x77,0x00,0xF8,0x01,0xE0,0x07,0x00,0x1E,0x00,0xD8,0x07,0x70,0x18,0xE0,0xE1,0x87,0x07,0x18,0x0C,0xE0,0x38, // 'X' 63 | 0xE0,0x1C,0xE0,0x30,0xC0,0xE1,0xC1,0x81,0x87,0x03,0x8C,0x03,0x38,0x07,0x60,0x07,0xC0,0x0F,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0xC0,0x01,0x80,0x03,0x00, // 'Y' 64 | 0xFF,0xF7,0xFF,0x80,0x1C,0x01,0xC0,0x0C,0x00,0xC0,0x0E,0x00,0xE0,0x06,0x00,0x70,0x07,0x00,0x30,0x03,0x00,0x38,0x03,0x80,0x1F,0xFE,0xFF,0xF0, // 'Z' 65 | 0xF7,0xB1,0x8C,0x63,0x18,0xC6,0x31,0x8C,0x63,0x18,0xC6,0x31,0x8C,0x63,0xDE, // '[' 66 | 0xE0,0x0C,0x01,0xC0,0x18,0x03,0x00,0x30,0x06,0x00,0xE0,0x0C,0x01,0x80,0x18,0x03,0x00,0x60,0x06,0x00,0xC0,0x0C,0x01,0x80,0x38, // '\' 67 | 0xFB,0xE3,0x8E,0x38,0xE3,0x8E,0x38,0xE3,0x8E,0x38,0xE3,0x8E,0x38,0xE3,0x8E,0x38,0xEF,0xBE, // ']' 68 | 0x18,0x0C,0x0F,0x07,0x86,0x63,0x33,0x0D,0x86, // '^' 69 | 0xFF,0xEF,0xFE, // '_' 70 | 0xE1,0xC3,0x80, // '`' 71 | 0x1F,0x07,0xF8,0x61,0xCE,0x0C,0x00,0xC1,0xFC,0x7F,0xC7,0x0C,0xE0,0xCC,0x0C,0xE1,0xC7,0xFC,0x3E,0xE0, // 'a' 72 | 0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0xF0,0xFF,0xCF,0x1C,0xE0,0xEE,0x06,0xE0,0x6E,0x06,0xE0,0x6E,0x06,0xE0,0xEF,0x1C,0xDF,0xCC,0xF0, // 'b' 73 | 0x0F,0x03,0xFC,0x70,0xC6,0x06,0xE0,0x6E,0x00,0xC0,0x0E,0x00,0xE0,0x06,0x06,0x70,0xC3,0xFC,0x1F,0x00, // 'c' 74 | 0x00,0x60,0x06,0x00,0x60,0x06,0x00,0x61,0xF6,0x3F,0xE7,0x0E,0x60,0x6E,0x06,0xE0,0x6E,0x06,0xE0,0x66,0x06,0x60,0x67,0x0E,0x3F,0xE1,0xF6, // 'd' 75 | 0x0F,0x03,0xFC,0x70,0xC6,0x0E,0xE0,0x6F,0xFE,0xFF,0xEC,0x00,0xE0,0x06,0x00,0x70,0xE3,0xFC,0x0F,0x80, // 'e' 76 | 0x1E,0x3E,0x30,0x30,0x30,0xFC,0xFC,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, // 'f' 77 | 0x1E,0x67,0xF6,0x71,0xEE,0x0E,0xC0,0xEC,0x0E,0xC0,0xEC,0x0E,0xC0,0xEE,0x0E,0x71,0xE7,0xFE,0x1E,0xE0,0x0E,0x40,0xC6,0x1C,0x7F,0x81,0xF0, // 'g' 78 | 0xC0,0x30,0x0C,0x03,0x00,0xC0,0x37,0xCF,0xFB,0x8E,0xC1,0xB0,0x6C,0x1B,0x06,0xC1,0xB0,0x6C,0x1B,0x06,0xC1,0xB0,0x60, // 'h' 79 | 0xD8,0x0D,0xB6,0xDB,0x6D,0xB6,0xC0, // 'i' 80 | 0x18,0x60,0x00,0x18,0x61,0x86,0x18,0x61,0x86,0x18,0x61,0x86,0x18,0x61,0x86,0xFB,0xC0, // 'j' 81 | 0xC0,0x18,0x03,0x00,0x60,0x0C,0x01,0x87,0xB0,0xC6,0x30,0xCC,0x1B,0x83,0xE0,0x7C,0x0E,0xC1,0x9C,0x31,0xC6,0x18,0xC1,0x98,0x38, // 'k' 82 | 0xDB,0x6D,0xB6,0xDB,0x6D,0xB6,0xD8, // 'l' 83 | 0xDF,0x1E,0x3F,0xEF,0xEE,0x3E,0x3B,0x07,0x06,0xC1,0xC1,0xB0,0x70,0x6C,0x1C,0x1B,0x07,0x06,0xC1,0xC1,0xB0,0x70,0x6C,0x1C,0x1B,0x07,0x06,0xC1,0xC1,0x80, // 'm' 84 | 0xDF,0x3F,0xEE,0x3B,0x06,0xC1,0xB0,0x6C,0x1B,0x06,0xC1,0xB0,0x6C,0x1B,0x06,0xC1,0x80, // 'n' 85 | 0x0F,0x01,0xFE,0x1C,0x38,0xC0,0xCE,0x07,0x60,0x1B,0x00,0xD8,0x06,0xE0,0x73,0x03,0x1C,0x38,0x7F,0x80,0xF0,0x00, // 'o' 86 | 0xCF,0x0D,0xFC,0xF1,0xCE,0x0E,0xE0,0x6E,0x06,0xE0,0x6E,0x06,0xE0,0x6E,0x0E,0xF1,0xCF,0xFC,0xEF,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00, // 'p' 87 | 0x1F,0x63,0xFE,0x70,0xE6,0x06,0xE0,0x6E,0x06,0xC0,0x6C,0x06,0xE0,0x66,0x06,0x70,0xE3,0xFE,0x1F,0x60,0x06,0x00,0x60,0x06,0x00,0x60,0x06, // 'q' 88 | 0xDD,0xFB,0x86,0x0C,0x18,0x30,0x60,0xC1,0x83,0x06,0x0C,0x00, // 'r' 89 | 0x1E,0x0F,0xF1,0x87,0x70,0x6E,0x00,0xF8,0x0F,0xE0,0x1E,0x00,0xD8,0x1B,0x87,0x3F,0xC1,0xF0, // 's' 90 | 0x38,0x38,0x38,0xFE,0xFE,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x18,0x1E,0x0E, // 't' 91 | 0xE0,0xDC,0x1B,0x83,0x70,0x6E,0x0D,0xC1,0xB8,0x37,0x06,0xE0,0xCC,0x19,0x87,0x3F,0xE3,0xEC, // 'u' 92 | 0xC0,0xD8,0x1B,0x87,0x30,0xC6,0x18,0x66,0x0C,0xC1,0x98,0x1E,0x03,0xC0,0x78,0x06,0x00,0xC0, // 'v' 93 | 0xE0,0xC1,0x98,0x30,0x66,0x1E,0x19,0xC7,0x8C,0x31,0xE3,0x0C,0xCC,0xC3,0x33,0x30,0x6C,0xD8,0x1A,0x16,0x07,0x87,0x81,0xE1,0xC0,0x30,0x30,0x0C,0x0C,0x00, // 'w' 94 | 0x60,0xE3,0x0C,0x39,0xC1,0x98,0x0F,0x00,0xF0,0x06,0x00,0xF0,0x1F,0x01,0x98,0x39,0xC7,0x0C,0xE0,0x60, // 'x' 95 | 0xE0,0xE6,0x0C,0x60,0xC7,0x1C,0x31,0x83,0x18,0x39,0x81,0xB0,0x1B,0x01,0xF0,0x0E,0x00,0xE0,0x06,0x00,0xC0,0x0C,0x01,0x80,0x78,0x07,0x00, // 'y' 96 | 0xFF,0xDF,0xF8,0x06,0x01,0x80,0x70,0x1C,0x03,0x00,0xC0,0x38,0x0E,0x01,0x80,0x7F,0xEF,0xFC, // 'z' 97 | 0x06,0x0E,0x18,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x70,0xE0,0xE0,0x70,0x30,0x30,0x30,0x30,0x30,0x38,0x18,0x1C,0x06, // '{' 98 | 0xDB,0x6D,0xB6,0xDB,0x6D,0xB6,0xDB,0x60, // '|' 99 | 0xC0,0xE0,0x30,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0E,0x0E,0x1C,0x18,0x18,0x18,0x18,0x18,0x38,0x30,0x60,0xC0 // '}' 100 | }; 101 | const GFXglyph Roboto_24Glyphs[] PROGMEM = { 102 | // bitmapOffset, width, height, xAdvance, xOffset, yOffset 103 | { 0, 1, 1, 7, 0, 0 }, // ' ' 104 | { 1, 3, 17, 7, 2, -17 }, // '!' 105 | { 8, 5, 6, 9, 2, -18 }, // '"' 106 | { 12, 14, 17, 16, 1, -17 }, // '#' 107 | { 42, 12, 22, 14, 1, -20 }, // '$' 108 | { 75, 17, 17, 19, 1, -17 }, // '%' 109 | { 112, 15, 17, 16, 1, -17 }, // '&' 110 | { 144, 3, 6, 5, 1, -18 }, // ''' 111 | { 147, 7, 25, 9, 2, -19 }, // '(' 112 | { 169, 8, 25, 9, 0, -19 }, // ')' 113 | { 194, 11, 10, 11, 0, -17 }, // '*' 114 | { 208, 13, 12, 15, 1, -14 }, // '+' 115 | { 228, 5, 6, 6, 0, -2 }, // ',' 116 | { 232, 7, 2, 8, 0, -8 }, // '-' 117 | { 234, 3, 2, 7, 2, -2 }, // '.' 118 | { 235, 10, 18, 11, 0, -17 }, // '/' 119 | { 258, 12, 17, 14, 1, -17 }, // '0' 120 | { 284, 8, 17, 14, 2, -17 }, // '1' 121 | { 301, 13, 17, 14, 1, -17 }, // '2' 122 | { 329, 12, 17, 14, 1, -17 }, // '3' 123 | { 355, 13, 17, 14, 1, -17 }, // '4' 124 | { 383, 12, 17, 14, 2, -17 }, // '5' 125 | { 409, 11, 17, 14, 2, -17 }, // '6' 126 | { 433, 12, 17, 14, 1, -17 }, // '7' 127 | { 459, 12, 17, 14, 1, -17 }, // '8' 128 | { 485, 12, 17, 14, 1, -17 }, // '9' 129 | { 511, 3, 13, 7, 2, -13 }, // ':' 130 | { 516, 5, 17, 6, 0, -13 }, // ';' 131 | { 527, 10, 11, 13, 1, -13 }, // '<' 132 | { 541, 11, 7, 14, 2, -12 }, // '=' 133 | { 551, 11, 11, 14, 2, -13 }, // '>' 134 | { 567, 10, 17, 12, 1, -17 }, // '?' 135 | { 589, 21, 22, 23, 1, -17 }, // '@' 136 | { 647, 16, 17, 17, 1, -17 }, // 'A' 137 | { 681, 13, 17, 16, 2, -17 }, // 'B' 138 | { 709, 15, 17, 17, 1, -17 }, // 'C' 139 | { 741, 13, 17, 17, 2, -17 }, // 'D' 140 | { 769, 12, 17, 15, 2, -17 }, // 'E' 141 | { 795, 12, 17, 14, 2, -17 }, // 'F' 142 | { 821, 15, 17, 17, 1, -17 }, // 'G' 143 | { 853, 14, 17, 18, 2, -17 }, // 'H' 144 | { 883, 3, 17, 8, 2, -17 }, // 'I' 145 | { 890, 11, 17, 14, 1, -17 }, // 'J' 146 | { 914, 14, 17, 16, 2, -17 }, // 'K' 147 | { 944, 11, 17, 14, 2, -17 }, // 'L' 148 | { 968, 18, 17, 22, 2, -17 }, // 'M' 149 | { 1007, 14, 17, 18, 2, -17 }, // 'N' 150 | { 1037, 15, 17, 18, 1, -17 }, // 'O' 151 | { 1069, 13, 17, 16, 2, -17 }, // 'P' 152 | { 1097, 14, 20, 18, 2, -17 }, // 'Q' 153 | { 1132, 13, 17, 16, 2, -17 }, // 'R' 154 | { 1160, 13, 17, 15, 1, -17 }, // 'S' 155 | { 1188, 14, 17, 15, 1, -17 }, // 'T' 156 | { 1218, 13, 17, 17, 2, -17 }, // 'U' 157 | { 1246, 16, 17, 16, 0, -17 }, // 'V' 158 | { 1280, 21, 17, 22, 1, -17 }, // 'W' 159 | { 1325, 14, 17, 16, 1, -17 }, // 'X' 160 | { 1355, 15, 17, 15, 0, -17 }, // 'Y' 161 | { 1387, 13, 17, 15, 1, -17 }, // 'Z' 162 | { 1415, 5, 24, 7, 2, -20 }, // '[' 163 | { 1430, 11, 18, 11, 0, -17 }, // '\' 164 | { 1455, 6, 24, 7, 0, -20 }, // ']' 165 | { 1473, 9, 8, 11, 1, -17 }, // '^' 166 | { 1482, 12, 2, 12, 0, 0 }, // '_' 167 | { 1485, 6, 3, 8, 1, -18 }, // '`' 168 | { 1488, 12, 13, 14, 1, -13 }, // 'a' 169 | { 1508, 12, 18, 14, 1, -18 }, // 'b' 170 | { 1535, 12, 13, 14, 1, -13 }, // 'c' 171 | { 1555, 12, 18, 15, 1, -18 }, // 'd' 172 | { 1582, 12, 13, 14, 1, -13 }, // 'e' 173 | { 1602, 8, 18, 9, 1, -18 }, // 'f' 174 | { 1620, 12, 18, 14, 1, -13 }, // 'g' 175 | { 1647, 10, 18, 14, 2, -18 }, // 'h' 176 | { 1670, 3, 17, 7, 2, -17 }, // 'i' 177 | { 1677, 6, 22, 7, -1, -17 }, // 'j' 178 | { 1694, 11, 18, 13, 2, -18 }, // 'k' 179 | { 1719, 3, 18, 7, 2, -18 }, // 'l' 180 | { 1726, 18, 13, 22, 2, -13 }, // 'm' 181 | { 1756, 10, 13, 14, 2, -13 }, // 'n' 182 | { 1773, 13, 13, 15, 1, -13 }, // 'o' 183 | { 1795, 12, 18, 14, 1, -13 }, // 'p' 184 | { 1822, 12, 18, 15, 1, -13 }, // 'q' 185 | { 1849, 7, 13, 9, 2, -13 }, // 'r' 186 | { 1861, 11, 13, 13, 1, -13 }, // 's' 187 | { 1879, 8, 16, 9, 0, -16 }, // 't' 188 | { 1895, 11, 13, 14, 1, -13 }, // 'u' 189 | { 1913, 11, 13, 13, 1, -13 }, // 'v' 190 | { 1931, 18, 13, 19, 0, -13 }, // 'w' 191 | { 1961, 12, 13, 13, 0, -13 }, // 'x' 192 | { 1981, 12, 18, 12, 0, -13 }, // 'y' 193 | { 2008, 11, 13, 13, 1, -13 }, // 'z' 194 | { 2026, 8, 23, 9, 1, -19 }, // '{' 195 | { 2049, 3, 20, 7, 2, -17 }, // '|' 196 | { 2057, 8, 23, 9, 0, -19 } // '}' 197 | }; 198 | const GFXfont Roboto_24 PROGMEM = { 199 | (uint8_t *)Roboto_24Bitmaps,(GFXglyph *)Roboto_24Glyphs,0x20, 0x7E, 29}; 200 | 201 | -------------------------------------------------------------------------------- /cyd_weather/Roboto_25.h: -------------------------------------------------------------------------------- 1 | // Created by http://oleddisplay.squix.ch/ Consider a donation 2 | // In case of problems make sure that you are using the font file with the correct version! 3 | const uint8_t Roboto_25Bitmaps[] PROGMEM = { 4 | 5 | // Bitmap Data: 6 | 0x00, // ' ' 7 | 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x00,0x0C,0xEC, // '!' 8 | 0x9A,0x69,0xA6,0x92,0x40, // '"' 9 | 0x03,0x18,0x04,0x20,0x18,0xC0,0x31,0x80,0x63,0x0F,0xFF,0x9F,0xFF,0x06,0x30,0x0C,0x60,0x18,0xC0,0x31,0x87,0xFF,0xCF,0xFF,0x83,0x18,0x06,0x30,0x0C,0x60,0x10,0x80,0x63,0x00, // '#' 10 | 0x06,0x00,0x30,0x01,0x80,0x1F,0x03,0xFC,0x38,0x71,0xC1,0x8C,0x0C,0x60,0x73,0x80,0x0E,0x00,0x3E,0x00,0x7C,0x00,0xF0,0x01,0x80,0x0E,0xE0,0x73,0x03,0x9C,0x38,0x7F,0xC1,0xF8,0x03,0x00,0x18,0x00, // '$' 11 | 0x3C,0x00,0x3F,0x00,0x31,0x82,0x18,0x63,0x0C,0x33,0x06,0x31,0x01,0xF9,0x80,0x79,0x80,0x00,0x80,0x00,0xC0,0x00,0xC7,0x80,0x47,0xE0,0x66,0x30,0x63,0x08,0x21,0x8C,0x30,0xC6,0x00,0x7F,0x00,0x0F,0x00, // '%' 12 | 0x0F,0x00,0x3F,0x80,0xE3,0x01,0x86,0x03,0x0C,0x06,0x18,0x0E,0xE0,0x0F,0x80,0x1E,0x00,0x7C,0x01,0xCC,0x63,0x1C,0xCE,0x1D,0x9C,0x1F,0x38,0x1C,0x38,0x7C,0x3F,0xD8,0x3F,0x38, // '&' 13 | 0xDB,0x6D,0x80, // ''' 14 | 0x04,0x18,0x61,0x83,0x0C,0x18,0x70,0xC1,0x83,0x06,0x0C,0x18,0x30,0x60,0xC1,0x83,0x83,0x06,0x06,0x0C,0x0C,0x0C,0x08, // '(' 15 | 0x40,0xE0,0x30,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x0E,0x06,0x06,0x06,0x06,0x06,0x0E,0x0E,0x0C,0x0C,0x0C,0x18,0x18,0x30,0x30,0x60,0xC0, // ')' 16 | 0x0C,0x00,0x80,0x10,0x32,0x6F,0xFC,0x1C,0x07,0x80,0xD8,0x31,0x84,0x20, // '*' 17 | 0x06,0x00,0x30,0x01,0x80,0x0C,0x00,0x60,0x7F,0xFB,0xFF,0xC0,0xC0,0x06,0x00,0x30,0x01,0x80,0x0C,0x00,0x60,0x00, // '+' 18 | 0x31,0x9C,0xC6,0x60, // ',' 19 | 0xFD,0xF8, // '-' 20 | 0xCE,0xC0, // '.' 21 | 0x01,0xC0,0x30,0x06,0x01,0x80,0x30,0x06,0x01,0x80,0x30,0x0C,0x01,0x80,0x30,0x0C,0x01,0x80,0x30,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x60,0x00, // '/' 22 | 0x1F,0x81,0xFE,0x1C,0x38,0xC0,0xC6,0x06,0x70,0x33,0x81,0xDC,0x0E,0xE0,0x77,0x03,0xB8,0x1D,0xC0,0xE6,0x06,0x30,0x31,0x81,0x8E,0x1C,0x3F,0xC0,0xFC,0x00, // '0' 23 | 0x06,0x3E,0xFE,0xC6,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, // '1' 24 | 0x1F,0x81,0xFE,0x1C,0x39,0xC0,0xCE,0x06,0x00,0x30,0x01,0x80,0x1C,0x01,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0E,0x00,0xE0,0x0E,0x00,0xFF,0xF7,0xFF,0x80, // '2' 25 | 0x1F,0x03,0xFC,0x70,0xEE,0x06,0xE0,0x60,0x06,0x00,0x60,0x0C,0x0F,0x80,0xFC,0x00,0xE0,0x06,0x00,0x6C,0x06,0xE0,0x67,0x0E,0x3F,0xC1,0xF0, // '3' 26 | 0x01,0xC0,0x0E,0x00,0xF0,0x0F,0x80,0x6C,0x06,0x60,0x73,0x03,0x18,0x30,0xC1,0x86,0x18,0x31,0xC1,0x8F,0xFF,0x7F,0xF8,0x03,0x00,0x18,0x00,0xC0,0x06,0x00, // '4' 27 | 0x7F,0xE7,0xFE,0x60,0x06,0x00,0x60,0x06,0x00,0x7F,0x07,0xF8,0x61,0xC0,0x0E,0x00,0x60,0x06,0x00,0x6C,0x06,0xC0,0xE6,0x1C,0x7F,0x81,0xF0, // '5' 28 | 0x07,0x01,0xF0,0x38,0x07,0x00,0x60,0x0C,0x00,0xDF,0x0F,0xF8,0xF1,0xCC,0x0C,0xC0,0xEC,0x06,0xC0,0x6C,0x0E,0xE0,0xC7,0x1C,0x3F,0x81,0xF0, // '6' 29 | 0xFF,0xF7,0xFF,0x80,0x18,0x00,0xC0,0x0E,0x00,0x60,0x07,0x00,0x30,0x01,0x80,0x18,0x00,0xC0,0x0C,0x00,0x60,0x07,0x00,0x30,0x03,0x80,0x18,0x01,0xC0,0x00, // '7' 30 | 0x0F,0x01,0xFE,0x1C,0x38,0xC0,0xC6,0x06,0x30,0x31,0x81,0x86,0x18,0x1F,0x81,0xFE,0x1C,0x38,0xC0,0xCE,0x07,0x70,0x39,0x81,0xCE,0x1C,0x3F,0xC0,0xFC,0x00, // '8' 31 | 0x1F,0x03,0xF8,0x71,0xC6,0x0E,0xE0,0x6C,0x06,0xC0,0x6E,0x06,0x60,0x67,0x1E,0x3F,0xE1,0xE6,0x00,0x60,0x0E,0x00,0xC0,0x38,0x1F,0x01,0xC0, // '9' 32 | 0xCE,0xC0,0x00,0x00,0x00,0xCE,0xC0, // ':' 33 | 0x30,0xE3,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x71,0x86,0x30, // ';' 34 | 0x00,0x40,0x38,0x3F,0x1F,0x0F,0x81,0x80,0x3E,0x01,0xF0,0x0F,0xC0,0x38,0x01,0x00, // '<' 35 | 0xFF,0xDF,0xF8,0x00,0x00,0x00,0x01,0xFF,0xBF,0xF0, // '=' 36 | 0x80,0x1C,0x03,0xE0,0x0F,0x80,0x7C,0x01,0x81,0xF0,0xF8,0xF8,0x1C,0x02,0x00,0x00, // '>' 37 | 0x3E,0x0F,0xF3,0x86,0x60,0xE0,0x0C,0x03,0x80,0x60,0x1C,0x07,0x01,0xC0,0x30,0x0E,0x01,0xC0,0x00,0x00,0x00,0x60,0x1C,0x01,0x80, // '?' 38 | 0x00,0xFC,0x00,0x3F,0xF8,0x03,0xC0,0xF0,0x38,0x01,0x83,0x80,0x06,0x18,0x3C,0x11,0x83,0xF8,0xCC,0x38,0x86,0x61,0x84,0x12,0x18,0x60,0xB0,0xC3,0x05,0x86,0x18,0x2C,0x30,0xC3,0x21,0x86,0x19,0x0C,0x71,0x8C,0x7F,0xFC,0x61,0xE7,0x81,0x80,0x00,0x0E,0x00,0x00,0x3C,0x08,0x00,0xFF,0xC0,0x00,0xFC,0x00, // '@' 39 | 0x01,0x80,0x01,0xE0,0x00,0xF0,0x00,0x78,0x00,0x66,0x00,0x33,0x00,0x19,0x80,0x18,0x60,0x0C,0x30,0x0E,0x1C,0x06,0x06,0x03,0xFF,0x03,0xFF,0xC1,0x80,0x61,0xC0,0x38,0xC0,0x0C,0x60,0x06,0x70,0x03,0x80, // 'A' 40 | 0xFF,0x87,0xFE,0x30,0x39,0x80,0xEC,0x07,0x60,0x3B,0x01,0x98,0x1C,0xFF,0xC7,0xFE,0x30,0x19,0x80,0xEC,0x03,0x60,0x1B,0x01,0xD8,0x1E,0xFF,0xE7,0xFC,0x00, // 'B' 41 | 0x07,0xC0,0x3F,0xE0,0xE0,0xE3,0x80,0xE7,0x01,0xCC,0x01,0x98,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x03,0x00,0x06,0x00,0xCC,0x03,0x9C,0x07,0x1C,0x1C,0x1F,0xF0,0x0F,0x80, // 'C' 42 | 0xFF,0x03,0xFF,0x0C,0x0E,0x30,0x1C,0xC0,0x33,0x00,0xEC,0x03,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x0E,0xC0,0x3B,0x00,0xCC,0x07,0x30,0x78,0xFF,0xC3,0xFC,0x00, // 'D' 43 | 0xFF,0xEF,0xFE,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xFF,0xCF,0xFC,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xFF,0xEF,0xFE, // 'E' 44 | 0xFF,0xEF,0xFE,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xFF,0xCF,0xFC,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00, // 'F' 45 | 0x07,0xC0,0x3F,0xE0,0xE0,0xE3,0x80,0xE7,0x00,0xCC,0x00,0x18,0x00,0x70,0x00,0xE0,0x01,0xC1,0xF9,0x83,0xF3,0x00,0x66,0x00,0xCE,0x01,0x8C,0x03,0x1E,0x0E,0x1F,0xF8,0x0F,0xC0, // 'G' 46 | 0xC0,0x1D,0x80,0x3B,0x00,0x76,0x00,0xEC,0x01,0xD8,0x03,0xB0,0x07,0x60,0x0E,0xFF,0xFD,0xFF,0xFB,0x00,0x76,0x00,0xEC,0x01,0xD8,0x03,0xB0,0x07,0x60,0x0E,0xC0,0x1D,0x80,0x38, // 'H' 47 | 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, // 'I' 48 | 0x00,0x60,0x06,0x00,0x60,0x06,0x00,0x60,0x06,0x00,0x60,0x06,0x00,0x60,0x06,0x00,0x60,0x06,0x00,0x6C,0x0E,0xC0,0xEE,0x1C,0x7F,0x81,0xF0, // 'J' 49 | 0xC0,0x39,0x80,0xE3,0x03,0x86,0x0E,0x0C,0x38,0x18,0xE0,0x31,0x80,0x67,0x00,0xDE,0x01,0xFC,0x03,0xDC,0x07,0x1C,0x0C,0x1C,0x18,0x38,0x30,0x38,0x60,0x38,0xC0,0x39,0x80,0x78, // 'K' 50 | 0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xFF,0xEF,0xFE, // 'L' 51 | 0xE0,0x01,0xDE,0x00,0x7B,0xC0,0x0F,0x78,0x03,0xED,0x80,0x6D,0xB0,0x0D,0xB7,0x03,0x36,0x60,0x6E,0xCC,0x1D,0xD8,0xC3,0x3B,0x18,0x67,0x63,0x98,0xEC,0x33,0x1D,0x86,0xE3,0xB0,0x78,0x76,0x0F,0x0E,0xC1,0xC1,0xD8,0x18,0x38, // 'M' 52 | 0xE0,0x0D,0xE0,0x1B,0xC0,0x37,0xC0,0x6F,0x80,0xDF,0x81,0xBB,0x83,0x73,0x06,0xE7,0x0D,0xC7,0x1B,0x86,0x37,0x0E,0x6E,0x0E,0xDC,0x0D,0xB8,0x1F,0x70,0x1E,0xE0,0x1D,0xC0,0x38, // 'N' 53 | 0x07,0xC0,0x1F,0xF0,0x38,0x38,0x30,0x1C,0x70,0x0C,0x60,0x0C,0x60,0x0E,0xE0,0x0E,0xE0,0x0E,0xE0,0x0E,0xE0,0x0E,0x60,0x0E,0x60,0x0C,0x70,0x0C,0x30,0x1C,0x38,0x38,0x1F,0xF0,0x07,0xC0, // 'O' 54 | 0xFF,0xC3,0xFF,0x8E,0x07,0x38,0x0E,0xE0,0x3B,0x80,0x6E,0x01,0xB8,0x0E,0xE0,0x73,0xFF,0x8F,0xFC,0x38,0x00,0xE0,0x03,0x80,0x0E,0x00,0x38,0x00,0xE0,0x03,0x80,0x00, // 'P' 55 | 0x07,0xC0,0x1F,0xF0,0x38,0x38,0x70,0x18,0x60,0x1C,0x60,0x0C,0xE0,0x0C,0xE0,0x0C,0xE0,0x0E,0xE0,0x0E,0xE0,0x0E,0xE0,0x0C,0x60,0x0C,0x60,0x1C,0x70,0x18,0x38,0x38,0x1F,0xF0,0x07,0xF0,0x00,0x3C,0x00,0x1E,0x00,0x08, // 'Q' 56 | 0xFF,0x83,0xFF,0x0C,0x0E,0x30,0x1C,0xC0,0x73,0x00,0xCC,0x07,0x30,0x1C,0xC0,0xE3,0xFF,0x0F,0xF8,0x30,0x60,0xC1,0xC3,0x03,0x0C,0x0E,0x30,0x18,0xC0,0x73,0x00,0xE0, // 'R' 57 | 0x0F,0x80,0xFF,0x87,0x07,0x18,0x0E,0x60,0x39,0x80,0x07,0x00,0x0E,0x00,0x1F,0x00,0x1F,0x80,0x0F,0x00,0x0E,0x00,0x3B,0x80,0x6E,0x03,0x9C,0x1C,0x3F,0xF0,0x3F,0x00, // 'S' 58 | 0xFF,0xFB,0xFF,0xE0,0x70,0x01,0xC0,0x07,0x00,0x1C,0x00,0x70,0x01,0xC0,0x07,0x00,0x1C,0x00,0x70,0x01,0xC0,0x07,0x00,0x1C,0x00,0x70,0x01,0xC0,0x07,0x00,0x1C,0x00, // 'T' 59 | 0xC0,0x36,0x01,0xB0,0x0D,0x80,0x6C,0x03,0x60,0x1B,0x00,0xD8,0x06,0xC0,0x36,0x01,0xB0,0x0D,0x80,0x6C,0x03,0x60,0x1B,0x81,0xCE,0x1C,0x7F,0xE0,0xFC,0x00, // 'U' 60 | 0xE0,0x07,0x30,0x03,0x1C,0x03,0x86,0x01,0x83,0x00,0xC1,0xC0,0xE0,0x60,0x60,0x30,0x30,0x1C,0x38,0x06,0x18,0x03,0x9C,0x00,0xCC,0x00,0x66,0x00,0x3F,0x00,0x0F,0x00,0x07,0x80,0x03,0xC0,0x00,0xC0,0x00, // 'V' 61 | 0xC0,0x60,0x3B,0x01,0xC0,0xCE,0x07,0x03,0x18,0x3C,0x1C,0x60,0xF0,0x71,0x83,0x61,0x87,0x1D,0x86,0x0C,0x66,0x18,0x31,0x8C,0xE0,0xC6,0x33,0x03,0x30,0xCC,0x0E,0xC3,0x30,0x1B,0x07,0xC0,0x78,0x1E,0x01,0xE0,0x78,0x07,0x80,0xE0,0x0E,0x03,0x80,0x30,0x0C,0x00, // 'W' 62 | 0xE0,0x1C,0xE0,0x71,0xC0,0xC1,0xC3,0x81,0x8E,0x03,0x98,0x03,0xF0,0x03,0xC0,0x07,0x80,0x0F,0x00,0x3E,0x00,0x7E,0x01,0xCE,0x03,0x1C,0x0E,0x1C,0x38,0x18,0x60,0x39,0xC0,0x38, // 'X' 63 | 0xE0,0x0E,0x70,0x1C,0x30,0x18,0x38,0x38,0x18,0x30,0x1C,0x70,0x0C,0x60,0x0E,0xE0,0x06,0xC0,0x07,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80, // 'Y' 64 | 0xFF,0xFB,0xFF,0xE0,0x07,0x00,0x18,0x00,0xE0,0x07,0x00,0x18,0x00,0xE0,0x07,0x00,0x18,0x00,0xE0,0x07,0x00,0x18,0x00,0xE0,0x07,0x00,0x18,0x00,0xFF,0xFB,0xFF,0xE0, // 'Z' 65 | 0xF7,0xB1,0x8C,0x63,0x18,0xC6,0x31,0x8C,0x63,0x18,0xC6,0x31,0x8C,0x63,0xDE, // '[' 66 | 0xE0,0x0C,0x01,0xC0,0x18,0x03,0x00,0x30,0x06,0x00,0xC0,0x0C,0x01,0x80,0x38,0x03,0x00,0x60,0x0E,0x00,0xC0,0x18,0x01,0x80,0x30,0x07,0x00,0x60, // '\' 67 | 0xFB,0xE3,0x8E,0x38,0xE3,0x8E,0x38,0xE3,0x8E,0x38,0xE3,0x8E,0x38,0xE3,0x8E,0x38,0xEF,0xBE, // ']' 68 | 0x18,0x0C,0x0F,0x07,0x86,0x63,0x31,0x99,0x86,0xC3,0x00, // '^' 69 | 0xFF,0xEF,0xFE, // '_' 70 | 0xE1,0x83,0x0E, // '`' 71 | 0x3F,0x0F,0xF3,0x87,0x60,0x60,0x0C,0x7F,0x9F,0xF7,0x06,0xC0,0xD8,0x1B,0x8F,0x7F,0xE3,0xCC, // 'a' 72 | 0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xDF,0x0F,0xF8,0xE1,0xCC,0x0C,0xC0,0xEC,0x06,0xC0,0x6C,0x06,0xC0,0xEC,0x0C,0xE1,0xCF,0xF8,0xDF,0x00, // 'b' 73 | 0x1F,0x03,0xFC,0x70,0xE6,0x06,0xE0,0x6C,0x00,0xC0,0x0C,0x00,0xE0,0x06,0x06,0x70,0xE3,0xFC,0x1F,0x00, // 'c' 74 | 0x00,0x60,0x06,0x00,0x60,0x06,0x00,0x60,0x06,0x1F,0x63,0xFE,0x70,0xE6,0x06,0xE0,0x6C,0x06,0xC0,0x6C,0x06,0xE0,0x66,0x06,0x70,0xE3,0xFE,0x1F,0x60, // 'd' 75 | 0x1F,0x03,0xFC,0x70,0xC6,0x06,0xC0,0x6F,0xFE,0xFF,0xEC,0x00,0xE0,0x0E,0x00,0x70,0xE3,0xFC,0x1F,0x80, // 'e' 76 | 0x0F,0x0F,0x8E,0x06,0x03,0x01,0x83,0xF9,0xFC,0x30,0x18,0x0C,0x06,0x03,0x01,0x80,0xC0,0x60,0x30,0x18,0x0C,0x00, // 'f' 77 | 0x1F,0x63,0xFE,0x70,0xE6,0x06,0xE0,0x6C,0x06,0xC0,0x6C,0x06,0xE0,0x66,0x06,0x70,0xE3,0xFE,0x1F,0x60,0x06,0x40,0x66,0x0E,0x3F,0xC1,0xF0, // 'g' 78 | 0xC0,0x18,0x03,0x00,0x60,0x0C,0x01,0x80,0x33,0xC7,0xFC,0xF1,0xD8,0x1B,0x03,0x60,0x6C,0x0D,0x81,0xB0,0x36,0x06,0xC0,0xD8,0x1B,0x03,0x00, // 'h' 79 | 0xDB,0x01,0xB6,0xDB,0x6D,0xB6,0xD8, // 'i' 80 | 0x18,0x61,0x80,0x00,0x61,0x86,0x18,0x61,0x86,0x18,0x61,0x86,0x18,0x61,0x86,0x3B,0xEF,0x00, // 'j' 81 | 0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xC1,0xCC,0x38,0xC7,0x0C,0xE0,0xDC,0x0F,0x80,0xFC,0x0E,0xC0,0xC6,0x0C,0x70,0xC3,0x8C,0x1C,0xC0,0xE0, // 'k' 82 | 0xDB,0x6D,0xB6,0xDB,0x6D,0xB6,0xDB,0x00, // 'l' 83 | 0xDF,0x1F,0x1F,0xF7,0xF3,0x87,0x87,0x60,0x60,0x6C,0x0C,0x0D,0x81,0x81,0xB0,0x30,0x36,0x06,0x06,0xC0,0xC0,0xD8,0x18,0x1B,0x03,0x03,0x60,0x60,0x6C,0x0C,0x0C, // 'm' 84 | 0xCF,0x1F,0xF3,0xC7,0x60,0x6C,0x0D,0x81,0xB0,0x36,0x06,0xC0,0xD8,0x1B,0x03,0x60,0x6C,0x0C, // 'n' 85 | 0x1F,0x81,0xFE,0x1C,0x38,0xC0,0xCE,0x07,0x60,0x1B,0x00,0xD8,0x06,0xE0,0x73,0x03,0x1C,0x38,0x7F,0x81,0xF8,0x00, // 'o' 86 | 0xDF,0x0F,0xF8,0xE1,0xCC,0x0C,0xC0,0xEC,0x06,0xC0,0x6C,0x06,0xC0,0xEC,0x0C,0xE1,0xCF,0xF8,0xDF,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00, // 'p' 87 | 0x1F,0x63,0xFE,0x70,0xEE,0x06,0xE0,0x6C,0x06,0xC0,0x6C,0x06,0xE0,0x66,0x06,0x70,0xE3,0xFE,0x1F,0x60,0x06,0x00,0x60,0x06,0x00,0x60,0x06, // 'q' 88 | 0xEE,0xFE,0xF0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0, // 'r' 89 | 0x1F,0x03,0xFC,0x71,0xC6,0x0E,0x60,0x07,0xE0,0x1F,0x80,0x3C,0x00,0xEE,0x0E,0x70,0xC7,0xFC,0x1F,0x00, // 's' 90 | 0x38,0x38,0x38,0xFE,0xFE,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x1E,0x0E, // 't' 91 | 0xC0,0xD8,0x1B,0x03,0x60,0x6C,0x0D,0x81,0xB0,0x36,0x06,0xC0,0xD8,0x1B,0x87,0x3F,0xE3,0xEC, // 'u' 92 | 0xE0,0x73,0x03,0x1C,0x38,0x61,0x83,0x0C,0x1C,0xE0,0x66,0x03,0x30,0x1F,0x80,0x78,0x03,0xC0,0x0C,0x00,0x60,0x00, // 'v' 93 | 0xC1,0xC1,0xB0,0x70,0x6E,0x1C,0x39,0x8D,0x0C,0x63,0x63,0x18,0xD8,0xC3,0x62,0x60,0xD8,0xD8,0x36,0x36,0x0D,0x05,0x81,0xC1,0xC0,0x70,0x70,0x18,0x1C,0x00, // 'w' 94 | 0xE0,0xE6,0x1C,0x71,0x83,0x30,0x1F,0x01,0xE0,0x0C,0x01,0xE0,0x1F,0x03,0x30,0x71,0x86,0x1C,0xC0,0xE0, // 'x' 95 | 0xE0,0x73,0x03,0x1C,0x38,0x61,0x83,0x0C,0x1C,0xE0,0x66,0x03,0x30,0x0F,0x80,0x78,0x03,0xC0,0x0E,0x00,0x60,0x03,0x00,0x30,0x01,0x80,0x78,0x03,0x80,0x00, // 'y' 96 | 0xFF,0xCF,0xFC,0x01,0xC0,0x38,0x07,0x00,0x60,0x0C,0x01,0xC0,0x38,0x07,0x00,0x60,0x0F,0xFE,0xFF,0xE0, // 'z' 97 | 0x06,0x0E,0x18,0x38,0x38,0x30,0x30,0x30,0x30,0x30,0x70,0xE0,0xE0,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x18,0x0E,0x06, // '{' 98 | 0xDB,0x6D,0xB6,0xDB,0x6D,0xB6,0xDB,0x6C, // '|' 99 | 0xC0,0xE0,0x30,0x30,0x38,0x18,0x18,0x18,0x18,0x18,0x1C,0x0E,0x0E,0x1C,0x18,0x18,0x18,0x18,0x18,0x38,0x30,0x30,0xE0,0xC0 // '}' 100 | }; 101 | const GFXglyph Roboto_25Glyphs[] PROGMEM = { 102 | // bitmapOffset, width, height, xAdvance, xOffset, yOffset 103 | { 0, 1, 1, 7, 0, 0 }, // ' ' 104 | { 1, 4, 18, 7, 2, -18 }, // '!' 105 | { 10, 6, 6, 9, 2, -19 }, // '"' 106 | { 15, 15, 18, 16, 1, -18 }, // '#' 107 | { 49, 13, 23, 15, 1, -21 }, // '$' 108 | { 87, 17, 18, 19, 1, -18 }, // '%' 109 | { 126, 15, 18, 17, 1, -18 }, // '&' 110 | { 160, 3, 6, 5, 1, -19 }, // ''' 111 | { 163, 7, 26, 10, 2, -20 }, // '(' 112 | { 186, 8, 26, 10, 0, -20 }, // ')' 113 | { 212, 11, 10, 12, 0, -18 }, // '*' 114 | { 226, 13, 13, 15, 1, -15 }, // '+' 115 | { 248, 5, 6, 6, 0, -3 }, // ',' 116 | { 252, 7, 2, 8, 0, -8 }, // '-' 117 | { 254, 4, 3, 8, 2, -3 }, // '.' 118 | { 256, 11, 20, 11, 0, -18 }, // '/' 119 | { 284, 13, 18, 15, 1, -18 }, // '0' 120 | { 314, 8, 18, 15, 2, -18 }, // '1' 121 | { 332, 13, 18, 15, 1, -18 }, // '2' 122 | { 362, 12, 18, 15, 1, -18 }, // '3' 123 | { 389, 13, 18, 15, 1, -18 }, // '4' 124 | { 419, 12, 18, 15, 2, -18 }, // '5' 125 | { 446, 12, 18, 15, 2, -18 }, // '6' 126 | { 473, 13, 18, 15, 1, -18 }, // '7' 127 | { 503, 13, 18, 15, 1, -18 }, // '8' 128 | { 533, 12, 18, 15, 1, -18 }, // '9' 129 | { 560, 4, 13, 7, 2, -13 }, // ':' 130 | { 567, 6, 16, 6, 0, -13 }, // ';' 131 | { 579, 11, 11, 14, 1, -13 }, // '<' 132 | { 595, 11, 7, 15, 2, -12 }, // '=' 133 | { 605, 11, 11, 14, 2, -13 }, // '>' 134 | { 621, 11, 18, 13, 1, -18 }, // '?' 135 | { 646, 21, 22, 23, 1, -17 }, // '@' 136 | { 704, 17, 18, 17, 0, -18 }, // 'A' 137 | { 743, 13, 18, 17, 2, -18 }, // 'B' 138 | { 773, 15, 18, 17, 1, -18 }, // 'C' 139 | { 807, 14, 18, 17, 2, -18 }, // 'D' 140 | { 839, 12, 18, 15, 2, -18 }, // 'E' 141 | { 866, 12, 18, 15, 2, -18 }, // 'F' 142 | { 893, 15, 18, 18, 1, -18 }, // 'G' 143 | { 927, 15, 18, 19, 2, -18 }, // 'H' 144 | { 961, 4, 18, 8, 2, -18 }, // 'I' 145 | { 970, 12, 18, 15, 1, -18 }, // 'J' 146 | { 997, 15, 18, 17, 2, -18 }, // 'K' 147 | { 1031, 12, 18, 14, 2, -18 }, // 'L' 148 | { 1058, 19, 18, 23, 2, -18 }, // 'M' 149 | { 1101, 15, 18, 19, 2, -18 }, // 'N' 150 | { 1135, 16, 18, 18, 1, -18 }, // 'O' 151 | { 1171, 14, 18, 17, 2, -18 }, // 'P' 152 | { 1203, 16, 21, 18, 1, -18 }, // 'Q' 153 | { 1245, 14, 18, 16, 2, -18 }, // 'R' 154 | { 1277, 14, 18, 16, 1, -18 }, // 'S' 155 | { 1309, 14, 18, 16, 1, -18 }, // 'T' 156 | { 1341, 13, 18, 17, 2, -18 }, // 'U' 157 | { 1371, 17, 18, 17, 0, -18 }, // 'V' 158 | { 1410, 22, 18, 23, 1, -18 }, // 'W' 159 | { 1460, 15, 18, 17, 1, -18 }, // 'X' 160 | { 1494, 16, 18, 16, 0, -18 }, // 'Y' 161 | { 1530, 14, 18, 16, 1, -18 }, // 'Z' 162 | { 1562, 5, 24, 8, 2, -20 }, // '[' 163 | { 1577, 11, 20, 11, 0, -18 }, // '\' 164 | { 1605, 6, 24, 8, 0, -20 }, // ']' 165 | { 1623, 9, 9, 11, 1, -18 }, // '^' 166 | { 1634, 12, 2, 12, 0, 0 }, // '_' 167 | { 1637, 6, 4, 9, 1, -19 }, // '`' 168 | { 1640, 11, 13, 15, 2, -13 }, // 'a' 169 | { 1658, 12, 19, 15, 2, -19 }, // 'b' 170 | { 1687, 12, 13, 14, 1, -13 }, // 'c' 171 | { 1707, 12, 19, 15, 1, -19 }, // 'd' 172 | { 1736, 12, 13, 14, 1, -13 }, // 'e' 173 | { 1756, 9, 19, 10, 1, -19 }, // 'f' 174 | { 1778, 12, 18, 15, 1, -13 }, // 'g' 175 | { 1805, 11, 19, 15, 2, -19 }, // 'h' 176 | { 1832, 3, 18, 7, 2, -18 }, // 'i' 177 | { 1839, 6, 23, 7, -1, -18 }, // 'j' 178 | { 1857, 12, 19, 14, 2, -19 }, // 'k' 179 | { 1886, 3, 19, 7, 2, -19 }, // 'l' 180 | { 1894, 19, 13, 23, 2, -13 }, // 'm' 181 | { 1925, 11, 13, 15, 2, -13 }, // 'n' 182 | { 1943, 13, 13, 15, 1, -13 }, // 'o' 183 | { 1965, 12, 18, 15, 2, -13 }, // 'p' 184 | { 1992, 12, 18, 15, 1, -13 }, // 'q' 185 | { 2019, 8, 13, 9, 1, -13 }, // 'r' 186 | { 2032, 12, 13, 14, 1, -13 }, // 's' 187 | { 2052, 8, 16, 9, 0, -16 }, // 't' 188 | { 2068, 11, 13, 15, 2, -13 }, // 'u' 189 | { 2086, 13, 13, 13, 0, -13 }, // 'v' 190 | { 2108, 18, 13, 20, 1, -13 }, // 'w' 191 | { 2138, 12, 13, 13, 1, -13 }, // 'x' 192 | { 2158, 13, 18, 13, 0, -13 }, // 'y' 193 | { 2188, 12, 13, 13, 1, -13 }, // 'z' 194 | { 2208, 8, 24, 9, 1, -20 }, // '{' 195 | { 2232, 3, 21, 7, 2, -18 }, // '|' 196 | { 2240, 8, 24, 9, 0, -20 } // '}' 197 | }; 198 | const GFXfont Roboto_25 PROGMEM = { 199 | (uint8_t *)Roboto_25Bitmaps,(GFXglyph *)Roboto_25Glyphs,0x20, 0x7E, 31}; 200 | 201 | -------------------------------------------------------------------------------- /cyd_weather/Roboto_Black_16.h: -------------------------------------------------------------------------------- 1 | // Created by http://oleddisplay.squix.ch/ Consider a donation 2 | // In case of problems make sure that you are using the font file with the correct version! 3 | const uint8_t Roboto_Black_16Bitmaps[] PROGMEM = { 4 | 5 | // Bitmap Data: 6 | 0x00, // ' ' 7 | 0xEC,0xCC,0xCC,0xCC,0xC0,0xCE, // '!' 8 | 0xDB,0x6D,0xB4, // '"' 9 | 0x1B,0x04,0x81,0x21,0xFE,0x36,0x0D,0x83,0x43,0xFC,0x24,0x0B,0x02,0xC1,0xB0, // '#' 10 | 0x10,0x08,0x0F,0x1F,0xCE,0x67,0x33,0x84,0xF0,0x3C,0x07,0x31,0x9C,0xCF,0xE3,0xE0,0x40,0x20, // '$' 11 | 0x70,0x1B,0x02,0x64,0x6D,0x87,0x60,0x08,0x03,0x00,0xDC,0x16,0xC6,0xD8,0x9B,0x01,0xC0, // '%' 12 | 0x1C,0x03,0xE0,0x37,0x07,0x70,0x3E,0x03,0xC0,0x7C,0xC6,0xFC,0xE7,0x86,0x38,0x7F,0x83,0xFE, // '&' 13 | 0xDB,0x60, // ''' 14 | 0x10,0xE3,0x18,0x63,0x0C,0x30,0xC3,0x0C,0x30,0x61,0x83,0x0C,0x18, // '(' 15 | 0x43,0x87,0x0C,0x30,0x61,0x86,0x18,0x61,0x86,0x30,0xC7,0x18,0xC0, // ')' 16 | 0x18,0x18,0xFE,0x18,0x3C,0x66, // '*' 17 | 0x18,0x0C,0x06,0x1F,0xEF,0xF0,0xC0,0x60,0x30, // '+' 18 | 0x66,0x66,0xC0, // ',' 19 | 0xFB,0xE0, // '-' 20 | 0xEE, // '.' 21 | 0x0C,0x30,0x60,0x83,0x06,0x0C,0x30,0x60,0xC1,0x06,0x0C,0x00, // '/' 22 | 0x7C,0xFE,0xEE,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xEE,0xFE,0x7C, // '0' 23 | 0x0C,0x7B,0xF6,0xE1,0xC3,0x87,0x0E,0x1C,0x38,0x70,0xE0, // '1' 24 | 0x3E,0x1F,0xC6,0x73,0x8C,0x07,0x01,0xC0,0xE0,0x70,0x38,0x1C,0x07,0xF9,0xFE, // '2' 25 | 0x3E,0x1F,0xCE,0x30,0x0C,0x1E,0x07,0x80,0x70,0x0C,0xE3,0xB9,0xC7,0xF0,0xF8, // '3' 26 | 0x07,0x03,0xC1,0xF0,0x7C,0x37,0x0D,0xC6,0x73,0xFE,0xFF,0x81,0xC0,0x70,0x1C, // '4' 27 | 0x7F,0x3F,0x98,0x0C,0x07,0xE3,0xF8,0x9C,0x06,0x03,0x73,0x9F,0xC7,0xC0, // '5' 28 | 0x1C,0x3E,0x1C,0x1C,0x0D,0xC7,0xF3,0x1D,0x8E,0xC7,0x73,0x1F,0x87,0x80, // '6' 29 | 0xFF,0xBF,0xE0,0x30,0x1C,0x06,0x03,0x80,0xE0,0x70,0x1C,0x06,0x03,0x80,0xE0, // '7' 30 | 0x7C,0xFE,0xE6,0xEE,0x7C,0x7C,0xEE,0xC6,0xC6,0xEE,0xFE,0x7C, // '8' 31 | 0x38,0x7F,0x39,0x98,0xCC,0x77,0x3B,0xFC,0xFC,0x06,0x07,0x1F,0x0E,0x00, // '9' 32 | 0xEE,0x00,0x00,0xEE, // ':' 33 | 0x73,0x80,0x00,0x01,0x8C,0x63,0x30, // ';' 34 | 0x02,0x0E,0x7E,0xF0,0xF0,0x7E,0x0E,0x02, // '<' 35 | 0xFE,0xFE,0x00,0xFE,0xFE, // '=' 36 | 0x80,0xE0,0xFC,0x1E,0x1E,0xFC,0xE0,0x80, // '>' 37 | 0x3C,0x3F,0x39,0x9C,0xE0,0x60,0x70,0x70,0x30,0x18,0x00,0x0E,0x07,0x00, // '?' 38 | 0x07,0xC0,0x30,0x60,0xC0,0x61,0x1E,0x46,0x6C,0xCD,0x99,0x93,0x33,0x26,0x66,0x4C,0xC8,0x99,0x91,0x1D,0xC3,0x00,0x02,0x00,0x07,0x08,0x03,0xF0,0x00, // '@' 39 | 0x0E,0x00,0xE0,0x1F,0x01,0xF0,0x1B,0x03,0xB8,0x3B,0x83,0x18,0x7F,0xC7,0xFC,0xE1,0xCE,0x0E, // 'A' 40 | 0xFE,0x3F,0xCC,0x73,0x1C,0xFE,0x3F,0xCC,0x73,0x0C,0xC3,0xB1,0xCF,0xF3,0xF8, // 'B' 41 | 0x3E,0x1F,0xCE,0x3B,0x86,0xE0,0x38,0x0E,0x03,0x80,0xE1,0xB8,0xE7,0xF0,0xF8, // 'C' 42 | 0xFC,0x3F,0x8E,0x73,0x8C,0xE3,0xB8,0xEE,0x3B,0x8E,0xE3,0x39,0xCF,0xE3,0xF0, // 'D' 43 | 0xFF,0x7F,0xB8,0x1C,0x0E,0x07,0xF3,0xF9,0xC0,0xE0,0x70,0x3F,0xDF,0xE0, // 'E' 44 | 0xFE,0xFE,0xE0,0xE0,0xE0,0xFE,0xFE,0xE0,0xE0,0xE0,0xE0,0xE0, // 'F' 45 | 0x3E,0x1F,0xCE,0x3B,0x8E,0xE0,0x30,0x0C,0x7B,0x9E,0xE3,0xB8,0xE7,0xF8,0xFC, // 'G' 46 | 0xE1,0xB8,0x6E,0x1B,0x86,0xE1,0xBF,0xEF,0xFB,0x86,0xE1,0xB8,0x6E,0x1B,0x86, // 'H' 47 | 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, // 'I' 48 | 0x07,0x03,0x81,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0x73,0x9F,0x87,0x80, // 'J' 49 | 0xE3,0xB9,0xCE,0xE3,0xB8,0xFC,0x3F,0x0F,0xC3,0xF8,0xEE,0x39,0xCE,0x73,0x8E, // 'K' 50 | 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xFE,0xFE, // 'L' 51 | 0xF0,0xF7,0x87,0xBC,0x3D,0xF3,0xED,0x9B,0x6C,0xDB,0x66,0xDD,0xEE,0xEF,0x77,0x7B,0xB9,0x9D,0xCC,0xE0, // 'M' 52 | 0xE3,0xB8,0xEF,0x3B,0xCE,0xFB,0xB6,0xEC,0xFB,0x3E,0xC7,0xB1,0xEC,0x3B,0x0E, // 'N' 53 | 0x3E,0x1F,0xCE,0x3B,0x8E,0xC1,0xB0,0x6C,0x1B,0x06,0xE3,0xB8,0xE7,0xF0,0xF8, // 'O' 54 | 0xFC,0x3F,0xCC,0x73,0x0E,0xC3,0xB1,0xCF,0xF3,0xF8,0xC0,0x30,0x0C,0x03,0x00, // 'P' 55 | 0x3E,0x1F,0xCE,0x3B,0x8E,0xC1,0xB0,0x6C,0x1B,0x06,0xE3,0xB8,0xE7,0xF0,0xFC,0x03,0x80,0x40, // 'Q' 56 | 0xFE,0x3F,0xCC,0x73,0x0C,0xC3,0x31,0xCF,0xE3,0xF8,0xCE,0x31,0xCC,0x73,0x0E, // 'R' 57 | 0x1F,0x1F,0xE7,0x39,0xC6,0x78,0x0F,0x81,0xF0,0x0E,0xE1,0x9C,0x67,0xF8,0x7C, // 'S' 58 | 0xFF,0xDF,0xF8,0x30,0x06,0x00,0xC0,0x18,0x03,0x00,0x60,0x0C,0x01,0x80,0x30,0x06,0x00, // 'T' 59 | 0xE3,0xB8,0xEE,0x3B,0x8E,0xE3,0xB8,0xEE,0x3B,0x8E,0xE3,0xB8,0xE7,0xF0,0xF8, // 'U' 60 | 0xE0,0xE7,0x1C,0x71,0xC7,0x1C,0x31,0x83,0xB8,0x3B,0x81,0xB0,0x1B,0x01,0xF0,0x0E,0x00,0xE0, // 'V' 61 | 0xE3,0x1C,0xCE,0x31,0x9E,0x63,0xBD,0xC7,0x7B,0x8E,0xF7,0x0F,0xEC,0x1E,0xF8,0x3C,0xF0,0x79,0xE0,0xF3,0xC0,0xE7,0x00, // 'W' 62 | 0xE1,0xCE,0x71,0xCE,0x1F,0x81,0xF0,0x3C,0x07,0x81,0xF8,0x3F,0x0E,0x71,0xCE,0x70,0xE0, // 'X' 63 | 0xE1,0xCE,0x31,0xCE,0x19,0x83,0xF0,0x3C,0x07,0x80,0x70,0x0C,0x01,0x80,0x30,0x06,0x00, // 'Y' 64 | 0xFF,0xBF,0xE0,0x38,0x1C,0x0E,0x03,0x81,0xC0,0xE0,0x38,0x1C,0x07,0xF9,0xFE, // 'Z' 65 | 0xEE,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xEE, // '[' 66 | 0xE0,0xE0,0x70,0x70,0x70,0x38,0x38,0x18,0x1C,0x1C,0x0C,0x0E,0x0E, // '\' 67 | 0xF7,0x9C,0xE7,0x39,0xCE,0x73,0x9C,0xE7,0x3B,0xDE, // ']' 68 | 0x38,0x38,0x28,0x6C,0x6C,0xC6, // '^' 69 | 0xFE,0xFE, // '_' 70 | 0xF0,0xE0, // '`' 71 | 0x3C,0x3F,0x19,0xC0,0xE3,0xF3,0xFB,0x9C,0xFE,0x7F,0x00, // 'a' 72 | 0xC0,0x60,0x30,0x1B,0x8F,0xE7,0x33,0x1D,0x8E,0xC7,0x73,0x3F,0x9B,0x80, // 'b' 73 | 0x3C,0x3F,0x19,0xDC,0x0E,0x07,0x01,0x9C,0xFC,0x3C,0x00, // 'c' 74 | 0x03,0x01,0x80,0xC7,0x67,0xF3,0x3B,0x8D,0xC6,0xE3,0x33,0x9F,0xC7,0x60, // 'd' 75 | 0x3C,0x3F,0x9C,0xCC,0x6F,0xF3,0xF9,0x88,0xFE,0x1E,0x00, // 'e' 76 | 0x3C,0x79,0xC7,0xEF,0xCE,0x1C,0x38,0x70,0xE1,0xC3,0x80, // 'f' 77 | 0x3F,0x3F,0x98,0xDC,0x6E,0x37,0x19,0x8C,0xFE,0x3B,0x23,0x9F,0xC7,0x80, // 'g' 78 | 0xC0,0xC0,0xC0,0xDC,0xFE,0xCE,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6, // 'h' 79 | 0x6E,0x06,0x66,0x66,0x66,0x66, // 'i' 80 | 0x30,0xE0,0x0C,0x30,0xC3,0x0C,0x30,0xC3,0x0C,0x33,0xCE,0x00, // 'j' 81 | 0xC0,0x60,0x30,0x19,0xEC,0xE6,0xE3,0xE1,0xF0,0xFC,0x67,0x33,0x98,0xE0, // 'k' 82 | 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, // 'l' 83 | 0xDC,0xE7,0xFF,0xB9,0x9D,0xCC,0xEE,0x67,0x73,0x3B,0x99,0xDC,0xCE,0xE6,0x70, // 'm' 84 | 0xDC,0xFE,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6, // 'n' 85 | 0x3E,0x1F,0xC6,0x33,0x8C,0xE3,0xB8,0xE6,0x31,0xFC,0x3E,0x00, // 'o' 86 | 0xDC,0x7F,0x39,0x98,0xEC,0x76,0x3B,0x99,0xFC,0xDC,0x60,0x30,0x18,0x00, // 'p' 87 | 0x3B,0x3F,0x99,0xDC,0x6E,0x37,0x19,0x9C,0xFE,0x3B,0x01,0x80,0xC0,0x60, // 'q' 88 | 0xDB,0xEE,0x30,0xC3,0x0C,0x30,0xC0, // 'r' 89 | 0x3C,0x3F,0x38,0x4E,0x07,0xE0,0x70,0x1D,0xFC,0x3C,0x00, // 's' 90 | 0x70,0xE3,0xE7,0xC7,0x0E,0x1C,0x38,0x70,0x78,0xF0, // 't' 91 | 0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xFE,0x76, // 'u' 92 | 0xE7,0x73,0x99,0x8D,0xC7,0xE1,0xE0,0xF0,0x78,0x18,0x00, // 'v' 93 | 0xE6,0x73,0x33,0x1B,0xD8,0xDE,0xC7,0xFE,0x1D,0xE0,0xE7,0x07,0x38,0x39,0xC0, // 'w' 94 | 0xE7,0x3B,0x1F,0x87,0x83,0xC1,0xE1,0xF8,0xEC,0xE7,0x00, // 'x' 95 | 0xE7,0x73,0x99,0x8F,0xC7,0xE1,0xE0,0xF0,0x78,0x18,0x1C,0x1E,0x0E,0x00, // 'y' 96 | 0xFE,0xFE,0x1C,0x38,0x38,0x70,0xE0,0xFE,0xFE, // 'z' 97 | 0x10,0xE3,0x1C,0x71,0xC7,0x38,0xE1,0xC7,0x1C,0x30,0xC1,0x80, // '{' 98 | 0xDB,0x6D,0xB6,0xDB,0x6D,0x80, // '|' 99 | 0x43,0x86,0x1C,0x71,0xC7,0x0E,0x39,0xC7,0x1C,0x61,0x8C,0x00 // '}' 100 | }; 101 | const GFXglyph Roboto_Black_16Glyphs[] PROGMEM = { 102 | // bitmapOffset, width, height, xAdvance, xOffset, yOffset 103 | { 0, 1, 1, 5, 0, 0 }, // ' ' 104 | { 1, 4, 12, 5, 1, -12 }, // '!' 105 | { 7, 6, 4, 6, 0, -12 }, // '"' 106 | { 10, 10, 12, 10, 0, -12 }, // '#' 107 | { 25, 9, 16, 10, 1, -14 }, // '$' 108 | { 43, 11, 12, 13, 1, -12 }, // '%' 109 | { 60, 12, 12, 12, 0, -12 }, // '&' 110 | { 78, 3, 4, 3, 0, -12 }, // ''' 111 | { 80, 6, 17, 7, 1, -13 }, // '(' 112 | { 93, 6, 17, 7, 0, -13 }, // ')' 113 | { 106, 8, 6, 8, 0, -12 }, // '*' 114 | { 112, 9, 8, 10, 0, -9 }, // '+' 115 | { 121, 4, 5, 5, 0, -2 }, // ',' 116 | { 124, 6, 2, 8, 1, -6 }, // '-' 117 | { 126, 4, 2, 6, 1, -2 }, // '.' 118 | { 127, 7, 13, 7, 0, -12 }, // '/' 119 | { 139, 8, 12, 10, 1, -12 }, // '0' 120 | { 151, 7, 12, 10, 1, -12 }, // '1' 121 | { 162, 10, 12, 10, 0, -12 }, // '2' 122 | { 177, 10, 12, 10, 0, -12 }, // '3' 123 | { 192, 10, 12, 10, 0, -12 }, // '4' 124 | { 207, 9, 12, 10, 0, -12 }, // '5' 125 | { 221, 9, 12, 10, 1, -12 }, // '6' 126 | { 235, 10, 12, 10, 0, -12 }, // '7' 127 | { 250, 8, 12, 10, 1, -12 }, // '8' 128 | { 262, 9, 12, 10, 1, -12 }, // '9' 129 | { 276, 4, 8, 6, 1, -8 }, // ':' 130 | { 280, 5, 11, 6, 0, -8 }, // ';' 131 | { 287, 8, 8, 9, 0, -9 }, // '<' 132 | { 295, 8, 5, 10, 1, -7 }, // '=' 133 | { 300, 8, 8, 9, 1, -9 }, // '>' 134 | { 308, 9, 12, 9, 0, -12 }, // '?' 135 | { 322, 15, 15, 15, 0, -11 }, // '@' 136 | { 351, 12, 12, 12, 0, -12 }, // 'A' 137 | { 369, 10, 12, 11, 1, -12 }, // 'B' 138 | { 384, 10, 12, 12, 1, -12 }, // 'C' 139 | { 399, 10, 12, 11, 1, -12 }, // 'D' 140 | { 414, 9, 12, 10, 1, -12 }, // 'E' 141 | { 428, 8, 12, 10, 1, -12 }, // 'F' 142 | { 440, 10, 12, 12, 1, -12 }, // 'G' 143 | { 455, 10, 12, 12, 1, -12 }, // 'H' 144 | { 470, 4, 12, 6, 1, -12 }, // 'I' 145 | { 476, 9, 12, 10, 0, -12 }, // 'J' 146 | { 490, 10, 12, 11, 1, -12 }, // 'K' 147 | { 505, 8, 12, 10, 1, -12 }, // 'L' 148 | { 517, 13, 12, 15, 1, -12 }, // 'M' 149 | { 537, 10, 12, 12, 1, -12 }, // 'N' 150 | { 552, 10, 12, 12, 1, -12 }, // 'O' 151 | { 567, 10, 12, 11, 1, -12 }, // 'P' 152 | { 582, 10, 14, 12, 1, -12 }, // 'Q' 153 | { 600, 10, 12, 11, 1, -12 }, // 'R' 154 | { 615, 10, 12, 11, 0, -12 }, // 'S' 155 | { 630, 11, 12, 11, 0, -12 }, // 'T' 156 | { 647, 10, 12, 12, 1, -12 }, // 'U' 157 | { 662, 12, 12, 12, 0, -12 }, // 'V' 158 | { 680, 15, 12, 15, 0, -12 }, // 'W' 159 | { 703, 11, 12, 11, 0, -12 }, // 'X' 160 | { 720, 11, 12, 11, 0, -12 }, // 'Y' 161 | { 737, 10, 12, 11, 0, -12 }, // 'Z' 162 | { 752, 4, 16, 6, 1, -13 }, // '[' 163 | { 760, 8, 13, 8, 0, -12 }, // '\' 164 | { 773, 5, 16, 6, 0, -13 }, // ']' 165 | { 783, 8, 6, 8, 0, -12 }, // '^' 166 | { 789, 8, 2, 8, 0, 0 }, // '_' 167 | { 791, 6, 2, 6, 0, -12 }, // '`' 168 | { 793, 9, 9, 10, 0, -9 }, // 'a' 169 | { 804, 9, 12, 10, 1, -12 }, // 'b' 170 | { 818, 9, 9, 9, 0, -9 }, // 'c' 171 | { 829, 9, 12, 10, 0, -12 }, // 'd' 172 | { 843, 9, 9, 10, 0, -9 }, // 'e' 173 | { 854, 7, 12, 7, 0, -12 }, // 'f' 174 | { 865, 9, 12, 10, 0, -9 }, // 'g' 175 | { 879, 8, 12, 10, 1, -12 }, // 'h' 176 | { 891, 4, 12, 5, 0, -12 }, // 'i' 177 | { 897, 6, 15, 5, -1, -12 }, // 'j' 178 | { 909, 9, 12, 10, 1, -12 }, // 'k' 179 | { 923, 4, 12, 5, 1, -12 }, // 'l' 180 | { 929, 13, 9, 15, 1, -9 }, // 'm' 181 | { 944, 8, 9, 10, 1, -9 }, // 'n' 182 | { 953, 10, 9, 10, 0, -9 }, // 'o' 183 | { 965, 9, 12, 10, 1, -9 }, // 'p' 184 | { 979, 9, 12, 10, 0, -9 }, // 'q' 185 | { 993, 6, 9, 7, 1, -9 }, // 'r' 186 | { 1000, 9, 9, 9, 0, -9 }, // 's' 187 | { 1011, 7, 11, 7, 0, -11 }, // 't' 188 | { 1021, 8, 9, 10, 1, -9 }, // 'u' 189 | { 1030, 9, 9, 9, 0, -9 }, // 'v' 190 | { 1041, 13, 9, 13, 0, -9 }, // 'w' 191 | { 1056, 9, 9, 9, 0, -9 }, // 'x' 192 | { 1067, 9, 12, 9, 0, -9 }, // 'y' 193 | { 1081, 8, 9, 9, 1, -9 }, // 'z' 194 | { 1090, 6, 15, 6, 0, -12 }, // '{' 195 | { 1102, 3, 14, 5, 1, -12 }, // '|' 196 | { 1108, 6, 15, 6, 0, -12 } // '}' 197 | }; 198 | const GFXfont Roboto_Black_16 PROGMEM = { 199 | (uint8_t *)Roboto_Black_16Bitmaps,(GFXglyph *)Roboto_Black_16Glyphs,0x20, 0x7E, 19}; 200 | 201 | -------------------------------------------------------------------------------- /cyd_weather/Roboto_Black_20.h: -------------------------------------------------------------------------------- 1 | // Created by http://oleddisplay.squix.ch/ Consider a donation 2 | // In case of problems make sure that you are using the font file with the correct version! 3 | const uint8_t Roboto_Black_20Bitmaps[] PROGMEM = { 4 | 5 | // Bitmap Data: 6 | 0x00, // ' ' 7 | 0xF7,0xBD,0xEF,0x39,0xCC,0x63,0x00,0xCF,0x30, // '!' 8 | 0xCD,0x9B,0x36,0x6C,0xD9,0x00, // '"' 9 | 0x0C,0xC0,0xCC,0x0D,0x80,0xD8,0x7F,0xE7,0xFE,0x19,0x81,0x90,0xFF,0xEF,0xFE,0x13,0x03,0x30,0x33,0x03,0x70, // '#' 10 | 0x04,0x00,0x80,0x7C,0x3F,0xC7,0xFC,0xE7,0x9C,0x03,0xE0,0x3F,0x03,0xF0,0x0F,0x70,0xEF,0x3D,0xFF,0x9F,0xE0,0xF8,0x0C,0x01,0x80, // '$' 11 | 0x78,0x03,0xF1,0x0C,0xCE,0x33,0x30,0xCD,0x83,0xFC,0x07,0xB0,0x01,0xBC,0x0D,0xF8,0x36,0x61,0x99,0x86,0x66,0x31,0xF8,0x03,0xC0, // '%' 12 | 0x1E,0x03,0xF8,0x1F,0xC0,0xE7,0x07,0x30,0x3F,0x80,0xF0,0x0F,0x8C,0xEE,0xE7,0x3F,0x38,0xF9,0xFF,0x8F,0xFE,0x1F,0x78, // '&' 13 | 0xEE,0xEE,0xCC, // ''' 14 | 0x08,0x38,0xE1,0x87,0x0C,0x38,0x70,0xE1,0xC3,0x87,0x0E,0x1C,0x18,0x38,0x30,0x70,0x70,0x40, // '(' 15 | 0x41,0xC1,0xC1,0xC3,0x83,0x07,0x0E,0x1C,0x38,0x70,0xE1,0xC3,0x86,0x1C,0x38,0xE3,0x82,0x00, // ')' 16 | 0x0C,0x03,0x04,0xDB,0xFE,0x1C,0x07,0x83,0x71,0x8C, // '*' 17 | 0x0E,0x01,0xC0,0x38,0x07,0x0F,0xFD,0xFF,0xBF,0xF0,0x70,0x0E,0x01,0xC0,0x38,0x00, // '+' 18 | 0x73,0x9C,0xE6,0x60, // ',' 19 | 0xFD,0xFB,0xF0, // '-' 20 | 0x67,0x98, // '.' 21 | 0x0E,0x0C,0x0C,0x1C,0x18,0x18,0x38,0x30,0x30,0x30,0x70,0x60,0x60,0xE0,0xC0, // '/' 22 | 0x1E,0x0F,0xF1,0xFE,0x79,0xEE,0x1D,0xC3,0xB8,0x77,0x0E,0xE1,0xDC,0x3B,0xCF,0x3F,0xC7,0xF8,0x3C,0x00, // '0' 23 | 0x0C,0xFB,0xF7,0xE9,0xC3,0x87,0x0E,0x1C,0x38,0x70,0xE1,0xC3,0x80, // '1' 24 | 0x3F,0x0F,0xF3,0xFE,0x79,0xEE,0x3C,0x07,0x01,0xE0,0x78,0x1E,0x07,0x81,0xE0,0x7F,0xEF,0xFD,0xFF,0x80, // '2' 25 | 0x3F,0x0F,0xF3,0xFF,0x71,0xE0,0x3C,0x3F,0x07,0xC0,0xFC,0x03,0xC0,0x3B,0x8F,0x7F,0xE7,0xF8,0x7C,0x00, // '3' 26 | 0x07,0x80,0xF0,0x3E,0x0F,0xC1,0xF8,0x7F,0x0D,0xE3,0xBC,0xE7,0x9F,0xFB,0xFF,0x7F,0xE0,0x78,0x0F,0x00, // '4' 27 | 0x7F,0x8F,0xF1,0xFE,0x38,0x07,0x00,0xFE,0x3F,0xE7,0xFE,0x03,0xC0,0x3B,0xCF,0x7F,0xC7,0xF8,0x3C,0x00, // '5' 28 | 0x07,0x03,0xE0,0xFC,0x3C,0x07,0x01,0xFE,0x3F,0xE7,0xFE,0xE1,0xDC,0x3B,0xC7,0x3F,0xE7,0xF8,0x3E,0x00, // '6' 29 | 0xFF,0xDF,0xFB,0xFF,0x01,0xC0,0x38,0x0E,0x01,0xC0,0x70,0x0E,0x03,0x80,0x70,0x1E,0x03,0x80,0xF0,0x00, // '7' 30 | 0x3F,0x0F,0xF3,0xFE,0x79,0xEF,0x3C,0xFF,0x0F,0xC3,0xFC,0xF3,0xDC,0x3B,0xCF,0x7F,0xE7,0xF8,0x7E,0x00, // '8' 31 | 0x3E,0x0F,0xE3,0xFE,0x71,0xCE,0x3D,0xC7,0xBF,0xF3,0xFE,0x3F,0xC0,0x70,0x1E,0x1F,0x83,0xE0,0x70,0x00, // '9' 32 | 0x67,0x98,0x00,0x00,0x00,0x67,0x98, // ':' 33 | 0x31,0xE3,0x00,0x00,0x00,0x00,0x71,0xC7,0x1C,0x63,0x00, // ';' 34 | 0x00,0x80,0xE1,0xF9,0xFC,0xF8,0x3E,0x07,0xF0,0x7E,0x03,0x80,0x20, // '<' 35 | 0xFF,0xBF,0xEF,0xF8,0x00,0xFF,0xBF,0xEF,0xF8, // '=' 36 | 0x80,0x3C,0x0F,0xC1,0xFC,0x0F,0x83,0xE7,0xF3,0xF0,0xF0,0x20,0x00, // '>' 37 | 0x3E,0x1F,0xEF,0xFB,0xCE,0x03,0x81,0xE0,0xF0,0x38,0x1C,0x07,0x00,0x00,0x70,0x1E,0x07,0x00, // '?' 38 | 0x07,0xF0,0x0F,0xFC,0x0F,0x07,0x0E,0x00,0xC6,0x1E,0x77,0x1F,0x9B,0x19,0xCD,0x9C,0xE6,0xCE,0x63,0x66,0x31,0xB3,0x18,0xD9,0xCC,0xCC,0xFF,0xE7,0x3D,0xE1,0x80,0x00,0xF0,0x40,0x3F,0xE0,0x07,0xF0,0x00, // '@' 39 | 0x07,0x80,0x0F,0x00,0x3E,0x00,0x7E,0x00,0xFC,0x03,0xB8,0x07,0x38,0x1E,0x70,0x38,0xF0,0x7F,0xE1,0xFF,0xC3,0xFF,0xC7,0x07,0x9E,0x07,0x80, // 'A' 40 | 0xFF,0x0F,0xFC,0xFF,0xEF,0x1E,0xF1,0xEF,0xFC,0xFF,0x8F,0xFC,0xF1,0xEF,0x0E,0xF1,0xEF,0xFE,0xFF,0xCF,0xF8, // 'B' 41 | 0x1F,0x01,0xFE,0x1F,0xF9,0xE1,0xCE,0x0E,0x70,0x0B,0x80,0x1C,0x00,0xE0,0x07,0x07,0xBC,0x38,0xFF,0xC7,0xFC,0x0F,0x80, // 'C' 42 | 0xFE,0x0F,0xF8,0xFF,0xCF,0x3E,0xF1,0xEF,0x0E,0xF0,0xEF,0x0E,0xF0,0xEF,0x1E,0xF3,0xEF,0xFC,0xFF,0x8F,0xE0, // 'D' 43 | 0xFF,0xDF,0xFB,0xFF,0x78,0x0F,0x01,0xFF,0x3F,0xE7,0xFC,0xF0,0x1E,0x03,0xC0,0x7F,0xEF,0xFD,0xFF,0x80, // 'E' 44 | 0xFF,0xDF,0xFB,0xFF,0x78,0x0F,0x01,0xE0,0x3F,0xE7,0xFC,0xFF,0x9E,0x03,0xC0,0x78,0x0F,0x01,0xE0,0x00, // 'F' 45 | 0x1F,0x81,0xFF,0x1F,0xF8,0xF1,0xEF,0x07,0x78,0x03,0x8F,0xDC,0x7E,0xF3,0xF7,0x87,0x9E,0x3C,0xFF,0xE3,0xFE,0x07,0xC0, // 'G' 46 | 0xF0,0x77,0x83,0xBC,0x1D,0xE0,0xEF,0x07,0x7F,0xFB,0xFF,0xDF,0xFE,0xF0,0x77,0x83,0xBC,0x1D,0xE0,0xEF,0x07,0x78,0x38, // 'H' 47 | 0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x78, // 'I' 48 | 0x01,0xC0,0x38,0x07,0x00,0xE0,0x1C,0x03,0x80,0x70,0x0E,0x01,0xDE,0x3B,0xCF,0x3F,0xE7,0xF8,0x3E,0x00, // 'J' 49 | 0xF0,0xF7,0x8F,0x3C,0xF1,0xEF,0x0F,0x78,0x7F,0x83,0xF8,0x1F,0xE0,0xFF,0x87,0xBC,0x3C,0xF1,0xE3,0xCF,0x1E,0x78,0x78, // 'K' 50 | 0xF0,0x3C,0x0F,0x03,0xC0,0xF0,0x3C,0x0F,0x03,0xC0,0xF0,0x3C,0x0F,0x03,0xFE,0xFF,0xBF,0xE0, // 'L' 51 | 0xF8,0x1E,0xF8,0x3E,0xF8,0x3E,0xFC,0x3E,0xFC,0x7E,0xEC,0x7E,0xEE,0x6E,0xEE,0xEE,0xE6,0xEE,0xE7,0xCE,0xE7,0xCE,0xF3,0xCE,0xF3,0x8E,0xF3,0x8E, // 'M' 52 | 0xF0,0xF7,0x87,0xBE,0x3D,0xF1,0xEF,0xCF,0x77,0x7B,0xBB,0xDC,0xFE,0xE7,0xF7,0x1F,0xB8,0xFD,0xC3,0xEE,0x0F,0x70,0x78, // 'N' 53 | 0x1F,0x81,0xFE,0x1F,0xF9,0xE1,0xEF,0x0F,0x70,0x3B,0x81,0xDC,0x0E,0xE0,0x77,0x87,0xBC,0x3C,0xFF,0xC3,0xFC,0x0F,0xC0, // 'O' 54 | 0xFF,0x0F,0xFC,0xFF,0xEF,0x1E,0xF0,0xEF,0x0E,0xF1,0xEF,0xFE,0xFF,0xCF,0xF0,0xF0,0x0F,0x00,0xF0,0x0F,0x00, // 'P' 55 | 0x1F,0x81,0xFE,0x1F,0xF9,0xE1,0xEF,0x0F,0x70,0x3B,0x81,0xDC,0x0E,0xE0,0x77,0x87,0xBC,0x3C,0xFF,0xC3,0xFC,0x0F,0xF0,0x03,0xC0,0x0C, // 'Q' 56 | 0xFF,0x87,0xFE,0x3F,0xF9,0xC3,0xCE,0x0E,0x70,0xF3,0xFF,0x1F,0xF8,0xFF,0x87,0x1C,0x38,0xF1,0xC3,0x8E,0x1E,0x70,0x78, // 'R' 57 | 0x1F,0x07,0xFC,0x7F,0xEF,0x1E,0xF0,0x07,0xE0,0x3F,0x81,0xFC,0x03,0xEE,0x0E,0xF1,0xEF,0xFE,0x7F,0xC1,0xF8, // 'S' 58 | 0xFF,0xF7,0xFF,0xBF,0xFC,0x0E,0x00,0x70,0x03,0x80,0x1C,0x00,0xE0,0x07,0x00,0x38,0x01,0xC0,0x0E,0x00,0x70,0x03,0x80, // 'T' 59 | 0xE0,0xEE,0x0E,0xE0,0xEE,0x0E,0xE0,0xEE,0x0E,0xE0,0xEE,0x0E,0xE0,0xEE,0x0E,0xF1,0xEF,0xFE,0x7F,0xC1,0xF0, // 'U' 60 | 0xF0,0x7B,0xC1,0xE7,0x07,0x1E,0x3C,0x78,0xF0,0xE3,0x83,0x8E,0x0F,0x78,0x1D,0xC0,0x77,0x01,0xFC,0x03,0xE0,0x0F,0x80,0x3E,0x00, // 'V' 61 | 0xF1,0xC7,0xBC,0x71,0xE7,0x3C,0x71,0xCF,0x9C,0x73,0xE7,0x1C,0xF9,0xC7,0xB6,0xF0,0xFD,0xF8,0x3F,0x7E,0x0F,0xDF,0x83,0xE3,0xE0,0x78,0xF0,0x1E,0x3C,0x07,0x8F,0x00, // 'W' 62 | 0xF0,0xF9,0xE3,0xC3,0x9E,0x0F,0x78,0x1F,0xC0,0x7E,0x00,0xF8,0x03,0xE0,0x1F,0xC0,0x7F,0x03,0xDE,0x1E,0x38,0x78,0xF3,0xC1,0xE0, // 'X' 63 | 0xF0,0x79,0xC3,0xC7,0x8E,0x0E,0x78,0x3D,0xC0,0x77,0x01,0xF8,0x03,0xE0,0x0F,0x00,0x1C,0x00,0x70,0x01,0xC0,0x07,0x00,0x1C,0x00, // 'Y' 64 | 0xFF,0xEF,0xFE,0xFF,0xC0,0x3C,0x07,0x80,0x70,0x0E,0x01,0xE0,0x3C,0x07,0x80,0x70,0x0F,0xFE,0xFF,0xEF,0xFE, // 'Z' 65 | 0xFB,0xEF,0xB8,0xE3,0x8E,0x38,0xE3,0x8E,0x38,0xE3,0x8E,0x38,0xE3,0xEF,0xBE, // '[' 66 | 0xE0,0x3C,0x07,0x01,0xE0,0x38,0x0E,0x03,0xC0,0x70,0x1E,0x03,0x80,0xE0,0x3C,0x07,0x01,0xE0,0x38, // '\' 67 | 0xFB,0xEF,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x7B,0xEF,0xBE, // ']' 68 | 0x1C,0x07,0x03,0xE0,0xD8,0x77,0x18,0xCE,0x38, // '^' 69 | 0xFF,0xBF,0xE0, // '_' 70 | 0xE1,0xC3,0x80, // '`' 71 | 0x1F,0x0F,0xF1,0xFF,0x01,0xE3,0xFC,0xFF,0x9C,0xF7,0x9E,0x7F,0xCF,0xF8,0xF7,0x00, // 'a' 72 | 0xE0,0x1C,0x03,0x80,0x70,0x0E,0xE1,0xFF,0x3F,0xE7,0x1C,0xE3,0xDC,0x7B,0x8F,0x71,0xCF,0xF9,0xFF,0x3B,0xC0, // 'b' 73 | 0x1F,0x07,0xF1,0xFE,0x39,0xEF,0x01,0xE0,0x3C,0x03,0x8E,0x7F,0x87,0xF0,0x7C,0x00, // 'c' 74 | 0x01,0xC0,0x38,0x07,0x00,0xE1,0xDC,0xFF,0x9F,0xF3,0x8E,0xF1,0xDE,0x3B,0xC7,0x38,0xE7,0xFC,0xFF,0x87,0x70, // 'd' 75 | 0x3E,0x1F,0xCF,0xFB,0x8E,0xFF,0xBF,0xEE,0x03,0xC4,0xFF,0x9F,0xE1,0xE0, // 'e' 76 | 0x1E,0x3E,0x3E,0x38,0xFE,0xFE,0xFE,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, // 'f' 77 | 0x3D,0xCF,0xFB,0xFF,0x79,0xEE,0x3D,0xC7,0xB8,0xF7,0x9E,0xFF,0xCF,0xF8,0xFF,0x21,0xE7,0xF8,0xFF,0x0F,0x80, // 'g' 78 | 0xE0,0x38,0x0E,0x03,0x80,0xEF,0x3F,0xEF,0xFB,0x8E,0xE3,0xB8,0xEE,0x3B,0x8E,0xE3,0xB8,0xEE,0x38, // 'h' 79 | 0x67,0x98,0x0F,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xC0, // 'i' 80 | 0x38,0xE3,0x80,0x38,0xE3,0x8E,0x38,0xE3,0x8E,0x38,0xE3,0x8E,0xFB,0xEF,0x00, // 'j' 81 | 0xE0,0x1C,0x03,0x80,0x70,0x0E,0x3D,0xCF,0x3B,0xC7,0xF0,0xFC,0x1F,0xC3,0xF8,0x7B,0x8E,0x79,0xC7,0x38,0xF0, // 'k' 82 | 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xE0, // 'l' 83 | 0xEF,0x3C,0xFF,0xFE,0xFF,0xFE,0xE3,0x8E,0xE3,0x8E,0xE3,0x8E,0xE3,0x8E,0xE3,0x8E,0xE3,0x8E,0xE3,0x8E,0xE3,0x8E, // 'm' 84 | 0xEF,0x3F,0xEF,0xFB,0x8E,0xE3,0xB8,0xEE,0x3B,0x8E,0xE3,0xB8,0xEE,0x38, // 'n' 85 | 0x3E,0x0F,0xE3,0xFE,0x71,0xCE,0x3D,0xC7,0xB8,0xF7,0x1C,0xFF,0x8F,0xE0,0xF8,0x00, // 'o' 86 | 0xEE,0x1F,0xF3,0xFE,0x71,0xCE,0x3D,0xC7,0xB8,0xF7,0x1C,0xFF,0x9F,0xF3,0xB8,0x70,0x0E,0x01,0xC0,0x38,0x00, // 'p' 87 | 0x1D,0xCF,0xF9,0xFF,0x38,0xEF,0x1D,0xE3,0xBC,0x73,0x8E,0x7F,0xCF,0xF8,0x77,0x00,0xE0,0x1C,0x03,0x80,0x70, // 'q' 88 | 0xEE,0xFE,0xFE,0xF0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0, // 'r' 89 | 0x3E,0x0F,0xF1,0xFE,0x39,0xC7,0xC4,0x7E,0x01,0xE7,0x9C,0x7F,0xCF,0xF0,0x78,0x00, // 's' 90 | 0x38,0x38,0x38,0xFE,0xFE,0xFE,0x38,0x38,0x38,0x38,0x38,0x3E,0x3E,0x1E, // 't' 91 | 0xE3,0xB8,0xEE,0x3B,0x8E,0xE3,0xB8,0xEE,0x3B,0x8E,0xFF,0xBF,0xE7,0xB8, // 'u' 92 | 0xE1,0xDE,0x79,0xCE,0x39,0xC7,0x38,0x7E,0x0F,0xC1,0xF8,0x1E,0x03,0xC0,0x78,0x00, // 'v' 93 | 0xF3,0x9E,0x73,0x9C,0x73,0x9C,0x77,0xDC,0x77,0xD8,0x36,0xF8,0x3E,0xF8,0x3E,0xF8,0x3C,0x78,0x1C,0x70,0x1C,0x70, // 'w' 94 | 0xF3,0xCE,0x70,0xFE,0x1F,0x81,0xF0,0x3C,0x0F,0xC1,0xF8,0x7B,0x8E,0x7B,0xC7,0x00, // 'x' 95 | 0xE1,0xDE,0x79,0xCE,0x39,0xC7,0xF8,0x7E,0x0F,0xC1,0xF8,0x1E,0x03,0xC0,0x78,0x0E,0x07,0xC0,0xF0,0x1C,0x00, // 'y' 96 | 0xFF,0xBF,0xEF,0xF0,0x38,0x1E,0x0F,0x03,0x81,0xC0,0xFF,0xBF,0xEF,0xF8, // 'z' 97 | 0x08,0xE3,0x9C,0x71,0xC7,0x1C,0x73,0x8E,0x1C,0x71,0xC7,0x1C,0x70,0xE3,0x82, // '{' 98 | 0xAA,0xAA,0xAA,0xAA,0x80, // '|' 99 | 0xC3,0x8E,0x1C,0x71,0xC7,0x1C,0x70,0xE3,0x9C,0x71,0xC7,0x1C,0x73,0x8E,0x20 // '}' 100 | }; 101 | const GFXglyph Roboto_Black_20Glyphs[] PROGMEM = { 102 | // bitmapOffset, width, height, xAdvance, xOffset, yOffset 103 | { 0, 1, 1, 6, 0, 0 }, // ' ' 104 | { 1, 5, 14, 7, 1, -14 }, // '!' 105 | { 10, 7, 6, 7, 0, -15 }, // '"' 106 | { 16, 12, 14, 13, 0, -14 }, // '#' 107 | { 37, 11, 18, 13, 1, -16 }, // '$' 108 | { 62, 14, 14, 16, 1, -14 }, // '%' 109 | { 87, 13, 14, 14, 1, -14 }, // '&' 110 | { 110, 4, 6, 4, 0, -15 }, // ''' 111 | { 113, 7, 20, 8, 1, -16 }, // '(' 112 | { 131, 7, 20, 8, 0, -16 }, // ')' 113 | { 149, 10, 8, 10, 0, -14 }, // '*' 114 | { 159, 11, 11, 12, 0, -12 }, // '+' 115 | { 175, 5, 6, 6, 0, -3 }, // ',' 116 | { 179, 7, 3, 10, 1, -7 }, // '-' 117 | { 182, 5, 3, 7, 1, -3 }, // '.' 118 | { 184, 8, 15, 8, 0, -14 }, // '/' 119 | { 199, 11, 14, 13, 1, -14 }, // '0' 120 | { 219, 7, 14, 13, 2, -14 }, // '1' 121 | { 232, 11, 14, 13, 1, -14 }, // '2' 122 | { 252, 11, 14, 13, 1, -14 }, // '3' 123 | { 272, 11, 14, 13, 1, -14 }, // '4' 124 | { 292, 11, 14, 13, 1, -14 }, // '5' 125 | { 312, 11, 14, 13, 1, -14 }, // '6' 126 | { 332, 11, 14, 13, 1, -14 }, // '7' 127 | { 352, 11, 14, 13, 1, -14 }, // '8' 128 | { 372, 11, 14, 13, 1, -14 }, // '9' 129 | { 392, 5, 11, 7, 1, -11 }, // ':' 130 | { 399, 6, 14, 7, 0, -11 }, // ';' 131 | { 410, 10, 10, 11, 0, -11 }, // '<' 132 | { 423, 10, 7, 13, 1, -9 }, // '=' 133 | { 432, 10, 10, 11, 1, -11 }, // '>' 134 | { 445, 10, 14, 11, 0, -14 }, // '?' 135 | { 463, 17, 18, 19, 1, -14 }, // '@' 136 | { 502, 15, 14, 15, 0, -14 }, // 'A' 137 | { 529, 12, 14, 14, 1, -14 }, // 'B' 138 | { 550, 13, 14, 14, 1, -14 }, // 'C' 139 | { 573, 12, 14, 14, 1, -14 }, // 'D' 140 | { 594, 11, 14, 12, 1, -14 }, // 'E' 141 | { 614, 11, 14, 12, 1, -14 }, // 'F' 142 | { 634, 13, 14, 15, 1, -14 }, // 'G' 143 | { 657, 13, 14, 15, 1, -14 }, // 'H' 144 | { 680, 5, 14, 7, 1, -14 }, // 'I' 145 | { 689, 11, 14, 12, 0, -14 }, // 'J' 146 | { 709, 13, 14, 14, 1, -14 }, // 'K' 147 | { 732, 10, 14, 12, 1, -14 }, // 'L' 148 | { 750, 16, 14, 19, 1, -14 }, // 'M' 149 | { 778, 13, 14, 15, 1, -14 }, // 'N' 150 | { 801, 13, 14, 15, 1, -14 }, // 'O' 151 | { 824, 12, 14, 14, 1, -14 }, // 'P' 152 | { 845, 13, 16, 15, 1, -14 }, // 'Q' 153 | { 871, 13, 14, 14, 1, -14 }, // 'R' 154 | { 894, 12, 14, 14, 1, -14 }, // 'S' 155 | { 915, 13, 14, 14, 0, -14 }, // 'T' 156 | { 938, 12, 14, 14, 1, -14 }, // 'U' 157 | { 959, 14, 14, 14, 0, -14 }, // 'V' 158 | { 984, 18, 14, 18, 0, -14 }, // 'W' 159 | { 1016, 14, 14, 14, 0, -14 }, // 'X' 160 | { 1041, 14, 14, 14, 0, -14 }, // 'Y' 161 | { 1066, 12, 14, 13, 1, -14 }, // 'Z' 162 | { 1087, 6, 20, 7, 1, -17 }, // '[' 163 | { 1102, 10, 15, 10, 0, -14 }, // '\' 164 | { 1121, 6, 20, 7, 0, -17 }, // ']' 165 | { 1136, 10, 7, 10, 0, -14 }, // '^' 166 | { 1145, 10, 2, 10, 0, 0 }, // '_' 167 | { 1148, 6, 3, 8, 1, -15 }, // '`' 168 | { 1151, 11, 11, 12, 0, -11 }, // 'a' 169 | { 1167, 11, 15, 12, 1, -15 }, // 'b' 170 | { 1188, 11, 11, 11, 0, -11 }, // 'c' 171 | { 1204, 11, 15, 12, 0, -15 }, // 'd' 172 | { 1225, 10, 11, 12, 1, -11 }, // 'e' 173 | { 1239, 8, 15, 8, 0, -15 }, // 'f' 174 | { 1254, 11, 15, 13, 1, -11 }, // 'g' 175 | { 1275, 10, 15, 12, 1, -15 }, // 'h' 176 | { 1294, 5, 15, 7, 1, -15 }, // 'i' 177 | { 1304, 6, 19, 6, -1, -15 }, // 'j' 178 | { 1319, 11, 15, 12, 1, -15 }, // 'k' 179 | { 1340, 4, 15, 7, 1, -15 }, // 'l' 180 | { 1348, 16, 11, 18, 1, -11 }, // 'm' 181 | { 1370, 10, 11, 12, 1, -11 }, // 'n' 182 | { 1384, 11, 11, 12, 1, -11 }, // 'o' 183 | { 1400, 11, 15, 12, 1, -11 }, // 'p' 184 | { 1421, 11, 15, 12, 0, -11 }, // 'q' 185 | { 1442, 8, 11, 9, 1, -11 }, // 'r' 186 | { 1453, 11, 11, 11, 0, -11 }, // 's' 187 | { 1469, 8, 14, 8, 0, -14 }, // 't' 188 | { 1483, 10, 11, 12, 1, -11 }, // 'u' 189 | { 1497, 11, 11, 11, 0, -11 }, // 'v' 190 | { 1513, 16, 11, 16, 0, -11 }, // 'w' 191 | { 1535, 11, 11, 11, 0, -11 }, // 'x' 192 | { 1551, 11, 15, 11, 0, -11 }, // 'y' 193 | { 1572, 10, 11, 11, 1, -11 }, // 'z' 194 | { 1586, 6, 20, 8, 1, -16 }, // '{' 195 | { 1601, 2, 17, 6, 2, -14 }, // '|' 196 | { 1606, 6, 20, 8, 1, -16 } // '}' 197 | }; 198 | const GFXfont Roboto_Black_20 PROGMEM = { 199 | (uint8_t *)Roboto_Black_20Bitmaps,(GFXglyph *)Roboto_Black_20Glyphs,0x20, 0x7E, 24}; 200 | 201 | -------------------------------------------------------------------------------- /cyd_weather/debug.cfg: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Example OpenOCD configuration file for ESP32-S3 connected via builtin USB-JTAG adapter. 4 | # 5 | # For example, OpenOCD can be started for ESP32-S3 debugging on 6 | # 7 | # openocd -f board/esp32s3-builtin.cfg 8 | # 9 | 10 | # Source the JTAG interface configuration file 11 | source [find interface/esp_usb_jtag.cfg] 12 | # Source the ESP32-S3 configuration file 13 | source [find target/esp32s3.cfg] 14 | 15 | -------------------------------------------------------------------------------- /cyd_weather/debug_custom.json: -------------------------------------------------------------------------------- 1 | { 2 | "name":"Arduino on ESP32-S3", 3 | "toolchainPrefix":"xtensa-esp32s3-elf", 4 | "svdFile":"esp32s3.svd", 5 | "request":"attach", 6 | "overrideAttachCommands":[ 7 | "set remote hardware-watchpoint-limit 2", 8 | "monitor reset halt", 9 | "monitor gdb_sync", 10 | "thb setup", 11 | "c" 12 | ], 13 | "overrideRestartCommands":[ 14 | "monitor reset halt", 15 | "monitor gdb_sync" 16 | ] 17 | } -------------------------------------------------------------------------------- /cyd_weather/hand_4bpp.h: -------------------------------------------------------------------------------- 1 | // Created with image_to_c 2 | // https://github.com/bitbank2/image_to_c 3 | // 4 | // hand_4bpp 5 | // Data size = 1596 bytes 6 | // 7 | // OS/2 BMP, Compression=RLE, Size: 26 x 40, 8-Bpp 8 | // 9 | // for non-Arduino builds... 10 | #ifndef PROGMEM 11 | #define PROGMEM 12 | #endif 13 | const uint8_t hand_4bpp[] PROGMEM = { 14 | 0x42,0x4d,0x3c,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xea,0x03,0x00,0x00,0x7c,0x00, 15 | 0x00,0x00,0x1a,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x01,0x00,0x08,0x00,0x01,0x00, 16 | 0x00,0x00,0x52,0x02,0x00,0x00,0x13,0x0b,0x00,0x00,0x13,0x0b,0x00,0x00,0xd8,0x00, 17 | 0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00, 18 | 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x47,0x52,0x73,0x00,0x00,0x00,0x00,0x00,0x00, 19 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 20 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 21 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 22 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0xcc,0xff, 23 | 0xff,0x00,0x99,0xff,0xff,0x00,0x66,0xff,0xff,0x00,0x33,0xff,0xff,0x00,0x00,0xff, 24 | 0xff,0x00,0xff,0xcc,0xff,0x00,0xcc,0xcc,0xff,0x00,0x99,0xcc,0xff,0x00,0x66,0xcc, 25 | 0xff,0x00,0x33,0xcc,0xff,0x00,0x00,0xcc,0xff,0x00,0xff,0x99,0xff,0x00,0xcc,0x99, 26 | 0xff,0x00,0x99,0x99,0xff,0x00,0x66,0x99,0xff,0x00,0x33,0x99,0xff,0x00,0x00,0x99, 27 | 0xff,0x00,0xff,0x66,0xff,0x00,0xcc,0x66,0xff,0x00,0x99,0x66,0xff,0x00,0x66,0x66, 28 | 0xff,0x00,0x33,0x66,0xff,0x00,0x00,0x66,0xff,0x00,0xff,0x33,0xff,0x00,0xcc,0x33, 29 | 0xff,0x00,0x99,0x33,0xff,0x00,0x66,0x33,0xff,0x00,0x33,0x33,0xff,0x00,0x00,0x33, 30 | 0xff,0x00,0xff,0x00,0xff,0x00,0xcc,0x00,0xff,0x00,0x99,0x00,0xff,0x00,0x66,0x00, 31 | 0xff,0x00,0x33,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0xff,0xff,0xcc,0x00,0xcc,0xff, 32 | 0xcc,0x00,0x99,0xff,0xcc,0x00,0x66,0xff,0xcc,0x00,0x33,0xff,0xcc,0x00,0x00,0xff, 33 | 0xcc,0x00,0xff,0xcc,0xcc,0x00,0xcc,0xcc,0xcc,0x00,0x99,0xcc,0xcc,0x00,0x66,0xcc, 34 | 0xcc,0x00,0x33,0xcc,0xcc,0x00,0x00,0xcc,0xcc,0x00,0xff,0x99,0xcc,0x00,0xcc,0x99, 35 | 0xcc,0x00,0x99,0x99,0xcc,0x00,0x66,0x99,0xcc,0x00,0x33,0x99,0xcc,0x00,0x00,0x99, 36 | 0xcc,0x00,0xff,0x66,0xcc,0x00,0xcc,0x66,0xcc,0x00,0x99,0x66,0xcc,0x00,0x66,0x66, 37 | 0xcc,0x00,0x33,0x66,0xcc,0x00,0x00,0x66,0xcc,0x00,0xff,0x33,0xcc,0x00,0xcc,0x33, 38 | 0xcc,0x00,0x99,0x33,0xcc,0x00,0x66,0x33,0xcc,0x00,0x33,0x33,0xcc,0x00,0x00,0x33, 39 | 0xcc,0x00,0xff,0x00,0xcc,0x00,0xcc,0x00,0xcc,0x00,0x99,0x00,0xcc,0x00,0x66,0x00, 40 | 0xcc,0x00,0x33,0x00,0xcc,0x00,0x00,0x00,0xcc,0x00,0xff,0xff,0x99,0x00,0xcc,0xff, 41 | 0x99,0x00,0x99,0xff,0x99,0x00,0x66,0xff,0x99,0x00,0x33,0xff,0x99,0x00,0x00,0xff, 42 | 0x99,0x00,0xff,0xcc,0x99,0x00,0xcc,0xcc,0x99,0x00,0x99,0xcc,0x99,0x00,0x66,0xcc, 43 | 0x99,0x00,0x33,0xcc,0x99,0x00,0x00,0xcc,0x99,0x00,0xff,0x99,0x99,0x00,0xcc,0x99, 44 | 0x99,0x00,0x99,0x99,0x99,0x00,0x66,0x99,0x99,0x00,0x33,0x99,0x99,0x00,0x00,0x99, 45 | 0x99,0x00,0xff,0x66,0x99,0x00,0xcc,0x66,0x99,0x00,0x99,0x66,0x99,0x00,0x66,0x66, 46 | 0x99,0x00,0x33,0x66,0x99,0x00,0x00,0x66,0x99,0x00,0xff,0x33,0x99,0x00,0xcc,0x33, 47 | 0x99,0x00,0x99,0x33,0x99,0x00,0x66,0x33,0x99,0x00,0x33,0x33,0x99,0x00,0x00,0x33, 48 | 0x99,0x00,0xff,0x00,0x99,0x00,0xcc,0x00,0x99,0x00,0x99,0x00,0x99,0x00,0x66,0x00, 49 | 0x99,0x00,0x33,0x00,0x99,0x00,0x00,0x00,0x99,0x00,0xff,0xff,0x66,0x00,0xcc,0xff, 50 | 0x66,0x00,0x99,0xff,0x66,0x00,0x66,0xff,0x66,0x00,0x33,0xff,0x66,0x00,0x00,0xff, 51 | 0x66,0x00,0xff,0xcc,0x66,0x00,0xcc,0xcc,0x66,0x00,0x99,0xcc,0x66,0x00,0x66,0xcc, 52 | 0x66,0x00,0x33,0xcc,0x66,0x00,0x00,0xcc,0x66,0x00,0xff,0x99,0x66,0x00,0xcc,0x99, 53 | 0x66,0x00,0x99,0x99,0x66,0x00,0x66,0x99,0x66,0x00,0x33,0x99,0x66,0x00,0x00,0x99, 54 | 0x66,0x00,0xff,0x66,0x66,0x00,0xcc,0x66,0x66,0x00,0x99,0x66,0x66,0x00,0x66,0x66, 55 | 0x66,0x00,0x33,0x66,0x66,0x00,0x00,0x66,0x66,0x00,0xff,0x33,0x66,0x00,0xcc,0x33, 56 | 0x66,0x00,0x99,0x33,0x66,0x00,0x66,0x33,0x66,0x00,0x33,0x33,0x66,0x00,0x00,0x33, 57 | 0x66,0x00,0xff,0x00,0x66,0x00,0xcc,0x00,0x66,0x00,0x99,0x00,0x66,0x00,0x66,0x00, 58 | 0x66,0x00,0x33,0x00,0x66,0x00,0x00,0x00,0x66,0x00,0xff,0xff,0x33,0x00,0xcc,0xff, 59 | 0x33,0x00,0x99,0xff,0x33,0x00,0x66,0xff,0x33,0x00,0x33,0xff,0x33,0x00,0x00,0xff, 60 | 0x33,0x00,0xff,0xcc,0x33,0x00,0xcc,0xcc,0x33,0x00,0x99,0xcc,0x33,0x00,0x66,0xcc, 61 | 0x33,0x00,0x33,0xcc,0x33,0x00,0x00,0xcc,0x33,0x00,0xff,0x99,0x33,0x00,0xcc,0x99, 62 | 0x33,0x00,0x99,0x99,0x33,0x00,0x66,0x99,0x33,0x00,0x33,0x99,0x33,0x00,0x00,0x99, 63 | 0x33,0x00,0xff,0x66,0x33,0x00,0xcc,0x66,0x33,0x00,0x99,0x66,0x33,0x00,0x66,0x66, 64 | 0x33,0x00,0x33,0x66,0x33,0x00,0x00,0x66,0x33,0x00,0xff,0x33,0x33,0x00,0xcc,0x33, 65 | 0x33,0x00,0x99,0x33,0x33,0x00,0x66,0x33,0x33,0x00,0x33,0x33,0x33,0x00,0x00,0x33, 66 | 0x33,0x00,0xff,0x00,0x33,0x00,0xcc,0x00,0x33,0x00,0x99,0x00,0x33,0x00,0x66,0x00, 67 | 0x33,0x00,0x33,0x00,0x33,0x00,0x00,0x00,0x33,0x00,0xff,0xff,0x00,0x00,0xcc,0xff, 68 | 0x00,0x00,0x99,0xff,0x00,0x00,0x66,0xff,0x00,0x00,0x33,0xff,0x00,0x00,0x00,0xff, 69 | 0x00,0x00,0xff,0xcc,0x00,0x00,0xcc,0xcc,0x00,0x00,0x99,0xcc,0x00,0x00,0x66,0xcc, 70 | 0x00,0x00,0x33,0xcc,0x00,0x00,0x00,0xcc,0x00,0x00,0xff,0x99,0x00,0x00,0xcc,0x99, 71 | 0x00,0x00,0x99,0x99,0x00,0x00,0x66,0x99,0x00,0x00,0x33,0x99,0x00,0x00,0x00,0x99, 72 | 0x00,0x00,0xff,0x66,0x00,0x00,0xcc,0x66,0x00,0x00,0x99,0x66,0x00,0x00,0x66,0x66, 73 | 0x00,0x00,0x33,0x66,0x00,0x00,0x00,0x66,0x00,0x00,0xff,0x33,0x00,0x00,0xcc,0x33, 74 | 0x00,0x00,0x99,0x33,0x00,0x00,0x66,0x33,0x00,0x00,0x33,0x33,0x00,0x00,0x00,0x33, 75 | 0x00,0x00,0xff,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x66,0x00, 76 | 0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0xd7,0x00,0x00,0x0c,0xd7, 77 | 0x08,0x23,0x06,0xd7,0x00,0x00,0x0a,0xd7,0x0b,0x23,0x05,0xd7,0x00,0x00,0x09,0xd7, 78 | 0x0d,0x23,0x04,0xd7,0x00,0x00,0x08,0xd7,0x0f,0x23,0x03,0xd7,0x00,0x00,0x08,0xd7, 79 | 0x10,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00,0x07,0xd7,0x11,0x23,0x01,0xd7,0x01,0xd7, 80 | 0x00,0x00,0x07,0xd7,0x11,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00,0x06,0xd7,0x13,0x23, 81 | 0x01,0xd7,0x00,0x00,0x06,0xd7,0x13,0x23,0x01,0xd7,0x00,0x00,0x06,0xd7,0x13,0x23, 82 | 0x01,0xd7,0x00,0x00,0x05,0xd7,0x14,0x23,0x01,0xd7,0x00,0x00,0x05,0xd7,0x14,0x23, 83 | 0x01,0xd7,0x00,0x00,0x05,0xd7,0x14,0x23,0x01,0xd7,0x00,0x00,0x05,0xd7,0x14,0x23, 84 | 0x01,0xd7,0x00,0x00,0x04,0xd7,0x04,0x23,0x01,0xd7,0x0f,0x23,0x01,0xd7,0x01,0xd7, 85 | 0x00,0x00,0x04,0xd7,0x04,0x23,0x01,0xd7,0x0c,0x23,0x00,0x05,0xd7,0x23,0x23,0xd7, 86 | 0xd7,0x00,0x00,0x00,0x03,0xd7,0x04,0x23,0x01,0xd7,0x01,0xd7,0x0c,0x23,0x05,0xd7, 87 | 0x00,0x00,0x03,0xd7,0x04,0x23,0x01,0xd7,0x01,0xd7,0x08,0x23,0x00,0x03,0xd7,0x23, 88 | 0x23,0x00,0x06,0xd7,0x00,0x00,0x03,0xd7,0x03,0x23,0x03,0xd7,0x04,0x23,0x01,0xd7, 89 | 0x03,0x23,0x09,0xd7,0x00,0x00,0x06,0xd7,0x00,0x03,0x23,0xd7,0xd7,0x00,0x04,0x23, 90 | 0x00,0x03,0xd7,0x23,0x23,0x00,0x0a,0xd7,0x00,0x00,0x05,0xd7,0x00,0x04,0x23,0x23, 91 | 0xd7,0xd7,0x04,0x23,0x0d,0xd7,0x00,0x00,0x04,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7, 92 | 0x04,0x23,0x04,0xd7,0x01,0x23,0x08,0xd7,0x00,0x00,0x03,0xd7,0x01,0x23,0x01,0x23, 93 | 0x04,0xd7,0x04,0x23,0x04,0xd7,0x01,0x23,0x01,0x23,0x07,0xd7,0x00,0x00,0x00,0x04, 94 | 0xd7,0xd7,0x23,0x23,0x05,0xd7,0x04,0x23,0x05,0xd7,0x01,0x23,0x01,0x23,0x06,0xd7, 95 | 0x00,0x00,0x00,0x03,0xd7,0xd7,0x23,0x00,0x06,0xd7,0x04,0x23,0x06,0xd7,0x01,0x23, 96 | 0x06,0xd7,0x00,0x00,0x00,0x03,0xd7,0x23,0x23,0x00,0x04,0xd7,0x01,0x23,0x01,0xd7, 97 | 0x04,0x23,0x01,0xd7,0x01,0x23,0x04,0xd7,0x01,0x23,0x06,0xd7,0x00,0x00,0x00,0x03, 98 | 0xd7,0x23,0x23,0x00,0x03,0xd7,0x00,0x03,0x23,0x23,0xd7,0x00,0x04,0x23,0x00,0x03, 99 | 0xd7,0x23,0x23,0x00,0x03,0xd7,0x01,0x23,0x01,0x23,0x05,0xd7,0x00,0x00,0x01,0xd7, 100 | 0x01,0x23,0x04,0xd7,0x00,0x03,0x23,0xd7,0xd7,0x00,0x04,0x23,0x00,0x03,0xd7,0xd7, 101 | 0x23,0x00,0x03,0xd7,0x01,0x23,0x01,0x23,0x05,0xd7,0x00,0x00,0x01,0xd7,0x01,0x23, 102 | 0x04,0xd7,0x01,0x23,0x03,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x01,0x23,0x03,0xd7, 103 | 0x01,0x23,0x01,0x23,0x05,0xd7,0x00,0x00,0x00,0x03,0xd7,0x23,0x23,0x00,0x03,0xd7, 104 | 0x01,0x23,0x01,0x23,0x06,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x01,0x23,0x01,0x23, 105 | 0x05,0xd7,0x00,0x00,0x00,0x03,0xd7,0x23,0x23,0x00,0x04,0xd7,0x01,0x23,0x05,0xd7, 106 | 0x01,0x23,0x01,0x23,0x04,0xd7,0x01,0x23,0x06,0xd7,0x00,0x00,0x00,0x03,0xd7,0xd7, 107 | 0x23,0x00,0x04,0xd7,0x03,0x23,0x00,0x04,0xd7,0xd7,0x23,0x23,0x04,0xd7,0x01,0x23, 108 | 0x01,0x23,0x06,0xd7,0x00,0x00,0x00,0x04,0xd7,0xd7,0x23,0x23,0x05,0xd7,0x04,0x23, 109 | 0x05,0xd7,0x01,0x23,0x07,0xd7,0x00,0x00,0x03,0xd7,0x01,0x23,0x01,0x23,0x0c,0xd7, 110 | 0x01,0x23,0x01,0x23,0x07,0xd7,0x00,0x00,0x04,0xd7,0x01,0x23,0x01,0x23,0x0a,0xd7, 111 | 0x01,0x23,0x01,0x23,0x08,0xd7,0x00,0x00,0x05,0xd7,0x01,0x23,0x01,0x23,0x08,0xd7, 112 | 0x01,0x23,0x01,0x23,0x09,0xd7,0x00,0x00,0x06,0xd7,0x0a,0x23,0x0a,0xd7,0x00,0x00, 113 | 0x09,0xd7,0x04,0x23,0x0d,0xd7,0x00,0x00,0x1a,0xd7,0x00,0x01}; 114 | -------------------------------------------------------------------------------- /cyd_weather/humidity_4bpp.h: -------------------------------------------------------------------------------- 1 | // Created with image_to_c 2 | // https://github.com/bitbank2/image_to_c 3 | // 4 | // humidity_4bpp 5 | // Data size = 1622 bytes 6 | // 7 | // OS/2 BMP, Compression=RLE, Size: 32 x 41, 8-Bpp 8 | // 9 | // for non-Arduino builds... 10 | #ifndef PROGMEM 11 | #define PROGMEM 12 | #endif 13 | const uint8_t humidity_4bpp[] PROGMEM = { 14 | 0x42,0x4d,0x56,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xea,0x03,0x00,0x00,0x7c,0x00, 15 | 0x00,0x00,0x20,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x08,0x00,0x01,0x00, 16 | 0x00,0x00,0x6c,0x02,0x00,0x00,0x13,0x0b,0x00,0x00,0x13,0x0b,0x00,0x00,0xd8,0x00, 17 | 0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00, 18 | 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x47,0x52,0x73,0x00,0x00,0x00,0x00,0x00,0x00, 19 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 20 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 21 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 22 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0xcc,0xff, 23 | 0xff,0x00,0x99,0xff,0xff,0x00,0x66,0xff,0xff,0x00,0x33,0xff,0xff,0x00,0x00,0xff, 24 | 0xff,0x00,0xff,0xcc,0xff,0x00,0xcc,0xcc,0xff,0x00,0x99,0xcc,0xff,0x00,0x66,0xcc, 25 | 0xff,0x00,0x33,0xcc,0xff,0x00,0x00,0xcc,0xff,0x00,0xff,0x99,0xff,0x00,0xcc,0x99, 26 | 0xff,0x00,0x99,0x99,0xff,0x00,0x66,0x99,0xff,0x00,0x33,0x99,0xff,0x00,0x00,0x99, 27 | 0xff,0x00,0xff,0x66,0xff,0x00,0xcc,0x66,0xff,0x00,0x99,0x66,0xff,0x00,0x66,0x66, 28 | 0xff,0x00,0x33,0x66,0xff,0x00,0x00,0x66,0xff,0x00,0xff,0x33,0xff,0x00,0xcc,0x33, 29 | 0xff,0x00,0x99,0x33,0xff,0x00,0x66,0x33,0xff,0x00,0x33,0x33,0xff,0x00,0x00,0x33, 30 | 0xff,0x00,0xff,0x00,0xff,0x00,0xcc,0x00,0xff,0x00,0x99,0x00,0xff,0x00,0x66,0x00, 31 | 0xff,0x00,0x33,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0xff,0xff,0xcc,0x00,0xcc,0xff, 32 | 0xcc,0x00,0x99,0xff,0xcc,0x00,0x66,0xff,0xcc,0x00,0x33,0xff,0xcc,0x00,0x00,0xff, 33 | 0xcc,0x00,0xff,0xcc,0xcc,0x00,0xcc,0xcc,0xcc,0x00,0x99,0xcc,0xcc,0x00,0x66,0xcc, 34 | 0xcc,0x00,0x33,0xcc,0xcc,0x00,0x00,0xcc,0xcc,0x00,0xff,0x99,0xcc,0x00,0xcc,0x99, 35 | 0xcc,0x00,0x99,0x99,0xcc,0x00,0x66,0x99,0xcc,0x00,0x33,0x99,0xcc,0x00,0x00,0x99, 36 | 0xcc,0x00,0xff,0x66,0xcc,0x00,0xcc,0x66,0xcc,0x00,0x99,0x66,0xcc,0x00,0x66,0x66, 37 | 0xcc,0x00,0x33,0x66,0xcc,0x00,0x00,0x66,0xcc,0x00,0xff,0x33,0xcc,0x00,0xcc,0x33, 38 | 0xcc,0x00,0x99,0x33,0xcc,0x00,0x66,0x33,0xcc,0x00,0x33,0x33,0xcc,0x00,0x00,0x33, 39 | 0xcc,0x00,0xff,0x00,0xcc,0x00,0xcc,0x00,0xcc,0x00,0x99,0x00,0xcc,0x00,0x66,0x00, 40 | 0xcc,0x00,0x33,0x00,0xcc,0x00,0x00,0x00,0xcc,0x00,0xff,0xff,0x99,0x00,0xcc,0xff, 41 | 0x99,0x00,0x99,0xff,0x99,0x00,0x66,0xff,0x99,0x00,0x33,0xff,0x99,0x00,0x00,0xff, 42 | 0x99,0x00,0xff,0xcc,0x99,0x00,0xcc,0xcc,0x99,0x00,0x99,0xcc,0x99,0x00,0x66,0xcc, 43 | 0x99,0x00,0x33,0xcc,0x99,0x00,0x00,0xcc,0x99,0x00,0xff,0x99,0x99,0x00,0xcc,0x99, 44 | 0x99,0x00,0x99,0x99,0x99,0x00,0x66,0x99,0x99,0x00,0x33,0x99,0x99,0x00,0x00,0x99, 45 | 0x99,0x00,0xff,0x66,0x99,0x00,0xcc,0x66,0x99,0x00,0x99,0x66,0x99,0x00,0x66,0x66, 46 | 0x99,0x00,0x33,0x66,0x99,0x00,0x00,0x66,0x99,0x00,0xff,0x33,0x99,0x00,0xcc,0x33, 47 | 0x99,0x00,0x99,0x33,0x99,0x00,0x66,0x33,0x99,0x00,0x33,0x33,0x99,0x00,0x00,0x33, 48 | 0x99,0x00,0xff,0x00,0x99,0x00,0xcc,0x00,0x99,0x00,0x99,0x00,0x99,0x00,0x66,0x00, 49 | 0x99,0x00,0x33,0x00,0x99,0x00,0x00,0x00,0x99,0x00,0xff,0xff,0x66,0x00,0xcc,0xff, 50 | 0x66,0x00,0x99,0xff,0x66,0x00,0x66,0xff,0x66,0x00,0x33,0xff,0x66,0x00,0x00,0xff, 51 | 0x66,0x00,0xff,0xcc,0x66,0x00,0xcc,0xcc,0x66,0x00,0x99,0xcc,0x66,0x00,0x66,0xcc, 52 | 0x66,0x00,0x33,0xcc,0x66,0x00,0x00,0xcc,0x66,0x00,0xff,0x99,0x66,0x00,0xcc,0x99, 53 | 0x66,0x00,0x99,0x99,0x66,0x00,0x66,0x99,0x66,0x00,0x33,0x99,0x66,0x00,0x00,0x99, 54 | 0x66,0x00,0xff,0x66,0x66,0x00,0xcc,0x66,0x66,0x00,0x99,0x66,0x66,0x00,0x66,0x66, 55 | 0x66,0x00,0x33,0x66,0x66,0x00,0x00,0x66,0x66,0x00,0xff,0x33,0x66,0x00,0xcc,0x33, 56 | 0x66,0x00,0x99,0x33,0x66,0x00,0x66,0x33,0x66,0x00,0x33,0x33,0x66,0x00,0x00,0x33, 57 | 0x66,0x00,0xff,0x00,0x66,0x00,0xcc,0x00,0x66,0x00,0x99,0x00,0x66,0x00,0x66,0x00, 58 | 0x66,0x00,0x33,0x00,0x66,0x00,0x00,0x00,0x66,0x00,0xff,0xff,0x33,0x00,0xcc,0xff, 59 | 0x33,0x00,0x99,0xff,0x33,0x00,0x66,0xff,0x33,0x00,0x33,0xff,0x33,0x00,0x00,0xff, 60 | 0x33,0x00,0xff,0xcc,0x33,0x00,0xcc,0xcc,0x33,0x00,0x99,0xcc,0x33,0x00,0x66,0xcc, 61 | 0x33,0x00,0x33,0xcc,0x33,0x00,0x00,0xcc,0x33,0x00,0xff,0x99,0x33,0x00,0xcc,0x99, 62 | 0x33,0x00,0x99,0x99,0x33,0x00,0x66,0x99,0x33,0x00,0x33,0x99,0x33,0x00,0x00,0x99, 63 | 0x33,0x00,0xff,0x66,0x33,0x00,0xcc,0x66,0x33,0x00,0x99,0x66,0x33,0x00,0x66,0x66, 64 | 0x33,0x00,0x33,0x66,0x33,0x00,0x00,0x66,0x33,0x00,0xff,0x33,0x33,0x00,0xcc,0x33, 65 | 0x33,0x00,0x99,0x33,0x33,0x00,0x66,0x33,0x33,0x00,0x33,0x33,0x33,0x00,0x00,0x33, 66 | 0x33,0x00,0xff,0x00,0x33,0x00,0xcc,0x00,0x33,0x00,0x99,0x00,0x33,0x00,0x66,0x00, 67 | 0x33,0x00,0x33,0x00,0x33,0x00,0x00,0x00,0x33,0x00,0xff,0xff,0x00,0x00,0xcc,0xff, 68 | 0x00,0x00,0x99,0xff,0x00,0x00,0x66,0xff,0x00,0x00,0x33,0xff,0x00,0x00,0x00,0xff, 69 | 0x00,0x00,0xff,0xcc,0x00,0x00,0xcc,0xcc,0x00,0x00,0x99,0xcc,0x00,0x00,0x66,0xcc, 70 | 0x00,0x00,0x33,0xcc,0x00,0x00,0x00,0xcc,0x00,0x00,0xff,0x99,0x00,0x00,0xcc,0x99, 71 | 0x00,0x00,0x99,0x99,0x00,0x00,0x66,0x99,0x00,0x00,0x33,0x99,0x00,0x00,0x00,0x99, 72 | 0x00,0x00,0xff,0x66,0x00,0x00,0xcc,0x66,0x00,0x00,0x99,0x66,0x00,0x00,0x66,0x66, 73 | 0x00,0x00,0x33,0x66,0x00,0x00,0x00,0x66,0x00,0x00,0xff,0x33,0x00,0x00,0xcc,0x33, 74 | 0x00,0x00,0x99,0x33,0x00,0x00,0x66,0x33,0x00,0x00,0x33,0x33,0x00,0x00,0x00,0x33, 75 | 0x00,0x00,0xff,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x66,0x00, 76 | 0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xd7,0x00,0x00,0x20,0xd7, 77 | 0x00,0x00,0x0b,0xd7,0x0a,0x23,0x0b,0xd7,0x00,0x00,0x09,0xd7,0x0e,0x23,0x09,0xd7, 78 | 0x00,0x00,0x07,0xd7,0x12,0x23,0x07,0xd7,0x00,0x00,0x06,0xd7,0x14,0x23,0x06,0xd7, 79 | 0x00,0x00,0x05,0xd7,0x05,0x23,0x03,0xd7,0x0e,0x23,0x05,0xd7,0x00,0x00,0x04,0xd7, 80 | 0x06,0x23,0x03,0xd7,0x08,0x23,0x04,0xd7,0x03,0x23,0x04,0xd7,0x00,0x00,0x04,0xd7, 81 | 0x07,0x23,0x03,0xd7,0x06,0x23,0x06,0xd7,0x01,0x23,0x01,0x23,0x04,0xd7,0x00,0x00, 82 | 0x03,0xd7,0x08,0x23,0x03,0xd7,0x05,0x23,0x08,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7, 83 | 0x00,0x00,0x03,0xd7,0x08,0x23,0x04,0xd7,0x04,0x23,0x03,0xd7,0x01,0x23,0x01,0x23, 84 | 0x03,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x0a,0x23, 85 | 0x03,0xd7,0x04,0x23,0x03,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x03,0x23,0x01,0xd7, 86 | 0x01,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x0a,0x23,0x04,0xd7,0x03,0x23,0x03,0xd7, 87 | 0x01,0x23,0x01,0x23,0x03,0xd7,0x03,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00,0x01,0xd7, 88 | 0x01,0xd7,0x0b,0x23,0x03,0xd7,0x03,0x23,0x03,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7, 89 | 0x03,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x0b,0x23,0x04,0xd7, 90 | 0x01,0x23,0x01,0x23,0x03,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x03,0x23,0x01,0xd7, 91 | 0x01,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x0c,0x23,0x03,0xd7,0x01,0x23,0x01,0x23, 92 | 0x08,0xd7,0x03,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x0c,0x23, 93 | 0x04,0xd7,0x01,0x23,0x01,0x23,0x06,0xd7,0x04,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00, 94 | 0x01,0xd7,0x01,0xd7,0x06,0x23,0x04,0xd7,0x03,0x23,0x03,0xd7,0x03,0x23,0x04,0xd7, 95 | 0x05,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x05,0x23,0x06,0xd7, 96 | 0x01,0x23,0x01,0x23,0x03,0xd7,0x0c,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00,0x01,0xd7, 97 | 0x01,0xd7,0x04,0x23,0x08,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x0b,0x23,0x01,0xd7, 98 | 0x01,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x04,0x23,0x03,0xd7,0x01,0x23,0x01,0x23, 99 | 0x03,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x0b,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00, 100 | 0x03,0xd7,0x03,0x23,0x03,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x01,0x23,0x01,0x23, 101 | 0x04,0xd7,0x09,0x23,0x03,0xd7,0x00,0x00,0x03,0xd7,0x03,0x23,0x03,0xd7,0x01,0x23, 102 | 0x01,0x23,0x03,0xd7,0x03,0x23,0x03,0xd7,0x09,0x23,0x03,0xd7,0x00,0x00,0x03,0xd7, 103 | 0x03,0x23,0x03,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x03,0x23,0x04,0xd7,0x08,0x23, 104 | 0x03,0xd7,0x00,0x00,0x04,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x01,0x23,0x01,0x23, 105 | 0x03,0xd7,0x04,0x23,0x03,0xd7,0x07,0x23,0x04,0xd7,0x00,0x00,0x04,0xd7,0x01,0x23, 106 | 0x01,0x23,0x08,0xd7,0x04,0x23,0x04,0xd7,0x06,0x23,0x04,0xd7,0x00,0x00,0x05,0xd7, 107 | 0x01,0x23,0x01,0x23,0x06,0xd7,0x06,0x23,0x03,0xd7,0x05,0x23,0x05,0xd7,0x00,0x00, 108 | 0x05,0xd7,0x03,0x23,0x04,0xd7,0x07,0x23,0x04,0xd7,0x03,0x23,0x06,0xd7,0x00,0x00, 109 | 0x06,0xd7,0x0e,0x23,0x03,0xd7,0x03,0x23,0x06,0xd7,0x00,0x00,0x07,0xd7,0x12,0x23, 110 | 0x07,0xd7,0x00,0x00,0x08,0xd7,0x10,0x23,0x08,0xd7,0x00,0x00,0x08,0xd7,0x10,0x23, 111 | 0x08,0xd7,0x00,0x00,0x09,0xd7,0x0e,0x23,0x09,0xd7,0x00,0x00,0x0a,0xd7,0x0c,0x23, 112 | 0x0a,0xd7,0x00,0x00,0x0b,0xd7,0x0a,0x23,0x0b,0xd7,0x00,0x00,0x0c,0xd7,0x08,0x23, 113 | 0x0c,0xd7,0x00,0x00,0x0d,0xd7,0x06,0x23,0x0d,0xd7,0x00,0x00,0x0e,0xd7,0x04,0x23, 114 | 0x0e,0xd7,0x00,0x00,0x0f,0xd7,0x01,0x23,0x01,0x23,0x0f,0xd7,0x00,0x00,0x20,0xd7, 115 | 0x00,0x00,0x20,0xd7,0x00,0x01}; 116 | -------------------------------------------------------------------------------- /cyd_weather/rain_4bpp.h: -------------------------------------------------------------------------------- 1 | // Created with image_to_c 2 | // https://github.com/bitbank2/image_to_c 3 | // 4 | // rain_4bpp 5 | // Data size = 1490 bytes 6 | // 7 | // OS/2 BMP, Compression=RLE, Size: 40 x 41, 8-Bpp 8 | // 9 | // for non-Arduino builds... 10 | #ifndef PROGMEM 11 | #define PROGMEM 12 | #endif 13 | const uint8_t rain_4bpp[] PROGMEM = { 14 | 0x42,0x4d,0xd2,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0xea,0x03,0x00,0x00,0x7c,0x00, 15 | 0x00,0x00,0x28,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x08,0x00,0x01,0x00, 16 | 0x00,0x00,0xe8,0x01,0x00,0x00,0x13,0x0b,0x00,0x00,0x13,0x0b,0x00,0x00,0xd8,0x00, 17 | 0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00, 18 | 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x47,0x52,0x73,0x00,0x00,0x00,0x00,0x00,0x00, 19 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 20 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 21 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 22 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0xcc,0xff, 23 | 0xff,0x00,0x99,0xff,0xff,0x00,0x66,0xff,0xff,0x00,0x33,0xff,0xff,0x00,0x00,0xff, 24 | 0xff,0x00,0xff,0xcc,0xff,0x00,0xcc,0xcc,0xff,0x00,0x99,0xcc,0xff,0x00,0x66,0xcc, 25 | 0xff,0x00,0x33,0xcc,0xff,0x00,0x00,0xcc,0xff,0x00,0xff,0x99,0xff,0x00,0xcc,0x99, 26 | 0xff,0x00,0x99,0x99,0xff,0x00,0x66,0x99,0xff,0x00,0x33,0x99,0xff,0x00,0x00,0x99, 27 | 0xff,0x00,0xff,0x66,0xff,0x00,0xcc,0x66,0xff,0x00,0x99,0x66,0xff,0x00,0x66,0x66, 28 | 0xff,0x00,0x33,0x66,0xff,0x00,0x00,0x66,0xff,0x00,0xff,0x33,0xff,0x00,0xcc,0x33, 29 | 0xff,0x00,0x99,0x33,0xff,0x00,0x66,0x33,0xff,0x00,0x33,0x33,0xff,0x00,0x00,0x33, 30 | 0xff,0x00,0xff,0x00,0xff,0x00,0xcc,0x00,0xff,0x00,0x99,0x00,0xff,0x00,0x66,0x00, 31 | 0xff,0x00,0x33,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0xff,0xff,0xcc,0x00,0xcc,0xff, 32 | 0xcc,0x00,0x99,0xff,0xcc,0x00,0x66,0xff,0xcc,0x00,0x33,0xff,0xcc,0x00,0x00,0xff, 33 | 0xcc,0x00,0xff,0xcc,0xcc,0x00,0xcc,0xcc,0xcc,0x00,0x99,0xcc,0xcc,0x00,0x66,0xcc, 34 | 0xcc,0x00,0x33,0xcc,0xcc,0x00,0x00,0xcc,0xcc,0x00,0xff,0x99,0xcc,0x00,0xcc,0x99, 35 | 0xcc,0x00,0x99,0x99,0xcc,0x00,0x66,0x99,0xcc,0x00,0x33,0x99,0xcc,0x00,0x00,0x99, 36 | 0xcc,0x00,0xff,0x66,0xcc,0x00,0xcc,0x66,0xcc,0x00,0x99,0x66,0xcc,0x00,0x66,0x66, 37 | 0xcc,0x00,0x33,0x66,0xcc,0x00,0x00,0x66,0xcc,0x00,0xff,0x33,0xcc,0x00,0xcc,0x33, 38 | 0xcc,0x00,0x99,0x33,0xcc,0x00,0x66,0x33,0xcc,0x00,0x33,0x33,0xcc,0x00,0x00,0x33, 39 | 0xcc,0x00,0xff,0x00,0xcc,0x00,0xcc,0x00,0xcc,0x00,0x99,0x00,0xcc,0x00,0x66,0x00, 40 | 0xcc,0x00,0x33,0x00,0xcc,0x00,0x00,0x00,0xcc,0x00,0xff,0xff,0x99,0x00,0xcc,0xff, 41 | 0x99,0x00,0x99,0xff,0x99,0x00,0x66,0xff,0x99,0x00,0x33,0xff,0x99,0x00,0x00,0xff, 42 | 0x99,0x00,0xff,0xcc,0x99,0x00,0xcc,0xcc,0x99,0x00,0x99,0xcc,0x99,0x00,0x66,0xcc, 43 | 0x99,0x00,0x33,0xcc,0x99,0x00,0x00,0xcc,0x99,0x00,0xff,0x99,0x99,0x00,0xcc,0x99, 44 | 0x99,0x00,0x99,0x99,0x99,0x00,0x66,0x99,0x99,0x00,0x33,0x99,0x99,0x00,0x00,0x99, 45 | 0x99,0x00,0xff,0x66,0x99,0x00,0xcc,0x66,0x99,0x00,0x99,0x66,0x99,0x00,0x66,0x66, 46 | 0x99,0x00,0x33,0x66,0x99,0x00,0x00,0x66,0x99,0x00,0xff,0x33,0x99,0x00,0xcc,0x33, 47 | 0x99,0x00,0x99,0x33,0x99,0x00,0x66,0x33,0x99,0x00,0x33,0x33,0x99,0x00,0x00,0x33, 48 | 0x99,0x00,0xff,0x00,0x99,0x00,0xcc,0x00,0x99,0x00,0x99,0x00,0x99,0x00,0x66,0x00, 49 | 0x99,0x00,0x33,0x00,0x99,0x00,0x00,0x00,0x99,0x00,0xff,0xff,0x66,0x00,0xcc,0xff, 50 | 0x66,0x00,0x99,0xff,0x66,0x00,0x66,0xff,0x66,0x00,0x33,0xff,0x66,0x00,0x00,0xff, 51 | 0x66,0x00,0xff,0xcc,0x66,0x00,0xcc,0xcc,0x66,0x00,0x99,0xcc,0x66,0x00,0x66,0xcc, 52 | 0x66,0x00,0x33,0xcc,0x66,0x00,0x00,0xcc,0x66,0x00,0xff,0x99,0x66,0x00,0xcc,0x99, 53 | 0x66,0x00,0x99,0x99,0x66,0x00,0x66,0x99,0x66,0x00,0x33,0x99,0x66,0x00,0x00,0x99, 54 | 0x66,0x00,0xff,0x66,0x66,0x00,0xcc,0x66,0x66,0x00,0x99,0x66,0x66,0x00,0x66,0x66, 55 | 0x66,0x00,0x33,0x66,0x66,0x00,0x00,0x66,0x66,0x00,0xff,0x33,0x66,0x00,0xcc,0x33, 56 | 0x66,0x00,0x99,0x33,0x66,0x00,0x66,0x33,0x66,0x00,0x33,0x33,0x66,0x00,0x00,0x33, 57 | 0x66,0x00,0xff,0x00,0x66,0x00,0xcc,0x00,0x66,0x00,0x99,0x00,0x66,0x00,0x66,0x00, 58 | 0x66,0x00,0x33,0x00,0x66,0x00,0x00,0x00,0x66,0x00,0xff,0xff,0x33,0x00,0xcc,0xff, 59 | 0x33,0x00,0x99,0xff,0x33,0x00,0x66,0xff,0x33,0x00,0x33,0xff,0x33,0x00,0x00,0xff, 60 | 0x33,0x00,0xff,0xcc,0x33,0x00,0xcc,0xcc,0x33,0x00,0x99,0xcc,0x33,0x00,0x66,0xcc, 61 | 0x33,0x00,0x33,0xcc,0x33,0x00,0x00,0xcc,0x33,0x00,0xff,0x99,0x33,0x00,0xcc,0x99, 62 | 0x33,0x00,0x99,0x99,0x33,0x00,0x66,0x99,0x33,0x00,0x33,0x99,0x33,0x00,0x00,0x99, 63 | 0x33,0x00,0xff,0x66,0x33,0x00,0xcc,0x66,0x33,0x00,0x99,0x66,0x33,0x00,0x66,0x66, 64 | 0x33,0x00,0x33,0x66,0x33,0x00,0x00,0x66,0x33,0x00,0xff,0x33,0x33,0x00,0xcc,0x33, 65 | 0x33,0x00,0x99,0x33,0x33,0x00,0x66,0x33,0x33,0x00,0x33,0x33,0x33,0x00,0x00,0x33, 66 | 0x33,0x00,0xff,0x00,0x33,0x00,0xcc,0x00,0x33,0x00,0x99,0x00,0x33,0x00,0x66,0x00, 67 | 0x33,0x00,0x33,0x00,0x33,0x00,0x00,0x00,0x33,0x00,0xff,0xff,0x00,0x00,0xcc,0xff, 68 | 0x00,0x00,0x99,0xff,0x00,0x00,0x66,0xff,0x00,0x00,0x33,0xff,0x00,0x00,0x00,0xff, 69 | 0x00,0x00,0xff,0xcc,0x00,0x00,0xcc,0xcc,0x00,0x00,0x99,0xcc,0x00,0x00,0x66,0xcc, 70 | 0x00,0x00,0x33,0xcc,0x00,0x00,0x00,0xcc,0x00,0x00,0xff,0x99,0x00,0x00,0xcc,0x99, 71 | 0x00,0x00,0x99,0x99,0x00,0x00,0x66,0x99,0x00,0x00,0x33,0x99,0x00,0x00,0x00,0x99, 72 | 0x00,0x00,0xff,0x66,0x00,0x00,0xcc,0x66,0x00,0x00,0x99,0x66,0x00,0x00,0x66,0x66, 73 | 0x00,0x00,0x33,0x66,0x00,0x00,0x00,0x66,0x00,0x00,0xff,0x33,0x00,0x00,0xcc,0x33, 74 | 0x00,0x00,0x99,0x33,0x00,0x00,0x66,0x33,0x00,0x00,0x33,0x33,0x00,0x00,0x00,0x33, 75 | 0x00,0x00,0xff,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x66,0x00, 76 | 0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0xd7,0x00,0x00,0x0e,0xd7, 77 | 0x03,0x23,0x07,0xd7,0x03,0x23,0x0d,0xd7,0x00,0x00,0x0d,0xd7,0x05,0x23,0x05,0xd7, 78 | 0x05,0x23,0x0c,0xd7,0x00,0x00,0x0d,0xd7,0x05,0x23,0x05,0xd7,0x05,0x23,0x0c,0xd7, 79 | 0x00,0x00,0x0d,0xd7,0x05,0x23,0x05,0xd7,0x05,0x23,0x0c,0xd7,0x00,0x00,0x0e,0xd7, 80 | 0x03,0x23,0x07,0xd7,0x03,0x23,0x0d,0xd7,0x00,0x00,0x0e,0xd7,0x03,0x23,0x07,0xd7, 81 | 0x03,0x23,0x0d,0xd7,0x00,0x00,0x0f,0xd7,0x01,0x23,0x09,0xd7,0x01,0x23,0x0e,0xd7, 82 | 0x00,0x00,0x28,0xd7,0x00,0x00,0x09,0xd7,0x03,0x23,0x07,0xd7,0x03,0x23,0x07,0xd7, 83 | 0x03,0x23,0x08,0xd7,0x00,0x00,0x08,0xd7,0x05,0x23,0x05,0xd7,0x05,0x23,0x05,0xd7, 84 | 0x05,0x23,0x07,0xd7,0x00,0x00,0x08,0xd7,0x05,0x23,0x05,0xd7,0x05,0x23,0x05,0xd7, 85 | 0x05,0x23,0x07,0xd7,0x00,0x00,0x08,0xd7,0x05,0x23,0x05,0xd7,0x05,0x23,0x05,0xd7, 86 | 0x05,0x23,0x07,0xd7,0x00,0x00,0x09,0xd7,0x03,0x23,0x07,0xd7,0x03,0x23,0x07,0xd7, 87 | 0x03,0x23,0x08,0xd7,0x00,0x00,0x09,0xd7,0x03,0x23,0x07,0xd7,0x03,0x23,0x07,0xd7, 88 | 0x03,0x23,0x08,0xd7,0x00,0x00,0x0a,0xd7,0x01,0x23,0x09,0xd7,0x01,0x23,0x09,0xd7, 89 | 0x01,0x23,0x09,0xd7,0x00,0x00,0x28,0xd7,0x00,0x00,0x28,0xd7,0x00,0x00,0x04,0xd7, 90 | 0x1f,0x23,0x05,0xd7,0x00,0x00,0x03,0xd7,0x21,0x23,0x04,0xd7,0x00,0x00,0x01,0xd7, 91 | 0x01,0xd7,0x23,0x23,0x03,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x24,0x23,0x01,0xd7, 92 | 0x01,0xd7,0x00,0x00,0x01,0xd7,0x04,0x23,0x1d,0xd7,0x05,0x23,0x01,0xd7,0x00,0x00, 93 | 0x01,0xd7,0x04,0x23,0x1e,0xd7,0x04,0x23,0x01,0xd7,0x00,0x00,0x01,0xd7,0x04,0x23, 94 | 0x1e,0xd7,0x04,0x23,0x01,0xd7,0x00,0x00,0x01,0xd7,0x05,0x23,0x1e,0xd7,0x03,0x23, 95 | 0x01,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x07,0x23,0x0e,0xd7,0x03,0x23,0x0a,0xd7, 96 | 0x03,0x23,0x01,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x07,0x23,0x0e,0xd7,0x03,0x23, 97 | 0x0a,0xd7,0x03,0x23,0x01,0xd7,0x00,0x00,0x04,0xd7,0x06,0x23,0x0d,0xd7,0x04,0x23, 98 | 0x08,0xd7,0x04,0x23,0x01,0xd7,0x00,0x00,0x06,0xd7,0x04,0x23,0x01,0xd7,0x01,0xd7, 99 | 0x03,0x23,0x08,0xd7,0x05,0x23,0x06,0xd7,0x05,0x23,0x01,0xd7,0x00,0x00,0x06,0xd7, 100 | 0x09,0x23,0x09,0xd7,0x05,0x23,0x04,0xd7,0x05,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00, 101 | 0x07,0xd7,0x08,0x23,0x09,0xd7,0x0e,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00,0x08,0xd7, 102 | 0x08,0x23,0x09,0xd7,0x0c,0x23,0x03,0xd7,0x00,0x00,0x0c,0xd7,0x04,0x23,0x0a,0xd7, 103 | 0x09,0x23,0x05,0xd7,0x00,0x00,0x0c,0xd7,0x05,0x23,0x08,0xd7,0x08,0x23,0x07,0xd7, 104 | 0x00,0x00,0x0d,0xd7,0x05,0x23,0x06,0xd7,0x05,0x23,0x0b,0xd7,0x00,0x00,0x0e,0xd7, 105 | 0x0f,0x23,0x0b,0xd7,0x00,0x00,0x0f,0xd7,0x0d,0x23,0x0c,0xd7,0x00,0x00,0x10,0xd7, 106 | 0x0a,0x23,0x0e,0xd7,0x00,0x00,0x12,0xd7,0x06,0x23,0x10,0xd7,0x00,0x00,0x28,0xd7, 107 | 0x00,0x01}; 108 | -------------------------------------------------------------------------------- /cyd_weather/sunrise_4bpp.h: -------------------------------------------------------------------------------- 1 | // Created with image_to_c 2 | // https://github.com/bitbank2/image_to_c 3 | // 4 | // sunrise_4bpp 5 | // Data size = 1442 bytes 6 | // 7 | // OS/2 BMP, Compression=RLE, Size: 48 x 35, 8-Bpp 8 | // 9 | // for non-Arduino builds... 10 | #ifndef PROGMEM 11 | #define PROGMEM 12 | #endif 13 | const uint8_t sunrise_4bpp[] PROGMEM = { 14 | 0x42,0x4d,0xa2,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0xea,0x03,0x00,0x00,0x7c,0x00, 15 | 0x00,0x00,0x30,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x01,0x00,0x08,0x00,0x01,0x00, 16 | 0x00,0x00,0xb8,0x01,0x00,0x00,0x13,0x0b,0x00,0x00,0x13,0x0b,0x00,0x00,0xd8,0x00, 17 | 0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00, 18 | 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x47,0x52,0x73,0x00,0x00,0x00,0x00,0x00,0x00, 19 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 20 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 21 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 22 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0xcc,0xff, 23 | 0xff,0x00,0x99,0xff,0xff,0x00,0x66,0xff,0xff,0x00,0x33,0xff,0xff,0x00,0x00,0xff, 24 | 0xff,0x00,0xff,0xcc,0xff,0x00,0xcc,0xcc,0xff,0x00,0x99,0xcc,0xff,0x00,0x66,0xcc, 25 | 0xff,0x00,0x33,0xcc,0xff,0x00,0x00,0xcc,0xff,0x00,0xff,0x99,0xff,0x00,0xcc,0x99, 26 | 0xff,0x00,0x99,0x99,0xff,0x00,0x66,0x99,0xff,0x00,0x33,0x99,0xff,0x00,0x00,0x99, 27 | 0xff,0x00,0xff,0x66,0xff,0x00,0xcc,0x66,0xff,0x00,0x99,0x66,0xff,0x00,0x66,0x66, 28 | 0xff,0x00,0x33,0x66,0xff,0x00,0x00,0x66,0xff,0x00,0xff,0x33,0xff,0x00,0xcc,0x33, 29 | 0xff,0x00,0x99,0x33,0xff,0x00,0x66,0x33,0xff,0x00,0x33,0x33,0xff,0x00,0x00,0x33, 30 | 0xff,0x00,0xff,0x00,0xff,0x00,0xcc,0x00,0xff,0x00,0x99,0x00,0xff,0x00,0x66,0x00, 31 | 0xff,0x00,0x33,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0xff,0xff,0xcc,0x00,0xcc,0xff, 32 | 0xcc,0x00,0x99,0xff,0xcc,0x00,0x66,0xff,0xcc,0x00,0x33,0xff,0xcc,0x00,0x00,0xff, 33 | 0xcc,0x00,0xff,0xcc,0xcc,0x00,0xcc,0xcc,0xcc,0x00,0x99,0xcc,0xcc,0x00,0x66,0xcc, 34 | 0xcc,0x00,0x33,0xcc,0xcc,0x00,0x00,0xcc,0xcc,0x00,0xff,0x99,0xcc,0x00,0xcc,0x99, 35 | 0xcc,0x00,0x99,0x99,0xcc,0x00,0x66,0x99,0xcc,0x00,0x33,0x99,0xcc,0x00,0x00,0x99, 36 | 0xcc,0x00,0xff,0x66,0xcc,0x00,0xcc,0x66,0xcc,0x00,0x99,0x66,0xcc,0x00,0x66,0x66, 37 | 0xcc,0x00,0x33,0x66,0xcc,0x00,0x00,0x66,0xcc,0x00,0xff,0x33,0xcc,0x00,0xcc,0x33, 38 | 0xcc,0x00,0x99,0x33,0xcc,0x00,0x66,0x33,0xcc,0x00,0x33,0x33,0xcc,0x00,0x00,0x33, 39 | 0xcc,0x00,0xff,0x00,0xcc,0x00,0xcc,0x00,0xcc,0x00,0x99,0x00,0xcc,0x00,0x66,0x00, 40 | 0xcc,0x00,0x33,0x00,0xcc,0x00,0x00,0x00,0xcc,0x00,0xff,0xff,0x99,0x00,0xcc,0xff, 41 | 0x99,0x00,0x99,0xff,0x99,0x00,0x66,0xff,0x99,0x00,0x33,0xff,0x99,0x00,0x00,0xff, 42 | 0x99,0x00,0xff,0xcc,0x99,0x00,0xcc,0xcc,0x99,0x00,0x99,0xcc,0x99,0x00,0x66,0xcc, 43 | 0x99,0x00,0x33,0xcc,0x99,0x00,0x00,0xcc,0x99,0x00,0xff,0x99,0x99,0x00,0xcc,0x99, 44 | 0x99,0x00,0x99,0x99,0x99,0x00,0x66,0x99,0x99,0x00,0x33,0x99,0x99,0x00,0x00,0x99, 45 | 0x99,0x00,0xff,0x66,0x99,0x00,0xcc,0x66,0x99,0x00,0x99,0x66,0x99,0x00,0x66,0x66, 46 | 0x99,0x00,0x33,0x66,0x99,0x00,0x00,0x66,0x99,0x00,0xff,0x33,0x99,0x00,0xcc,0x33, 47 | 0x99,0x00,0x99,0x33,0x99,0x00,0x66,0x33,0x99,0x00,0x33,0x33,0x99,0x00,0x00,0x33, 48 | 0x99,0x00,0xff,0x00,0x99,0x00,0xcc,0x00,0x99,0x00,0x99,0x00,0x99,0x00,0x66,0x00, 49 | 0x99,0x00,0x33,0x00,0x99,0x00,0x00,0x00,0x99,0x00,0xff,0xff,0x66,0x00,0xcc,0xff, 50 | 0x66,0x00,0x99,0xff,0x66,0x00,0x66,0xff,0x66,0x00,0x33,0xff,0x66,0x00,0x00,0xff, 51 | 0x66,0x00,0xff,0xcc,0x66,0x00,0xcc,0xcc,0x66,0x00,0x99,0xcc,0x66,0x00,0x66,0xcc, 52 | 0x66,0x00,0x33,0xcc,0x66,0x00,0x00,0xcc,0x66,0x00,0xff,0x99,0x66,0x00,0xcc,0x99, 53 | 0x66,0x00,0x99,0x99,0x66,0x00,0x66,0x99,0x66,0x00,0x33,0x99,0x66,0x00,0x00,0x99, 54 | 0x66,0x00,0xff,0x66,0x66,0x00,0xcc,0x66,0x66,0x00,0x99,0x66,0x66,0x00,0x66,0x66, 55 | 0x66,0x00,0x33,0x66,0x66,0x00,0x00,0x66,0x66,0x00,0xff,0x33,0x66,0x00,0xcc,0x33, 56 | 0x66,0x00,0x99,0x33,0x66,0x00,0x66,0x33,0x66,0x00,0x33,0x33,0x66,0x00,0x00,0x33, 57 | 0x66,0x00,0xff,0x00,0x66,0x00,0xcc,0x00,0x66,0x00,0x99,0x00,0x66,0x00,0x66,0x00, 58 | 0x66,0x00,0x33,0x00,0x66,0x00,0x00,0x00,0x66,0x00,0xff,0xff,0x33,0x00,0xcc,0xff, 59 | 0x33,0x00,0x99,0xff,0x33,0x00,0x66,0xff,0x33,0x00,0x33,0xff,0x33,0x00,0x00,0xff, 60 | 0x33,0x00,0xff,0xcc,0x33,0x00,0xcc,0xcc,0x33,0x00,0x99,0xcc,0x33,0x00,0x66,0xcc, 61 | 0x33,0x00,0x33,0xcc,0x33,0x00,0x00,0xcc,0x33,0x00,0xff,0x99,0x33,0x00,0xcc,0x99, 62 | 0x33,0x00,0x99,0x99,0x33,0x00,0x66,0x99,0x33,0x00,0x33,0x99,0x33,0x00,0x00,0x99, 63 | 0x33,0x00,0xff,0x66,0x33,0x00,0xcc,0x66,0x33,0x00,0x99,0x66,0x33,0x00,0x66,0x66, 64 | 0x33,0x00,0x33,0x66,0x33,0x00,0x00,0x66,0x33,0x00,0xff,0x33,0x33,0x00,0xcc,0x33, 65 | 0x33,0x00,0x99,0x33,0x33,0x00,0x66,0x33,0x33,0x00,0x33,0x33,0x33,0x00,0x00,0x33, 66 | 0x33,0x00,0xff,0x00,0x33,0x00,0xcc,0x00,0x33,0x00,0x99,0x00,0x33,0x00,0x66,0x00, 67 | 0x33,0x00,0x33,0x00,0x33,0x00,0x00,0x00,0x33,0x00,0xff,0xff,0x00,0x00,0xcc,0xff, 68 | 0x00,0x00,0x99,0xff,0x00,0x00,0x66,0xff,0x00,0x00,0x33,0xff,0x00,0x00,0x00,0xff, 69 | 0x00,0x00,0xff,0xcc,0x00,0x00,0xcc,0xcc,0x00,0x00,0x99,0xcc,0x00,0x00,0x66,0xcc, 70 | 0x00,0x00,0x33,0xcc,0x00,0x00,0x00,0xcc,0x00,0x00,0xff,0x99,0x00,0x00,0xcc,0x99, 71 | 0x00,0x00,0x99,0x99,0x00,0x00,0x66,0x99,0x00,0x00,0x33,0x99,0x00,0x00,0x00,0x99, 72 | 0x00,0x00,0xff,0x66,0x00,0x00,0xcc,0x66,0x00,0x00,0x99,0x66,0x00,0x00,0x66,0x66, 73 | 0x00,0x00,0x33,0x66,0x00,0x00,0x00,0x66,0x00,0x00,0xff,0x33,0x00,0x00,0xcc,0x33, 74 | 0x00,0x00,0x99,0x33,0x00,0x00,0x66,0x33,0x00,0x00,0x33,0x33,0x00,0x00,0x00,0x33, 75 | 0x00,0x00,0xff,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x66,0x00, 76 | 0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0xd7,0x00,0x00,0x30,0xd7, 77 | 0x00,0x00,0x30,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x10,0x23,0x0c,0xd7,0x10,0x23, 78 | 0x01,0xd7,0x01,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x11,0x23,0x0a,0xd7,0x11,0x23, 79 | 0x01,0xd7,0x01,0xd7,0x00,0x00,0x11,0xd7,0x03,0x23,0x08,0xd7,0x03,0x23,0x11,0xd7, 80 | 0x00,0x00,0x12,0xd7,0x03,0x23,0x06,0xd7,0x03,0x23,0x12,0xd7,0x00,0x00,0x13,0xd7, 81 | 0x03,0x23,0x04,0xd7,0x03,0x23,0x13,0xd7,0x00,0x00,0x14,0xd7,0x08,0x23,0x14,0xd7, 82 | 0x00,0x00,0x15,0xd7,0x06,0x23,0x15,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x06,0x23, 83 | 0x00,0x04,0xd7,0xd7,0x23,0x23,0x0a,0xd7,0x04,0x23,0x09,0xd7,0x01,0x23,0x01,0x23, 84 | 0x03,0xd7,0x06,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x06,0x23, 85 | 0x00,0x04,0xd7,0xd7,0x23,0x23,0x17,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x06,0x23, 86 | 0x01,0xd7,0x01,0xd7,0x00,0x00,0x0a,0xd7,0x01,0x23,0x01,0x23,0x17,0xd7,0x01,0x23, 87 | 0x01,0x23,0x0b,0xd7,0x00,0x00,0x0a,0xd7,0x01,0x23,0x01,0x23,0x17,0xd7,0x01,0x23, 88 | 0x01,0x23,0x0b,0xd7,0x00,0x00,0x0b,0xd7,0x01,0x23,0x01,0x23,0x15,0xd7,0x01,0x23, 89 | 0x01,0x23,0x0c,0xd7,0x00,0x00,0x0b,0xd7,0x01,0x23,0x01,0x23,0x15,0xd7,0x01,0x23, 90 | 0x01,0x23,0x0c,0xd7,0x00,0x00,0x0c,0xd7,0x01,0x23,0x01,0x23,0x13,0xd7,0x01,0x23, 91 | 0x01,0x23,0x0d,0xd7,0x00,0x00,0x0c,0xd7,0x03,0x23,0x11,0xd7,0x03,0x23,0x0d,0xd7, 92 | 0x00,0x00,0x0d,0xd7,0x03,0x23,0x0f,0xd7,0x03,0x23,0x0e,0xd7,0x00,0x00,0x0e,0xd7, 93 | 0x03,0x23,0x0d,0xd7,0x03,0x23,0x0f,0xd7,0x00,0x00,0x0f,0xd7,0x04,0x23,0x09,0xd7, 94 | 0x04,0x23,0x10,0xd7,0x00,0x00,0x10,0xd7,0x05,0x23,0x05,0xd7,0x05,0x23,0x11,0xd7, 95 | 0x00,0x00,0x0b,0xd7,0x01,0x23,0x01,0x23,0x05,0xd7,0x0b,0x23,0x06,0xd7,0x01,0x23, 96 | 0x01,0x23,0x0b,0xd7,0x00,0x00,0x0a,0xd7,0x03,0x23,0x08,0xd7,0x05,0x23,0x09,0xd7, 97 | 0x03,0x23,0x0a,0xd7,0x00,0x00,0x09,0xd7,0x03,0x23,0x18,0xd7,0x03,0x23,0x09,0xd7, 98 | 0x00,0x00,0x08,0xd7,0x03,0x23,0x1a,0xd7,0x03,0x23,0x08,0xd7,0x00,0x00,0x08,0xd7, 99 | 0x01,0x23,0x01,0x23,0x1c,0xd7,0x01,0x23,0x01,0x23,0x08,0xd7,0x00,0x00,0x17,0xd7, 100 | 0x01,0x23,0x01,0x23,0x17,0xd7,0x00,0x00,0x17,0xd7,0x01,0x23,0x01,0x23,0x17,0xd7, 101 | 0x00,0x00,0x17,0xd7,0x01,0x23,0x01,0x23,0x17,0xd7,0x00,0x00,0x17,0xd7,0x01,0x23, 102 | 0x01,0x23,0x17,0xd7,0x00,0x00,0x17,0xd7,0x01,0x23,0x01,0x23,0x17,0xd7,0x00,0x00, 103 | 0x17,0xd7,0x01,0x23,0x01,0x23,0x17,0xd7,0x00,0x00,0x30,0xd7,0x00,0x00,0x30,0xd7, 104 | 0x00,0x01}; 105 | -------------------------------------------------------------------------------- /cyd_weather/sunset_4bpp.h: -------------------------------------------------------------------------------- 1 | // Created with image_to_c 2 | // https://github.com/bitbank2/image_to_c 3 | // 4 | // sunset_4bpp 5 | // Data size = 1442 bytes 6 | // 7 | // OS/2 BMP, Compression=RLE, Size: 48 x 35, 8-Bpp 8 | // 9 | // for non-Arduino builds... 10 | #ifndef PROGMEM 11 | #define PROGMEM 12 | #endif 13 | const uint8_t sunset_4bpp[] PROGMEM = { 14 | 0x42,0x4d,0xa2,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0xea,0x03,0x00,0x00,0x7c,0x00, 15 | 0x00,0x00,0x30,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x01,0x00,0x08,0x00,0x01,0x00, 16 | 0x00,0x00,0xb8,0x01,0x00,0x00,0x13,0x0b,0x00,0x00,0x13,0x0b,0x00,0x00,0xd8,0x00, 17 | 0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00, 18 | 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x47,0x52,0x73,0x00,0x00,0x00,0x00,0x00,0x00, 19 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 20 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 21 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 22 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0xcc,0xff, 23 | 0xff,0x00,0x99,0xff,0xff,0x00,0x66,0xff,0xff,0x00,0x33,0xff,0xff,0x00,0x00,0xff, 24 | 0xff,0x00,0xff,0xcc,0xff,0x00,0xcc,0xcc,0xff,0x00,0x99,0xcc,0xff,0x00,0x66,0xcc, 25 | 0xff,0x00,0x33,0xcc,0xff,0x00,0x00,0xcc,0xff,0x00,0xff,0x99,0xff,0x00,0xcc,0x99, 26 | 0xff,0x00,0x99,0x99,0xff,0x00,0x66,0x99,0xff,0x00,0x33,0x99,0xff,0x00,0x00,0x99, 27 | 0xff,0x00,0xff,0x66,0xff,0x00,0xcc,0x66,0xff,0x00,0x99,0x66,0xff,0x00,0x66,0x66, 28 | 0xff,0x00,0x33,0x66,0xff,0x00,0x00,0x66,0xff,0x00,0xff,0x33,0xff,0x00,0xcc,0x33, 29 | 0xff,0x00,0x99,0x33,0xff,0x00,0x66,0x33,0xff,0x00,0x33,0x33,0xff,0x00,0x00,0x33, 30 | 0xff,0x00,0xff,0x00,0xff,0x00,0xcc,0x00,0xff,0x00,0x99,0x00,0xff,0x00,0x66,0x00, 31 | 0xff,0x00,0x33,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0xff,0xff,0xcc,0x00,0xcc,0xff, 32 | 0xcc,0x00,0x99,0xff,0xcc,0x00,0x66,0xff,0xcc,0x00,0x33,0xff,0xcc,0x00,0x00,0xff, 33 | 0xcc,0x00,0xff,0xcc,0xcc,0x00,0xcc,0xcc,0xcc,0x00,0x99,0xcc,0xcc,0x00,0x66,0xcc, 34 | 0xcc,0x00,0x33,0xcc,0xcc,0x00,0x00,0xcc,0xcc,0x00,0xff,0x99,0xcc,0x00,0xcc,0x99, 35 | 0xcc,0x00,0x99,0x99,0xcc,0x00,0x66,0x99,0xcc,0x00,0x33,0x99,0xcc,0x00,0x00,0x99, 36 | 0xcc,0x00,0xff,0x66,0xcc,0x00,0xcc,0x66,0xcc,0x00,0x99,0x66,0xcc,0x00,0x66,0x66, 37 | 0xcc,0x00,0x33,0x66,0xcc,0x00,0x00,0x66,0xcc,0x00,0xff,0x33,0xcc,0x00,0xcc,0x33, 38 | 0xcc,0x00,0x99,0x33,0xcc,0x00,0x66,0x33,0xcc,0x00,0x33,0x33,0xcc,0x00,0x00,0x33, 39 | 0xcc,0x00,0xff,0x00,0xcc,0x00,0xcc,0x00,0xcc,0x00,0x99,0x00,0xcc,0x00,0x66,0x00, 40 | 0xcc,0x00,0x33,0x00,0xcc,0x00,0x00,0x00,0xcc,0x00,0xff,0xff,0x99,0x00,0xcc,0xff, 41 | 0x99,0x00,0x99,0xff,0x99,0x00,0x66,0xff,0x99,0x00,0x33,0xff,0x99,0x00,0x00,0xff, 42 | 0x99,0x00,0xff,0xcc,0x99,0x00,0xcc,0xcc,0x99,0x00,0x99,0xcc,0x99,0x00,0x66,0xcc, 43 | 0x99,0x00,0x33,0xcc,0x99,0x00,0x00,0xcc,0x99,0x00,0xff,0x99,0x99,0x00,0xcc,0x99, 44 | 0x99,0x00,0x99,0x99,0x99,0x00,0x66,0x99,0x99,0x00,0x33,0x99,0x99,0x00,0x00,0x99, 45 | 0x99,0x00,0xff,0x66,0x99,0x00,0xcc,0x66,0x99,0x00,0x99,0x66,0x99,0x00,0x66,0x66, 46 | 0x99,0x00,0x33,0x66,0x99,0x00,0x00,0x66,0x99,0x00,0xff,0x33,0x99,0x00,0xcc,0x33, 47 | 0x99,0x00,0x99,0x33,0x99,0x00,0x66,0x33,0x99,0x00,0x33,0x33,0x99,0x00,0x00,0x33, 48 | 0x99,0x00,0xff,0x00,0x99,0x00,0xcc,0x00,0x99,0x00,0x99,0x00,0x99,0x00,0x66,0x00, 49 | 0x99,0x00,0x33,0x00,0x99,0x00,0x00,0x00,0x99,0x00,0xff,0xff,0x66,0x00,0xcc,0xff, 50 | 0x66,0x00,0x99,0xff,0x66,0x00,0x66,0xff,0x66,0x00,0x33,0xff,0x66,0x00,0x00,0xff, 51 | 0x66,0x00,0xff,0xcc,0x66,0x00,0xcc,0xcc,0x66,0x00,0x99,0xcc,0x66,0x00,0x66,0xcc, 52 | 0x66,0x00,0x33,0xcc,0x66,0x00,0x00,0xcc,0x66,0x00,0xff,0x99,0x66,0x00,0xcc,0x99, 53 | 0x66,0x00,0x99,0x99,0x66,0x00,0x66,0x99,0x66,0x00,0x33,0x99,0x66,0x00,0x00,0x99, 54 | 0x66,0x00,0xff,0x66,0x66,0x00,0xcc,0x66,0x66,0x00,0x99,0x66,0x66,0x00,0x66,0x66, 55 | 0x66,0x00,0x33,0x66,0x66,0x00,0x00,0x66,0x66,0x00,0xff,0x33,0x66,0x00,0xcc,0x33, 56 | 0x66,0x00,0x99,0x33,0x66,0x00,0x66,0x33,0x66,0x00,0x33,0x33,0x66,0x00,0x00,0x33, 57 | 0x66,0x00,0xff,0x00,0x66,0x00,0xcc,0x00,0x66,0x00,0x99,0x00,0x66,0x00,0x66,0x00, 58 | 0x66,0x00,0x33,0x00,0x66,0x00,0x00,0x00,0x66,0x00,0xff,0xff,0x33,0x00,0xcc,0xff, 59 | 0x33,0x00,0x99,0xff,0x33,0x00,0x66,0xff,0x33,0x00,0x33,0xff,0x33,0x00,0x00,0xff, 60 | 0x33,0x00,0xff,0xcc,0x33,0x00,0xcc,0xcc,0x33,0x00,0x99,0xcc,0x33,0x00,0x66,0xcc, 61 | 0x33,0x00,0x33,0xcc,0x33,0x00,0x00,0xcc,0x33,0x00,0xff,0x99,0x33,0x00,0xcc,0x99, 62 | 0x33,0x00,0x99,0x99,0x33,0x00,0x66,0x99,0x33,0x00,0x33,0x99,0x33,0x00,0x00,0x99, 63 | 0x33,0x00,0xff,0x66,0x33,0x00,0xcc,0x66,0x33,0x00,0x99,0x66,0x33,0x00,0x66,0x66, 64 | 0x33,0x00,0x33,0x66,0x33,0x00,0x00,0x66,0x33,0x00,0xff,0x33,0x33,0x00,0xcc,0x33, 65 | 0x33,0x00,0x99,0x33,0x33,0x00,0x66,0x33,0x33,0x00,0x33,0x33,0x33,0x00,0x00,0x33, 66 | 0x33,0x00,0xff,0x00,0x33,0x00,0xcc,0x00,0x33,0x00,0x99,0x00,0x33,0x00,0x66,0x00, 67 | 0x33,0x00,0x33,0x00,0x33,0x00,0x00,0x00,0x33,0x00,0xff,0xff,0x00,0x00,0xcc,0xff, 68 | 0x00,0x00,0x99,0xff,0x00,0x00,0x66,0xff,0x00,0x00,0x33,0xff,0x00,0x00,0x00,0xff, 69 | 0x00,0x00,0xff,0xcc,0x00,0x00,0xcc,0xcc,0x00,0x00,0x99,0xcc,0x00,0x00,0x66,0xcc, 70 | 0x00,0x00,0x33,0xcc,0x00,0x00,0x00,0xcc,0x00,0x00,0xff,0x99,0x00,0x00,0xcc,0x99, 71 | 0x00,0x00,0x99,0x99,0x00,0x00,0x66,0x99,0x00,0x00,0x33,0x99,0x00,0x00,0x00,0x99, 72 | 0x00,0x00,0xff,0x66,0x00,0x00,0xcc,0x66,0x00,0x00,0x99,0x66,0x00,0x00,0x66,0x66, 73 | 0x00,0x00,0x33,0x66,0x00,0x00,0x00,0x66,0x00,0x00,0xff,0x33,0x00,0x00,0xcc,0x33, 74 | 0x00,0x00,0x99,0x33,0x00,0x00,0x66,0x33,0x00,0x00,0x33,0x33,0x00,0x00,0x00,0x33, 75 | 0x00,0x00,0xff,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x66,0x00, 76 | 0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0xd7,0x04,0x23,0x16,0xd7, 77 | 0x00,0x00,0x15,0xd7,0x06,0x23,0x15,0xd7,0x00,0x00,0x14,0xd7,0x08,0x23,0x14,0xd7, 78 | 0x00,0x00,0x13,0xd7,0x03,0x23,0x04,0xd7,0x03,0x23,0x13,0xd7,0x00,0x00,0x12,0xd7, 79 | 0x03,0x23,0x06,0xd7,0x03,0x23,0x12,0xd7,0x00,0x00,0x11,0xd7,0x03,0x23,0x08,0xd7, 80 | 0x03,0x23,0x11,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x11,0x23,0x0a,0xd7,0x11,0x23, 81 | 0x01,0xd7,0x01,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x10,0x23,0x0c,0xd7,0x10,0x23, 82 | 0x01,0xd7,0x01,0xd7,0x00,0x00,0x30,0xd7,0x00,0x00,0x30,0xd7,0x00,0x00,0x01,0xd7, 83 | 0x01,0xd7,0x06,0x23,0x00,0x04,0xd7,0xd7,0x23,0x23,0x17,0xd7,0x01,0x23,0x01,0x23, 84 | 0x03,0xd7,0x06,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x06,0x23, 85 | 0x00,0x04,0xd7,0xd7,0x23,0x23,0x17,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x06,0x23, 86 | 0x01,0xd7,0x01,0xd7,0x00,0x00,0x0a,0xd7,0x01,0x23,0x01,0x23,0x17,0xd7,0x01,0x23, 87 | 0x01,0x23,0x0b,0xd7,0x00,0x00,0x0a,0xd7,0x01,0x23,0x01,0x23,0x17,0xd7,0x01,0x23, 88 | 0x01,0x23,0x0b,0xd7,0x00,0x00,0x0b,0xd7,0x01,0x23,0x01,0x23,0x15,0xd7,0x01,0x23, 89 | 0x01,0x23,0x0c,0xd7,0x00,0x00,0x0b,0xd7,0x01,0x23,0x01,0x23,0x15,0xd7,0x01,0x23, 90 | 0x01,0x23,0x0c,0xd7,0x00,0x00,0x0c,0xd7,0x01,0x23,0x01,0x23,0x13,0xd7,0x01,0x23, 91 | 0x01,0x23,0x0d,0xd7,0x00,0x00,0x0c,0xd7,0x03,0x23,0x11,0xd7,0x03,0x23,0x0d,0xd7, 92 | 0x00,0x00,0x0d,0xd7,0x03,0x23,0x0f,0xd7,0x03,0x23,0x0e,0xd7,0x00,0x00,0x0e,0xd7, 93 | 0x03,0x23,0x0d,0xd7,0x03,0x23,0x0f,0xd7,0x00,0x00,0x0f,0xd7,0x04,0x23,0x09,0xd7, 94 | 0x04,0x23,0x10,0xd7,0x00,0x00,0x10,0xd7,0x05,0x23,0x05,0xd7,0x05,0x23,0x11,0xd7, 95 | 0x00,0x00,0x0b,0xd7,0x01,0x23,0x01,0x23,0x05,0xd7,0x0b,0x23,0x06,0xd7,0x01,0x23, 96 | 0x01,0x23,0x0b,0xd7,0x00,0x00,0x0a,0xd7,0x03,0x23,0x08,0xd7,0x05,0x23,0x09,0xd7, 97 | 0x03,0x23,0x0a,0xd7,0x00,0x00,0x09,0xd7,0x03,0x23,0x18,0xd7,0x03,0x23,0x09,0xd7, 98 | 0x00,0x00,0x08,0xd7,0x03,0x23,0x1a,0xd7,0x03,0x23,0x08,0xd7,0x00,0x00,0x08,0xd7, 99 | 0x01,0x23,0x01,0x23,0x1c,0xd7,0x01,0x23,0x01,0x23,0x08,0xd7,0x00,0x00,0x17,0xd7, 100 | 0x01,0x23,0x01,0x23,0x17,0xd7,0x00,0x00,0x17,0xd7,0x01,0x23,0x01,0x23,0x17,0xd7, 101 | 0x00,0x00,0x17,0xd7,0x01,0x23,0x01,0x23,0x17,0xd7,0x00,0x00,0x17,0xd7,0x01,0x23, 102 | 0x01,0x23,0x17,0xd7,0x00,0x00,0x17,0xd7,0x01,0x23,0x01,0x23,0x17,0xd7,0x00,0x00, 103 | 0x17,0xd7,0x01,0x23,0x01,0x23,0x17,0xd7,0x00,0x00,0x30,0xd7,0x00,0x00,0x30,0xd7, 104 | 0x00,0x01}; 105 | -------------------------------------------------------------------------------- /cyd_weather/temp_4bpp.h: -------------------------------------------------------------------------------- 1 | // Created with image_to_c 2 | // https://github.com/bitbank2/image_to_c 3 | // 4 | // temp_4bpp 5 | // Data size = 1690 bytes 6 | // 7 | // OS/2 BMP, Compression=RLE, Size: 26 x 40, 8-Bpp 8 | // 9 | // for non-Arduino builds... 10 | #ifndef PROGMEM 11 | #define PROGMEM 12 | #endif 13 | const uint8_t temp_4bpp[] PROGMEM = { 14 | 0x42,0x4d,0x9a,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xea,0x03,0x00,0x00,0x7c,0x00, 15 | 0x00,0x00,0x1a,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x01,0x00,0x08,0x00,0x01,0x00, 16 | 0x00,0x00,0xb0,0x02,0x00,0x00,0x13,0x0b,0x00,0x00,0x13,0x0b,0x00,0x00,0xd8,0x00, 17 | 0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00, 18 | 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x47,0x52,0x73,0x00,0x00,0x00,0x00,0x00,0x00, 19 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 20 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 21 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 22 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0xcc,0xff, 23 | 0xff,0x00,0x99,0xff,0xff,0x00,0x66,0xff,0xff,0x00,0x33,0xff,0xff,0x00,0x00,0xff, 24 | 0xff,0x00,0xff,0xcc,0xff,0x00,0xcc,0xcc,0xff,0x00,0x99,0xcc,0xff,0x00,0x66,0xcc, 25 | 0xff,0x00,0x33,0xcc,0xff,0x00,0x00,0xcc,0xff,0x00,0xff,0x99,0xff,0x00,0xcc,0x99, 26 | 0xff,0x00,0x99,0x99,0xff,0x00,0x66,0x99,0xff,0x00,0x33,0x99,0xff,0x00,0x00,0x99, 27 | 0xff,0x00,0xff,0x66,0xff,0x00,0xcc,0x66,0xff,0x00,0x99,0x66,0xff,0x00,0x66,0x66, 28 | 0xff,0x00,0x33,0x66,0xff,0x00,0x00,0x66,0xff,0x00,0xff,0x33,0xff,0x00,0xcc,0x33, 29 | 0xff,0x00,0x99,0x33,0xff,0x00,0x66,0x33,0xff,0x00,0x33,0x33,0xff,0x00,0x00,0x33, 30 | 0xff,0x00,0xff,0x00,0xff,0x00,0xcc,0x00,0xff,0x00,0x99,0x00,0xff,0x00,0x66,0x00, 31 | 0xff,0x00,0x33,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0xff,0xff,0xcc,0x00,0xcc,0xff, 32 | 0xcc,0x00,0x99,0xff,0xcc,0x00,0x66,0xff,0xcc,0x00,0x33,0xff,0xcc,0x00,0x00,0xff, 33 | 0xcc,0x00,0xff,0xcc,0xcc,0x00,0xcc,0xcc,0xcc,0x00,0x99,0xcc,0xcc,0x00,0x66,0xcc, 34 | 0xcc,0x00,0x33,0xcc,0xcc,0x00,0x00,0xcc,0xcc,0x00,0xff,0x99,0xcc,0x00,0xcc,0x99, 35 | 0xcc,0x00,0x99,0x99,0xcc,0x00,0x66,0x99,0xcc,0x00,0x33,0x99,0xcc,0x00,0x00,0x99, 36 | 0xcc,0x00,0xff,0x66,0xcc,0x00,0xcc,0x66,0xcc,0x00,0x99,0x66,0xcc,0x00,0x66,0x66, 37 | 0xcc,0x00,0x33,0x66,0xcc,0x00,0x00,0x66,0xcc,0x00,0xff,0x33,0xcc,0x00,0xcc,0x33, 38 | 0xcc,0x00,0x99,0x33,0xcc,0x00,0x66,0x33,0xcc,0x00,0x33,0x33,0xcc,0x00,0x00,0x33, 39 | 0xcc,0x00,0xff,0x00,0xcc,0x00,0xcc,0x00,0xcc,0x00,0x99,0x00,0xcc,0x00,0x66,0x00, 40 | 0xcc,0x00,0x33,0x00,0xcc,0x00,0x00,0x00,0xcc,0x00,0xff,0xff,0x99,0x00,0xcc,0xff, 41 | 0x99,0x00,0x99,0xff,0x99,0x00,0x66,0xff,0x99,0x00,0x33,0xff,0x99,0x00,0x00,0xff, 42 | 0x99,0x00,0xff,0xcc,0x99,0x00,0xcc,0xcc,0x99,0x00,0x99,0xcc,0x99,0x00,0x66,0xcc, 43 | 0x99,0x00,0x33,0xcc,0x99,0x00,0x00,0xcc,0x99,0x00,0xff,0x99,0x99,0x00,0xcc,0x99, 44 | 0x99,0x00,0x99,0x99,0x99,0x00,0x66,0x99,0x99,0x00,0x33,0x99,0x99,0x00,0x00,0x99, 45 | 0x99,0x00,0xff,0x66,0x99,0x00,0xcc,0x66,0x99,0x00,0x99,0x66,0x99,0x00,0x66,0x66, 46 | 0x99,0x00,0x33,0x66,0x99,0x00,0x00,0x66,0x99,0x00,0xff,0x33,0x99,0x00,0xcc,0x33, 47 | 0x99,0x00,0x99,0x33,0x99,0x00,0x66,0x33,0x99,0x00,0x33,0x33,0x99,0x00,0x00,0x33, 48 | 0x99,0x00,0xff,0x00,0x99,0x00,0xcc,0x00,0x99,0x00,0x99,0x00,0x99,0x00,0x66,0x00, 49 | 0x99,0x00,0x33,0x00,0x99,0x00,0x00,0x00,0x99,0x00,0xff,0xff,0x66,0x00,0xcc,0xff, 50 | 0x66,0x00,0x99,0xff,0x66,0x00,0x66,0xff,0x66,0x00,0x33,0xff,0x66,0x00,0x00,0xff, 51 | 0x66,0x00,0xff,0xcc,0x66,0x00,0xcc,0xcc,0x66,0x00,0x99,0xcc,0x66,0x00,0x66,0xcc, 52 | 0x66,0x00,0x33,0xcc,0x66,0x00,0x00,0xcc,0x66,0x00,0xff,0x99,0x66,0x00,0xcc,0x99, 53 | 0x66,0x00,0x99,0x99,0x66,0x00,0x66,0x99,0x66,0x00,0x33,0x99,0x66,0x00,0x00,0x99, 54 | 0x66,0x00,0xff,0x66,0x66,0x00,0xcc,0x66,0x66,0x00,0x99,0x66,0x66,0x00,0x66,0x66, 55 | 0x66,0x00,0x33,0x66,0x66,0x00,0x00,0x66,0x66,0x00,0xff,0x33,0x66,0x00,0xcc,0x33, 56 | 0x66,0x00,0x99,0x33,0x66,0x00,0x66,0x33,0x66,0x00,0x33,0x33,0x66,0x00,0x00,0x33, 57 | 0x66,0x00,0xff,0x00,0x66,0x00,0xcc,0x00,0x66,0x00,0x99,0x00,0x66,0x00,0x66,0x00, 58 | 0x66,0x00,0x33,0x00,0x66,0x00,0x00,0x00,0x66,0x00,0xff,0xff,0x33,0x00,0xcc,0xff, 59 | 0x33,0x00,0x99,0xff,0x33,0x00,0x66,0xff,0x33,0x00,0x33,0xff,0x33,0x00,0x00,0xff, 60 | 0x33,0x00,0xff,0xcc,0x33,0x00,0xcc,0xcc,0x33,0x00,0x99,0xcc,0x33,0x00,0x66,0xcc, 61 | 0x33,0x00,0x33,0xcc,0x33,0x00,0x00,0xcc,0x33,0x00,0xff,0x99,0x33,0x00,0xcc,0x99, 62 | 0x33,0x00,0x99,0x99,0x33,0x00,0x66,0x99,0x33,0x00,0x33,0x99,0x33,0x00,0x00,0x99, 63 | 0x33,0x00,0xff,0x66,0x33,0x00,0xcc,0x66,0x33,0x00,0x99,0x66,0x33,0x00,0x66,0x66, 64 | 0x33,0x00,0x33,0x66,0x33,0x00,0x00,0x66,0x33,0x00,0xff,0x33,0x33,0x00,0xcc,0x33, 65 | 0x33,0x00,0x99,0x33,0x33,0x00,0x66,0x33,0x33,0x00,0x33,0x33,0x33,0x00,0x00,0x33, 66 | 0x33,0x00,0xff,0x00,0x33,0x00,0xcc,0x00,0x33,0x00,0x99,0x00,0x33,0x00,0x66,0x00, 67 | 0x33,0x00,0x33,0x00,0x33,0x00,0x00,0x00,0x33,0x00,0xff,0xff,0x00,0x00,0xcc,0xff, 68 | 0x00,0x00,0x99,0xff,0x00,0x00,0x66,0xff,0x00,0x00,0x33,0xff,0x00,0x00,0x00,0xff, 69 | 0x00,0x00,0xff,0xcc,0x00,0x00,0xcc,0xcc,0x00,0x00,0x99,0xcc,0x00,0x00,0x66,0xcc, 70 | 0x00,0x00,0x33,0xcc,0x00,0x00,0x00,0xcc,0x00,0x00,0xff,0x99,0x00,0x00,0xcc,0x99, 71 | 0x00,0x00,0x99,0x99,0x00,0x00,0x66,0x99,0x00,0x00,0x33,0x99,0x00,0x00,0x00,0x99, 72 | 0x00,0x00,0xff,0x66,0x00,0x00,0xcc,0x66,0x00,0x00,0x99,0x66,0x00,0x00,0x66,0x66, 73 | 0x00,0x00,0x33,0x66,0x00,0x00,0x00,0x66,0x00,0x00,0xff,0x33,0x00,0x00,0xcc,0x33, 74 | 0x00,0x00,0x99,0x33,0x00,0x00,0x66,0x33,0x00,0x00,0x33,0x33,0x00,0x00,0x00,0x33, 75 | 0x00,0x00,0xff,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x66,0x00, 76 | 0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0xd7,0x00,0x00,0x07,0xd7, 77 | 0x07,0x23,0x0c,0xd7,0x00,0x00,0x05,0xd7,0x0b,0x23,0x0a,0xd7,0x00,0x00,0x04,0xd7, 78 | 0x03,0x23,0x07,0xd7,0x03,0x23,0x09,0xd7,0x00,0x00,0x03,0xd7,0x03,0x23,0x03,0xd7, 79 | 0x03,0x23,0x04,0xd7,0x01,0x23,0x01,0x23,0x08,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7, 80 | 0x03,0x23,0x01,0xd7,0x01,0xd7,0x07,0x23,0x01,0xd7,0x01,0xd7,0x03,0x23,0x07,0xd7, 81 | 0x00,0x00,0x00,0x06,0xd7,0xd7,0x23,0x23,0xd7,0xd7,0x09,0x23,0x00,0x04,0xd7,0xd7, 82 | 0x23,0x23,0x07,0xd7,0x00,0x00,0x00,0x03,0xd7,0x23,0x23,0x00,0x03,0xd7,0x09,0x23, 83 | 0x03,0xd7,0x01,0x23,0x01,0x23,0x06,0xd7,0x00,0x00,0x00,0x05,0xd7,0x23,0x23,0xd7, 84 | 0xd7,0x00,0x0b,0x23,0x00,0x04,0xd7,0xd7,0x23,0x23,0x06,0xd7,0x00,0x00,0x00,0x05, 85 | 0xd7,0x23,0x23,0xd7,0xd7,0x00,0x0b,0x23,0x00,0x04,0xd7,0xd7,0x23,0x23,0x06,0xd7, 86 | 0x00,0x00,0x00,0x05,0xd7,0x23,0x23,0xd7,0xd7,0x00,0x0b,0x23,0x00,0x04,0xd7,0xd7, 87 | 0x23,0x23,0x06,0xd7,0x00,0x00,0x00,0x05,0xd7,0x23,0x23,0xd7,0xd7,0x00,0x0b,0x23, 88 | 0x00,0x04,0xd7,0xd7,0x23,0x23,0x06,0xd7,0x00,0x00,0x00,0x03,0xd7,0x23,0x23,0x00, 89 | 0x03,0xd7,0x09,0x23,0x03,0xd7,0x01,0x23,0x01,0x23,0x06,0xd7,0x00,0x00,0x00,0x06, 90 | 0xd7,0xd7,0x23,0x23,0xd7,0xd7,0x09,0x23,0x00,0x04,0xd7,0xd7,0x23,0x23,0x07,0xd7, 91 | 0x00,0x00,0x00,0x04,0xd7,0xd7,0x23,0x23,0x03,0xd7,0x07,0x23,0x03,0xd7,0x01,0x23, 92 | 0x01,0x23,0x07,0xd7,0x00,0x00,0x03,0xd7,0x01,0x23,0x01,0x23,0x04,0xd7,0x03,0x23, 93 | 0x04,0xd7,0x01,0x23,0x01,0x23,0x08,0xd7,0x00,0x00,0x04,0xd7,0x01,0x23,0x01,0x23, 94 | 0x03,0xd7,0x03,0x23,0x03,0xd7,0x01,0x23,0x01,0x23,0x09,0xd7,0x00,0x00,0x05,0xd7, 95 | 0x03,0x23,0x01,0xd7,0x03,0x23,0x01,0xd7,0x03,0x23,0x0a,0xd7,0x00,0x00,0x06,0xd7, 96 | 0x00,0x03,0x23,0x23,0xd7,0x00,0x03,0x23,0x00,0x03,0xd7,0x23,0x23,0x00,0x0b,0xd7, 97 | 0x00,0x00,0x06,0xd7,0x00,0x03,0x23,0x23,0xd7,0x00,0x03,0x23,0x00,0x03,0xd7,0x23, 98 | 0x23,0x00,0x04,0xd7,0x06,0x23,0x01,0xd7,0x00,0x00,0x06,0xd7,0x00,0x03,0x23,0x23, 99 | 0xd7,0x00,0x03,0x23,0x00,0x03,0xd7,0x23,0x23,0x00,0x04,0xd7,0x06,0x23,0x01,0xd7, 100 | 0x00,0x00,0x06,0xd7,0x00,0x03,0x23,0x23,0xd7,0x00,0x03,0x23,0x00,0x03,0xd7,0x23, 101 | 0x23,0x00,0x0b,0xd7,0x00,0x00,0x06,0xd7,0x00,0x03,0x23,0x23,0xd7,0x00,0x03,0x23, 102 | 0x00,0x03,0xd7,0x23,0x23,0x00,0x0b,0xd7,0x00,0x00,0x06,0xd7,0x00,0x03,0x23,0x23, 103 | 0xd7,0x00,0x03,0x23,0x00,0x03,0xd7,0x23,0x23,0x00,0x0b,0xd7,0x00,0x00,0x06,0xd7, 104 | 0x00,0x03,0x23,0x23,0xd7,0x00,0x03,0x23,0x00,0x03,0xd7,0x23,0x23,0x00,0x03,0xd7, 105 | 0x07,0x23,0x01,0xd7,0x00,0x00,0x06,0xd7,0x01,0x23,0x01,0x23,0x05,0xd7,0x01,0x23, 106 | 0x01,0x23,0x03,0xd7,0x07,0x23,0x01,0xd7,0x00,0x00,0x06,0xd7,0x01,0x23,0x01,0x23, 107 | 0x05,0xd7,0x01,0x23,0x01,0x23,0x0b,0xd7,0x00,0x00,0x06,0xd7,0x01,0x23,0x01,0x23, 108 | 0x05,0xd7,0x01,0x23,0x01,0x23,0x0b,0xd7,0x00,0x00,0x06,0xd7,0x01,0x23,0x01,0x23, 109 | 0x05,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x07,0x23,0x01,0xd7,0x00,0x00,0x06,0xd7, 110 | 0x01,0x23,0x01,0x23,0x05,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x07,0x23,0x01,0xd7, 111 | 0x00,0x00,0x06,0xd7,0x01,0x23,0x01,0x23,0x05,0xd7,0x01,0x23,0x01,0x23,0x0b,0xd7, 112 | 0x00,0x00,0x06,0xd7,0x01,0x23,0x01,0x23,0x05,0xd7,0x01,0x23,0x01,0x23,0x0b,0xd7, 113 | 0x00,0x00,0x06,0xd7,0x01,0x23,0x01,0x23,0x05,0xd7,0x01,0x23,0x01,0x23,0x0b,0xd7, 114 | 0x00,0x00,0x06,0xd7,0x01,0x23,0x01,0x23,0x05,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7, 115 | 0x07,0x23,0x01,0xd7,0x00,0x00,0x06,0xd7,0x01,0x23,0x01,0x23,0x05,0xd7,0x01,0x23, 116 | 0x01,0x23,0x03,0xd7,0x07,0x23,0x01,0xd7,0x00,0x00,0x06,0xd7,0x01,0x23,0x01,0x23, 117 | 0x05,0xd7,0x01,0x23,0x01,0x23,0x0b,0xd7,0x00,0x00,0x06,0xd7,0x03,0x23,0x03,0xd7, 118 | 0x03,0x23,0x0b,0xd7,0x00,0x00,0x07,0xd7,0x07,0x23,0x0c,0xd7,0x00,0x00,0x09,0xd7, 119 | 0x03,0x23,0x0e,0xd7,0x00,0x00,0x1a,0xd7,0x00,0x01}; 120 | -------------------------------------------------------------------------------- /cyd_weather/uv_icon_4bpp.h: -------------------------------------------------------------------------------- 1 | // Created with image_to_c 2 | // https://github.com/bitbank2/image_to_c 3 | // 4 | // uv_icon_4bpp 5 | // Data size = 1788 bytes 6 | // 7 | // OS/2 BMP, Compression=RLE, Size: 40 x 40, 8-Bpp 8 | // 9 | // for non-Arduino builds... 10 | #ifndef PROGMEM 11 | #define PROGMEM 12 | #endif 13 | const uint8_t uv_icon_4bpp[] PROGMEM = { 14 | 0x42,0x4d,0xfc,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xea,0x03,0x00,0x00,0x7c,0x00, 15 | 0x00,0x00,0x28,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x01,0x00,0x08,0x00,0x01,0x00, 16 | 0x00,0x00,0x12,0x03,0x00,0x00,0x13,0x0b,0x00,0x00,0x13,0x0b,0x00,0x00,0xd8,0x00, 17 | 0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00, 18 | 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x47,0x52,0x73,0x00,0x00,0x00,0x00,0x00,0x00, 19 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 20 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 21 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 22 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0xcc,0xff, 23 | 0xff,0x00,0x99,0xff,0xff,0x00,0x66,0xff,0xff,0x00,0x33,0xff,0xff,0x00,0x00,0xff, 24 | 0xff,0x00,0xff,0xcc,0xff,0x00,0xcc,0xcc,0xff,0x00,0x99,0xcc,0xff,0x00,0x66,0xcc, 25 | 0xff,0x00,0x33,0xcc,0xff,0x00,0x00,0xcc,0xff,0x00,0xff,0x99,0xff,0x00,0xcc,0x99, 26 | 0xff,0x00,0x99,0x99,0xff,0x00,0x66,0x99,0xff,0x00,0x33,0x99,0xff,0x00,0x00,0x99, 27 | 0xff,0x00,0xff,0x66,0xff,0x00,0xcc,0x66,0xff,0x00,0x99,0x66,0xff,0x00,0x66,0x66, 28 | 0xff,0x00,0x33,0x66,0xff,0x00,0x00,0x66,0xff,0x00,0xff,0x33,0xff,0x00,0xcc,0x33, 29 | 0xff,0x00,0x99,0x33,0xff,0x00,0x66,0x33,0xff,0x00,0x33,0x33,0xff,0x00,0x00,0x33, 30 | 0xff,0x00,0xff,0x00,0xff,0x00,0xcc,0x00,0xff,0x00,0x99,0x00,0xff,0x00,0x66,0x00, 31 | 0xff,0x00,0x33,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0xff,0xff,0xcc,0x00,0xcc,0xff, 32 | 0xcc,0x00,0x99,0xff,0xcc,0x00,0x66,0xff,0xcc,0x00,0x33,0xff,0xcc,0x00,0x00,0xff, 33 | 0xcc,0x00,0xff,0xcc,0xcc,0x00,0xcc,0xcc,0xcc,0x00,0x99,0xcc,0xcc,0x00,0x66,0xcc, 34 | 0xcc,0x00,0x33,0xcc,0xcc,0x00,0x00,0xcc,0xcc,0x00,0xff,0x99,0xcc,0x00,0xcc,0x99, 35 | 0xcc,0x00,0x99,0x99,0xcc,0x00,0x66,0x99,0xcc,0x00,0x33,0x99,0xcc,0x00,0x00,0x99, 36 | 0xcc,0x00,0xff,0x66,0xcc,0x00,0xcc,0x66,0xcc,0x00,0x99,0x66,0xcc,0x00,0x66,0x66, 37 | 0xcc,0x00,0x33,0x66,0xcc,0x00,0x00,0x66,0xcc,0x00,0xff,0x33,0xcc,0x00,0xcc,0x33, 38 | 0xcc,0x00,0x99,0x33,0xcc,0x00,0x66,0x33,0xcc,0x00,0x33,0x33,0xcc,0x00,0x00,0x33, 39 | 0xcc,0x00,0xff,0x00,0xcc,0x00,0xcc,0x00,0xcc,0x00,0x99,0x00,0xcc,0x00,0x66,0x00, 40 | 0xcc,0x00,0x33,0x00,0xcc,0x00,0x00,0x00,0xcc,0x00,0xff,0xff,0x99,0x00,0xcc,0xff, 41 | 0x99,0x00,0x99,0xff,0x99,0x00,0x66,0xff,0x99,0x00,0x33,0xff,0x99,0x00,0x00,0xff, 42 | 0x99,0x00,0xff,0xcc,0x99,0x00,0xcc,0xcc,0x99,0x00,0x99,0xcc,0x99,0x00,0x66,0xcc, 43 | 0x99,0x00,0x33,0xcc,0x99,0x00,0x00,0xcc,0x99,0x00,0xff,0x99,0x99,0x00,0xcc,0x99, 44 | 0x99,0x00,0x99,0x99,0x99,0x00,0x66,0x99,0x99,0x00,0x33,0x99,0x99,0x00,0x00,0x99, 45 | 0x99,0x00,0xff,0x66,0x99,0x00,0xcc,0x66,0x99,0x00,0x99,0x66,0x99,0x00,0x66,0x66, 46 | 0x99,0x00,0x33,0x66,0x99,0x00,0x00,0x66,0x99,0x00,0xff,0x33,0x99,0x00,0xcc,0x33, 47 | 0x99,0x00,0x99,0x33,0x99,0x00,0x66,0x33,0x99,0x00,0x33,0x33,0x99,0x00,0x00,0x33, 48 | 0x99,0x00,0xff,0x00,0x99,0x00,0xcc,0x00,0x99,0x00,0x99,0x00,0x99,0x00,0x66,0x00, 49 | 0x99,0x00,0x33,0x00,0x99,0x00,0x00,0x00,0x99,0x00,0xff,0xff,0x66,0x00,0xcc,0xff, 50 | 0x66,0x00,0x99,0xff,0x66,0x00,0x66,0xff,0x66,0x00,0x33,0xff,0x66,0x00,0x00,0xff, 51 | 0x66,0x00,0xff,0xcc,0x66,0x00,0xcc,0xcc,0x66,0x00,0x99,0xcc,0x66,0x00,0x66,0xcc, 52 | 0x66,0x00,0x33,0xcc,0x66,0x00,0x00,0xcc,0x66,0x00,0xff,0x99,0x66,0x00,0xcc,0x99, 53 | 0x66,0x00,0x99,0x99,0x66,0x00,0x66,0x99,0x66,0x00,0x33,0x99,0x66,0x00,0x00,0x99, 54 | 0x66,0x00,0xff,0x66,0x66,0x00,0xcc,0x66,0x66,0x00,0x99,0x66,0x66,0x00,0x66,0x66, 55 | 0x66,0x00,0x33,0x66,0x66,0x00,0x00,0x66,0x66,0x00,0xff,0x33,0x66,0x00,0xcc,0x33, 56 | 0x66,0x00,0x99,0x33,0x66,0x00,0x66,0x33,0x66,0x00,0x33,0x33,0x66,0x00,0x00,0x33, 57 | 0x66,0x00,0xff,0x00,0x66,0x00,0xcc,0x00,0x66,0x00,0x99,0x00,0x66,0x00,0x66,0x00, 58 | 0x66,0x00,0x33,0x00,0x66,0x00,0x00,0x00,0x66,0x00,0xff,0xff,0x33,0x00,0xcc,0xff, 59 | 0x33,0x00,0x99,0xff,0x33,0x00,0x66,0xff,0x33,0x00,0x33,0xff,0x33,0x00,0x00,0xff, 60 | 0x33,0x00,0xff,0xcc,0x33,0x00,0xcc,0xcc,0x33,0x00,0x99,0xcc,0x33,0x00,0x66,0xcc, 61 | 0x33,0x00,0x33,0xcc,0x33,0x00,0x00,0xcc,0x33,0x00,0xff,0x99,0x33,0x00,0xcc,0x99, 62 | 0x33,0x00,0x99,0x99,0x33,0x00,0x66,0x99,0x33,0x00,0x33,0x99,0x33,0x00,0x00,0x99, 63 | 0x33,0x00,0xff,0x66,0x33,0x00,0xcc,0x66,0x33,0x00,0x99,0x66,0x33,0x00,0x66,0x66, 64 | 0x33,0x00,0x33,0x66,0x33,0x00,0x00,0x66,0x33,0x00,0xff,0x33,0x33,0x00,0xcc,0x33, 65 | 0x33,0x00,0x99,0x33,0x33,0x00,0x66,0x33,0x33,0x00,0x33,0x33,0x33,0x00,0x00,0x33, 66 | 0x33,0x00,0xff,0x00,0x33,0x00,0xcc,0x00,0x33,0x00,0x99,0x00,0x33,0x00,0x66,0x00, 67 | 0x33,0x00,0x33,0x00,0x33,0x00,0x00,0x00,0x33,0x00,0xff,0xff,0x00,0x00,0xcc,0xff, 68 | 0x00,0x00,0x99,0xff,0x00,0x00,0x66,0xff,0x00,0x00,0x33,0xff,0x00,0x00,0x00,0xff, 69 | 0x00,0x00,0xff,0xcc,0x00,0x00,0xcc,0xcc,0x00,0x00,0x99,0xcc,0x00,0x00,0x66,0xcc, 70 | 0x00,0x00,0x33,0xcc,0x00,0x00,0x00,0xcc,0x00,0x00,0xff,0x99,0x00,0x00,0xcc,0x99, 71 | 0x00,0x00,0x99,0x99,0x00,0x00,0x66,0x99,0x00,0x00,0x33,0x99,0x00,0x00,0x00,0x99, 72 | 0x00,0x00,0xff,0x66,0x00,0x00,0xcc,0x66,0x00,0x00,0x99,0x66,0x00,0x00,0x66,0x66, 73 | 0x00,0x00,0x33,0x66,0x00,0x00,0x00,0x66,0x00,0x00,0xff,0x33,0x00,0x00,0xcc,0x33, 74 | 0x00,0x00,0x99,0x33,0x00,0x00,0x66,0x33,0x00,0x00,0x33,0x33,0x00,0x00,0x00,0x33, 75 | 0x00,0x00,0xff,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x66,0x00, 76 | 0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0xd7,0x01,0x23,0x01,0x23, 77 | 0x13,0xd7,0x00,0x00,0x12,0xd7,0x04,0x23,0x12,0xd7,0x00,0x00,0x0a,0xd7,0x01,0x23, 78 | 0x01,0x23,0x06,0xd7,0x04,0x23,0x06,0xd7,0x01,0x23,0x01,0x23,0x0a,0xd7,0x00,0x00, 79 | 0x09,0xd7,0x03,0x23,0x06,0xd7,0x04,0x23,0x06,0xd7,0x03,0x23,0x09,0xd7,0x00,0x00, 80 | 0x09,0xd7,0x04,0x23,0x05,0xd7,0x04,0x23,0x05,0xd7,0x04,0x23,0x09,0xd7,0x00,0x00, 81 | 0x0a,0xd7,0x04,0x23,0x04,0xd7,0x04,0x23,0x04,0xd7,0x04,0x23,0x0a,0xd7,0x00,0x00, 82 | 0x0a,0xd7,0x04,0x23,0x04,0xd7,0x04,0x23,0x04,0xd7,0x04,0x23,0x0a,0xd7,0x00,0x00, 83 | 0x0b,0xd7,0x04,0x23,0x04,0xd7,0x01,0x23,0x01,0x23,0x04,0xd7,0x04,0x23,0x0b,0xd7, 84 | 0x00,0x00,0x0b,0xd7,0x04,0x23,0x0a,0xd7,0x04,0x23,0x0b,0xd7,0x00,0x00,0x03,0xd7, 85 | 0x01,0x23,0x01,0x23,0x07,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x06,0x23,0x03,0xd7, 86 | 0x01,0x23,0x01,0x23,0x07,0xd7,0x01,0x23,0x01,0x23,0x03,0xd7,0x00,0x00,0x01,0xd7, 87 | 0x01,0xd7,0x05,0x23,0x08,0xd7,0x0a,0x23,0x08,0xd7,0x05,0x23,0x01,0xd7,0x01,0xd7, 88 | 0x00,0x00,0x01,0xd7,0x01,0xd7,0x07,0x23,0x04,0xd7,0x0e,0x23,0x04,0xd7,0x07,0x23, 89 | 0x01,0xd7,0x01,0xd7,0x00,0x00,0x04,0xd7,0x06,0x23,0x01,0xd7,0x01,0xd7,0x10,0x23, 90 | 0x01,0xd7,0x01,0xd7,0x06,0x23,0x04,0xd7,0x00,0x00,0x05,0xd7,0x05,0x23,0x01,0xd7, 91 | 0x12,0x23,0x01,0xd7,0x05,0x23,0x05,0xd7,0x00,0x00,0x07,0xd7,0x00,0x04,0x23,0x23, 92 | 0xd7,0xd7,0x12,0x23,0x00,0x04,0xd7,0xd7,0x23,0x23,0x07,0xd7,0x00,0x00,0x0a,0xd7, 93 | 0x04,0x23,0x04,0xd7,0x06,0x23,0x01,0xd7,0x05,0x23,0x0a,0xd7,0x00,0x00,0x0a,0xd7, 94 | 0x03,0x23,0x06,0xd7,0x04,0x23,0x03,0xd7,0x04,0x23,0x0a,0xd7,0x00,0x00,0x09,0xd7, 95 | 0x04,0x23,0x00,0x06,0xd7,0xd7,0x23,0x23,0xd7,0xd7,0x04,0x23,0x00,0x03,0xd7,0x23, 96 | 0xd7,0x00,0x05,0x23,0x09,0xd7,0x00,0x00,0x01,0xd7,0x06,0x23,0x01,0xd7,0x01,0xd7, 97 | 0x03,0x23,0x01,0xd7,0x01,0xd7,0x04,0x23,0x00,0x09,0xd7,0xd7,0x23,0x23,0xd7,0xd7, 98 | 0x23,0xd7,0xd7,0x00,0x04,0x23,0x01,0xd7,0x01,0xd7,0x06,0x23,0x01,0xd7,0x00,0x00, 99 | 0x08,0x23,0x01,0xd7,0x03,0x23,0x01,0xd7,0x01,0xd7,0x04,0x23,0x00,0x05,0xd7,0xd7, 100 | 0x23,0x23,0xd7,0x00,0x03,0x23,0x01,0xd7,0x04,0x23,0x01,0xd7,0x08,0x23,0x00,0x00, 101 | 0x08,0x23,0x01,0xd7,0x03,0x23,0x01,0xd7,0x01,0xd7,0x04,0x23,0x00,0x05,0xd7,0xd7, 102 | 0x23,0x23,0xd7,0x00,0x03,0x23,0x01,0xd7,0x04,0x23,0x01,0xd7,0x08,0x23,0x00,0x00, 103 | 0x01,0xd7,0x06,0x23,0x01,0xd7,0x01,0xd7,0x03,0x23,0x01,0xd7,0x01,0xd7,0x04,0x23, 104 | 0x00,0x05,0xd7,0xd7,0x23,0xd7,0xd7,0x00,0x03,0x23,0x01,0xd7,0x01,0xd7,0x03,0x23, 105 | 0x01,0xd7,0x01,0xd7,0x06,0x23,0x01,0xd7,0x00,0x00,0x09,0xd7,0x03,0x23,0x01,0xd7, 106 | 0x01,0xd7,0x04,0x23,0x00,0x04,0xd7,0xd7,0x23,0xd7,0x05,0x23,0x01,0xd7,0x03,0x23, 107 | 0x09,0xd7,0x00,0x00,0x0a,0xd7,0x00,0x04,0x23,0x23,0xd7,0xd7,0x04,0x23,0x00,0x04, 108 | 0xd7,0xd7,0x23,0xd7,0x05,0x23,0x00,0x03,0xd7,0x23,0x23,0x00,0x0a,0xd7,0x00,0x00, 109 | 0x0a,0xd7,0x14,0x23,0x0a,0xd7,0x00,0x00,0x07,0xd7,0x00,0x04,0x23,0x23,0xd7,0xd7, 110 | 0x12,0x23,0x00,0x04,0xd7,0xd7,0x23,0x23,0x07,0xd7,0x00,0x00,0x05,0xd7,0x05,0x23, 111 | 0x01,0xd7,0x12,0x23,0x01,0xd7,0x05,0x23,0x05,0xd7,0x00,0x00,0x04,0xd7,0x06,0x23, 112 | 0x01,0xd7,0x01,0xd7,0x10,0x23,0x01,0xd7,0x01,0xd7,0x06,0x23,0x04,0xd7,0x00,0x00, 113 | 0x01,0xd7,0x01,0xd7,0x07,0x23,0x04,0xd7,0x0e,0x23,0x04,0xd7,0x07,0x23,0x01,0xd7, 114 | 0x01,0xd7,0x00,0x00,0x01,0xd7,0x01,0xd7,0x05,0x23,0x08,0xd7,0x0a,0x23,0x08,0xd7, 115 | 0x05,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00,0x03,0xd7,0x01,0x23,0x01,0x23,0x07,0xd7, 116 | 0x01,0x23,0x01,0x23,0x03,0xd7,0x06,0x23,0x03,0xd7,0x01,0x23,0x01,0x23,0x07,0xd7, 117 | 0x01,0x23,0x01,0x23,0x03,0xd7,0x00,0x00,0x0b,0xd7,0x04,0x23,0x0a,0xd7,0x04,0x23, 118 | 0x0b,0xd7,0x00,0x00,0x0b,0xd7,0x04,0x23,0x04,0xd7,0x01,0x23,0x01,0x23,0x04,0xd7, 119 | 0x04,0x23,0x0b,0xd7,0x00,0x00,0x0a,0xd7,0x04,0x23,0x04,0xd7,0x04,0x23,0x04,0xd7, 120 | 0x04,0x23,0x0a,0xd7,0x00,0x00,0x0a,0xd7,0x04,0x23,0x04,0xd7,0x04,0x23,0x04,0xd7, 121 | 0x04,0x23,0x0a,0xd7,0x00,0x00,0x09,0xd7,0x04,0x23,0x05,0xd7,0x04,0x23,0x05,0xd7, 122 | 0x04,0x23,0x09,0xd7,0x00,0x00,0x09,0xd7,0x03,0x23,0x06,0xd7,0x04,0x23,0x06,0xd7, 123 | 0x03,0x23,0x09,0xd7,0x00,0x00,0x0a,0xd7,0x01,0x23,0x01,0x23,0x06,0xd7,0x04,0x23, 124 | 0x06,0xd7,0x01,0x23,0x01,0x23,0x0a,0xd7,0x00,0x00,0x12,0xd7,0x04,0x23,0x12,0xd7, 125 | 0x00,0x00,0x13,0xd7,0x01,0x23,0x01,0x23,0x13,0xd7,0x00,0x01}; 126 | -------------------------------------------------------------------------------- /cyd_weather/wind_4bpp.h: -------------------------------------------------------------------------------- 1 | // Created with image_to_c 2 | // https://github.com/bitbank2/image_to_c 3 | // 4 | // wind_4bpp 5 | // Data size = 1358 bytes 6 | // 7 | // OS/2 BMP, Compression=RLE, Size: 40 x 40, 8-Bpp 8 | // 9 | // for non-Arduino builds... 10 | #ifndef PROGMEM 11 | #define PROGMEM 12 | #endif 13 | const uint8_t wind_4bpp[] PROGMEM = { 14 | 0x42,0x4d,0x4e,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0xea,0x03,0x00,0x00,0x7c,0x00, 15 | 0x00,0x00,0x28,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x01,0x00,0x08,0x00,0x01,0x00, 16 | 0x00,0x00,0x64,0x01,0x00,0x00,0x13,0x0b,0x00,0x00,0x13,0x0b,0x00,0x00,0xd8,0x00, 17 | 0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00, 18 | 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x47,0x52,0x73,0x00,0x00,0x00,0x00,0x00,0x00, 19 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 20 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 21 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 22 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0xcc,0xff, 23 | 0xff,0x00,0x99,0xff,0xff,0x00,0x66,0xff,0xff,0x00,0x33,0xff,0xff,0x00,0x00,0xff, 24 | 0xff,0x00,0xff,0xcc,0xff,0x00,0xcc,0xcc,0xff,0x00,0x99,0xcc,0xff,0x00,0x66,0xcc, 25 | 0xff,0x00,0x33,0xcc,0xff,0x00,0x00,0xcc,0xff,0x00,0xff,0x99,0xff,0x00,0xcc,0x99, 26 | 0xff,0x00,0x99,0x99,0xff,0x00,0x66,0x99,0xff,0x00,0x33,0x99,0xff,0x00,0x00,0x99, 27 | 0xff,0x00,0xff,0x66,0xff,0x00,0xcc,0x66,0xff,0x00,0x99,0x66,0xff,0x00,0x66,0x66, 28 | 0xff,0x00,0x33,0x66,0xff,0x00,0x00,0x66,0xff,0x00,0xff,0x33,0xff,0x00,0xcc,0x33, 29 | 0xff,0x00,0x99,0x33,0xff,0x00,0x66,0x33,0xff,0x00,0x33,0x33,0xff,0x00,0x00,0x33, 30 | 0xff,0x00,0xff,0x00,0xff,0x00,0xcc,0x00,0xff,0x00,0x99,0x00,0xff,0x00,0x66,0x00, 31 | 0xff,0x00,0x33,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0xff,0xff,0xcc,0x00,0xcc,0xff, 32 | 0xcc,0x00,0x99,0xff,0xcc,0x00,0x66,0xff,0xcc,0x00,0x33,0xff,0xcc,0x00,0x00,0xff, 33 | 0xcc,0x00,0xff,0xcc,0xcc,0x00,0xcc,0xcc,0xcc,0x00,0x99,0xcc,0xcc,0x00,0x66,0xcc, 34 | 0xcc,0x00,0x33,0xcc,0xcc,0x00,0x00,0xcc,0xcc,0x00,0xff,0x99,0xcc,0x00,0xcc,0x99, 35 | 0xcc,0x00,0x99,0x99,0xcc,0x00,0x66,0x99,0xcc,0x00,0x33,0x99,0xcc,0x00,0x00,0x99, 36 | 0xcc,0x00,0xff,0x66,0xcc,0x00,0xcc,0x66,0xcc,0x00,0x99,0x66,0xcc,0x00,0x66,0x66, 37 | 0xcc,0x00,0x33,0x66,0xcc,0x00,0x00,0x66,0xcc,0x00,0xff,0x33,0xcc,0x00,0xcc,0x33, 38 | 0xcc,0x00,0x99,0x33,0xcc,0x00,0x66,0x33,0xcc,0x00,0x33,0x33,0xcc,0x00,0x00,0x33, 39 | 0xcc,0x00,0xff,0x00,0xcc,0x00,0xcc,0x00,0xcc,0x00,0x99,0x00,0xcc,0x00,0x66,0x00, 40 | 0xcc,0x00,0x33,0x00,0xcc,0x00,0x00,0x00,0xcc,0x00,0xff,0xff,0x99,0x00,0xcc,0xff, 41 | 0x99,0x00,0x99,0xff,0x99,0x00,0x66,0xff,0x99,0x00,0x33,0xff,0x99,0x00,0x00,0xff, 42 | 0x99,0x00,0xff,0xcc,0x99,0x00,0xcc,0xcc,0x99,0x00,0x99,0xcc,0x99,0x00,0x66,0xcc, 43 | 0x99,0x00,0x33,0xcc,0x99,0x00,0x00,0xcc,0x99,0x00,0xff,0x99,0x99,0x00,0xcc,0x99, 44 | 0x99,0x00,0x99,0x99,0x99,0x00,0x66,0x99,0x99,0x00,0x33,0x99,0x99,0x00,0x00,0x99, 45 | 0x99,0x00,0xff,0x66,0x99,0x00,0xcc,0x66,0x99,0x00,0x99,0x66,0x99,0x00,0x66,0x66, 46 | 0x99,0x00,0x33,0x66,0x99,0x00,0x00,0x66,0x99,0x00,0xff,0x33,0x99,0x00,0xcc,0x33, 47 | 0x99,0x00,0x99,0x33,0x99,0x00,0x66,0x33,0x99,0x00,0x33,0x33,0x99,0x00,0x00,0x33, 48 | 0x99,0x00,0xff,0x00,0x99,0x00,0xcc,0x00,0x99,0x00,0x99,0x00,0x99,0x00,0x66,0x00, 49 | 0x99,0x00,0x33,0x00,0x99,0x00,0x00,0x00,0x99,0x00,0xff,0xff,0x66,0x00,0xcc,0xff, 50 | 0x66,0x00,0x99,0xff,0x66,0x00,0x66,0xff,0x66,0x00,0x33,0xff,0x66,0x00,0x00,0xff, 51 | 0x66,0x00,0xff,0xcc,0x66,0x00,0xcc,0xcc,0x66,0x00,0x99,0xcc,0x66,0x00,0x66,0xcc, 52 | 0x66,0x00,0x33,0xcc,0x66,0x00,0x00,0xcc,0x66,0x00,0xff,0x99,0x66,0x00,0xcc,0x99, 53 | 0x66,0x00,0x99,0x99,0x66,0x00,0x66,0x99,0x66,0x00,0x33,0x99,0x66,0x00,0x00,0x99, 54 | 0x66,0x00,0xff,0x66,0x66,0x00,0xcc,0x66,0x66,0x00,0x99,0x66,0x66,0x00,0x66,0x66, 55 | 0x66,0x00,0x33,0x66,0x66,0x00,0x00,0x66,0x66,0x00,0xff,0x33,0x66,0x00,0xcc,0x33, 56 | 0x66,0x00,0x99,0x33,0x66,0x00,0x66,0x33,0x66,0x00,0x33,0x33,0x66,0x00,0x00,0x33, 57 | 0x66,0x00,0xff,0x00,0x66,0x00,0xcc,0x00,0x66,0x00,0x99,0x00,0x66,0x00,0x66,0x00, 58 | 0x66,0x00,0x33,0x00,0x66,0x00,0x00,0x00,0x66,0x00,0xff,0xff,0x33,0x00,0xcc,0xff, 59 | 0x33,0x00,0x99,0xff,0x33,0x00,0x66,0xff,0x33,0x00,0x33,0xff,0x33,0x00,0x00,0xff, 60 | 0x33,0x00,0xff,0xcc,0x33,0x00,0xcc,0xcc,0x33,0x00,0x99,0xcc,0x33,0x00,0x66,0xcc, 61 | 0x33,0x00,0x33,0xcc,0x33,0x00,0x00,0xcc,0x33,0x00,0xff,0x99,0x33,0x00,0xcc,0x99, 62 | 0x33,0x00,0x99,0x99,0x33,0x00,0x66,0x99,0x33,0x00,0x33,0x99,0x33,0x00,0x00,0x99, 63 | 0x33,0x00,0xff,0x66,0x33,0x00,0xcc,0x66,0x33,0x00,0x99,0x66,0x33,0x00,0x66,0x66, 64 | 0x33,0x00,0x33,0x66,0x33,0x00,0x00,0x66,0x33,0x00,0xff,0x33,0x33,0x00,0xcc,0x33, 65 | 0x33,0x00,0x99,0x33,0x33,0x00,0x66,0x33,0x33,0x00,0x33,0x33,0x33,0x00,0x00,0x33, 66 | 0x33,0x00,0xff,0x00,0x33,0x00,0xcc,0x00,0x33,0x00,0x99,0x00,0x33,0x00,0x66,0x00, 67 | 0x33,0x00,0x33,0x00,0x33,0x00,0x00,0x00,0x33,0x00,0xff,0xff,0x00,0x00,0xcc,0xff, 68 | 0x00,0x00,0x99,0xff,0x00,0x00,0x66,0xff,0x00,0x00,0x33,0xff,0x00,0x00,0x00,0xff, 69 | 0x00,0x00,0xff,0xcc,0x00,0x00,0xcc,0xcc,0x00,0x00,0x99,0xcc,0x00,0x00,0x66,0xcc, 70 | 0x00,0x00,0x33,0xcc,0x00,0x00,0x00,0xcc,0x00,0x00,0xff,0x99,0x00,0x00,0xcc,0x99, 71 | 0x00,0x00,0x99,0x99,0x00,0x00,0x66,0x99,0x00,0x00,0x33,0x99,0x00,0x00,0x00,0x99, 72 | 0x00,0x00,0xff,0x66,0x00,0x00,0xcc,0x66,0x00,0x00,0x99,0x66,0x00,0x00,0x66,0x66, 73 | 0x00,0x00,0x33,0x66,0x00,0x00,0x00,0x66,0x00,0x00,0xff,0x33,0x00,0x00,0xcc,0x33, 74 | 0x00,0x00,0x99,0x33,0x00,0x00,0x66,0x33,0x00,0x00,0x33,0x33,0x00,0x00,0x00,0x33, 75 | 0x00,0x00,0xff,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x66,0x00, 76 | 0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0xd7,0x00,0x00,0x0c,0xd7, 77 | 0x06,0x23,0x16,0xd7,0x00,0x00,0x0b,0xd7,0x09,0x23,0x14,0xd7,0x00,0x00,0x0a,0xd7, 78 | 0x0b,0x23,0x13,0xd7,0x00,0x00,0x09,0xd7,0x05,0x23,0x03,0xd7,0x04,0x23,0x13,0xd7, 79 | 0x00,0x00,0x09,0xd7,0x04,0x23,0x05,0xd7,0x04,0x23,0x12,0xd7,0x00,0x00,0x09,0xd7, 80 | 0x03,0x23,0x07,0xd7,0x03,0x23,0x12,0xd7,0x00,0x00,0x13,0xd7,0x03,0x23,0x12,0xd7, 81 | 0x00,0x00,0x12,0xd7,0x04,0x23,0x12,0xd7,0x00,0x00,0x11,0xd7,0x04,0x23,0x08,0xd7, 82 | 0x07,0x23,0x04,0xd7,0x00,0x00,0x10,0xd7,0x05,0x23,0x07,0xd7,0x09,0x23,0x03,0xd7, 83 | 0x00,0x00,0x01,0xd7,0x13,0x23,0x07,0xd7,0x0b,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00, 84 | 0x01,0xd7,0x12,0x23,0x07,0xd7,0x05,0x23,0x03,0xd7,0x04,0x23,0x01,0xd7,0x01,0xd7, 85 | 0x00,0x00,0x01,0xd7,0x10,0x23,0x09,0xd7,0x04,0x23,0x05,0xd7,0x04,0x23,0x01,0xd7, 86 | 0x00,0x00,0x1a,0xd7,0x03,0x23,0x07,0xd7,0x03,0x23,0x01,0xd7,0x00,0x00,0x24,0xd7, 87 | 0x03,0x23,0x01,0xd7,0x00,0x00,0x23,0xd7,0x04,0x23,0x01,0xd7,0x00,0x00,0x22,0xd7, 88 | 0x04,0x23,0x01,0xd7,0x01,0xd7,0x00,0x00,0x01,0xd7,0x25,0x23,0x01,0xd7,0x01,0xd7, 89 | 0x00,0x00,0x01,0xd7,0x24,0x23,0x03,0xd7,0x00,0x00,0x01,0xd7,0x23,0x23,0x04,0xd7, 90 | 0x00,0x00,0x28,0xd7,0x00,0x00,0x28,0xd7,0x00,0x00,0x28,0xd7,0x00,0x00,0x28,0xd7, 91 | 0x00,0x00,0x28,0xd7,0x00,0x00,0x01,0xd7,0x19,0x23,0x0e,0xd7,0x00,0x00,0x01,0xd7, 92 | 0x1a,0x23,0x0d,0xd7,0x00,0x00,0x01,0xd7,0x1b,0x23,0x0c,0xd7,0x00,0x00,0x18,0xd7, 93 | 0x04,0x23,0x0c,0xd7,0x00,0x00,0x19,0xd7,0x04,0x23,0x0b,0xd7,0x00,0x00,0x1a,0xd7, 94 | 0x03,0x23,0x0b,0xd7,0x00,0x00,0x11,0xd7,0x03,0x23,0x06,0xd7,0x03,0x23,0x0b,0xd7, 95 | 0x00,0x00,0x11,0xd7,0x03,0x23,0x06,0xd7,0x03,0x23,0x0b,0xd7,0x00,0x00,0x11,0xd7, 96 | 0x04,0x23,0x04,0xd7,0x04,0x23,0x0b,0xd7,0x00,0x00,0x11,0xd7,0x0b,0x23,0x0c,0xd7, 97 | 0x00,0x00,0x12,0xd7,0x0a,0x23,0x0c,0xd7,0x00,0x00,0x13,0xd7,0x08,0x23,0x0d,0xd7, 98 | 0x00,0x00,0x15,0xd7,0x04,0x23,0x0f,0xd7,0x00,0x00,0x28,0xd7,0x00,0x01}; 99 | -------------------------------------------------------------------------------- /gif_example/gif_example.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #define GIF_NAME earth_128x128 4 | //#include "../test_images/nostromo.h" 5 | //#include "thisisfine_128x128.h" 6 | //#include "homer_car_240x135.h" 7 | //#include "hyperspace.h" 8 | //#include "bart_396x222.h" 9 | #include "earth_128x128.h" 10 | 11 | uint8_t *pFrameBuffer, *pTurboBuffer; 12 | bool bDMA; 13 | //#define T_S3_LONG 14 | //#define T_S3_PRO 15 | //#define CYD_28R 16 | //#define CYD_35C 17 | //#define CYD_128C 18 | //#define CYD_28C 19 | //#define CYD_24R 20 | //#define CYD_24C 21 | //#define CYD_22C 22 | //#define CYD_543R 23 | //#define CYD_543C 24 | //#define CYD_SC01 25 | 26 | #ifdef CYD_SC01 27 | #define TOUCH_CAPACITIVE 28 | #define LCD DISPLAY_WT32_SC01_PLUS 29 | #define TOUCH_SDA 6 30 | #define TOUCH_SCL 5 31 | #define TOUCH_INT 7 32 | #define TOUCH_RST -1 33 | #endif 34 | 35 | #ifdef CYD_22C 36 | //#define TOUCH_CAPACITIVE 37 | #define LCD DISPLAY_D1_R32_ILI9341 38 | //#define LCD DISPLAY_CYD_22C 39 | #define TOUCH_SDA -1 40 | #define TOUCH_SCL -1 41 | //#define TOUCH_SDA 21 42 | //#define TOUCH_SCL 22 43 | #define TOUCH_INT -1 44 | #define TOUCH_RST -1 45 | #endif 46 | 47 | #ifdef CYD_543C 48 | #define TOUCH_CAPACITIVE 49 | #define LCD DISPLAY_CYD_543 50 | #define TOUCH_SDA 8 51 | #define TOUCH_SCL 4 52 | #define TOUCH_INT 3 53 | #define TOUCH_RST 38 54 | #endif 55 | 56 | #ifdef CYD_543R 57 | #define TOUCH_RESISTIVE 58 | #define LCD DISPLAY_CYD_543 59 | #define TOUCH_MISO 13 60 | #define TOUCH_MOSI 11 61 | #define TOUCH_CLK 12 62 | #define TOUCH_CS 38 63 | #endif 64 | 65 | #ifdef CYD_24R 66 | #define TOUCH_RESISTIVE 67 | #define LCD DISPLAY_CYD_24R 68 | #endif 69 | 70 | #ifdef CYD_28R 71 | #define TOUCH_RESISTIVE 72 | #define LCD DISPLAY_CYD 73 | #endif 74 | 75 | #ifdef T_S3_LONG 76 | #define TOUCH_CAPACITIVE 77 | #define LCD DISPLAY_T_DISPLAY_S3_LONG 78 | #define TOUCH_SDA -1 79 | #define TOUCH_SCL -1 80 | #define TOUCH_INT -1 81 | #define TOUCH_RST -1 82 | #endif 83 | 84 | #ifdef T_S3_PRO 85 | #define TOUCH_CAPACITIVE 86 | #define LCD DISPLAY_T_DISPLAY_S3_PRO 87 | #define TOUCH_SDA 5 88 | #define TOUCH_SCL 6 89 | #define TOUCH_INT 21 90 | #define TOUCH_RST 13 91 | #endif 92 | 93 | #ifdef CYD_35C 94 | #define TOUCH_CAPACITIVE 95 | #define LCD DISPLAY_CYD_35 96 | #define TOUCH_SDA 33 97 | #define TOUCH_SCL 32 98 | #define TOUCH_INT 21 99 | #define TOUCH_RST 25 100 | #endif 101 | 102 | #if defined (CYD_28C) || defined (CYD_24C) 103 | // These defines are for a low cost 2.8" ESP32 LCD board with the GT911 touch controller 104 | #define TOUCH_CAPACITIVE 105 | #define TOUCH_SDA 33 106 | #define TOUCH_SCL 32 107 | #define TOUCH_INT 21 108 | #define TOUCH_RST 25 109 | #define LCD DISPLAY_CYD_28C 110 | #endif 111 | 112 | #ifdef CYD_128C 113 | // These defines are for a low cost 1.28" ESP32-C3 round LCD board with the CST816D touch controller 114 | #define TOUCH_CAPACITIVE 115 | #define TOUCH_SDA 4 116 | #define TOUCH_SCL 5 117 | #define TOUCH_INT 0 118 | #define TOUCH_RST 1 119 | #define QWIIC_SDA 21 120 | #define QWIIC_SCL 20 121 | #define LCD DISPLAY_CYD_128 122 | #endif 123 | AnimatedGIF gif; 124 | #ifdef TOUCH_CAPACITIVE 125 | #include 126 | BBCapTouch bbct; 127 | #endif 128 | BB_SPI_LCD lcd; 129 | int iOffX, iOffY; 130 | // 131 | // Draw callback from GIF decoder 132 | // 133 | // called once for each line of the current frame 134 | // MCUs with very little RAM would have to test for disposal methods, transparent pixels 135 | // and translate the 8-bit pixels through the palette to generate the final output. 136 | // The code for MCUs with enough RAM is much simpler because the AnimatedGIF library can 137 | // generate "cooked" pixels that are ready to send to the display 138 | // 139 | void GIFDraw(GIFDRAW *pDraw) 140 | { 141 | if (pDraw->y == 0) { // set the memory window when the first line is rendered 142 | lcd.setAddrWindow(iOffX + pDraw->iX, iOffY + pDraw->iY, pDraw->iWidth, pDraw->iHeight); 143 | } 144 | // For all other lines, just push the pixels to the display 145 | lcd.pushPixels((uint16_t *)pDraw->pPixels, pDraw->iWidth, (bDMA) ? DRAW_TO_LCD | DRAW_WITH_DMA : DRAW_TO_LCD); 146 | } /* GIFDraw() */ 147 | 148 | void setup() { 149 | Serial.begin(115200); 150 | // delay(3000); 151 | Serial.println("Starting"); 152 | gif.begin(BIG_ENDIAN_PIXELS); 153 | lcd.begin(DISPLAY_LOLIN_S3_MINI_PRO); //LCD); 154 | Serial.println("LCD started"); 155 | lcd.fillScreen(TFT_BLACK); 156 | lcd.setTextColor(TFT_GREEN, TFT_BLACK); 157 | lcd.setFont(FONT_8x8); 158 | //lcd.setCursor(0, 0); 159 | lcd.println("GIF + Touch Test"); 160 | lcd.println("Touch to pause/unpause"); 161 | Serial.println("GIF + Touch Test"); 162 | #ifdef TOUCH_CAPACITIVE 163 | bbct.init(TOUCH_SDA, TOUCH_SCL, TOUCH_RST, TOUCH_INT); 164 | #endif 165 | #ifdef TOUCH_RESISTIVE 166 | lcd.rtInit(); 167 | #endif 168 | } /* setup() */ 169 | 170 | void CheckTouch(void) 171 | { 172 | TOUCHINFO ti; 173 | #ifdef TOUCH_CAPACITIVE 174 | if (bbct.getSamples(&ti) && ti.count >= 1) { // a touch event 175 | delay(500); 176 | bbct.getSamples(&ti); // get release event 177 | while (!bbct.getSamples(&ti)) {}; 178 | delay(50); 179 | bbct.getSamples(&ti); // get release event 180 | } 181 | #endif 182 | #ifdef TOUCH_RESISTIVE 183 | if (lcd.rtReadTouch(&ti) && ti.count >= 1) { 184 | delay(500); 185 | while (!lcd.rtReadTouch(&ti)) {}; 186 | delay(50); 187 | } // while 1 188 | #endif 189 | } /* CheckTouch() */ 190 | 191 | void loop() { 192 | int w, h, iFPS1, iFPS2; 193 | long l; 194 | if (gif.open((uint8_t *)GIF_NAME, sizeof(GIF_NAME), GIFDraw)) { 195 | w = gif.getCanvasWidth(); 196 | h = gif.getCanvasHeight(); 197 | iOffX = (lcd.width() - w)/2; 198 | iOffY = (lcd.height() - h)/2; 199 | lcd.printf("Canvas size: %dx%d\n", w, h); 200 | lcd.printf("Loop count: %d\n", gif.getLoopCount()); 201 | delay(3000); 202 | lcd.fillScreen(TFT_BLACK); 203 | // Serial.printf("Successfully opened GIF; Canvas size = %d x %d\n", w, h); 204 | #ifdef ARDUINO_ARCH_ESP32 205 | pFrameBuffer = (uint8_t *)heap_caps_malloc(w*(h+2), MALLOC_CAP_8BIT); 206 | #else 207 | pFrameBuffer = (uint8_t *)malloc(w*(h+2)); 208 | #endif 209 | while (1) { 210 | int iFrame = 0; 211 | gif.setDrawType(GIF_DRAW_COOKED); // we want the library to generate ready-made pixels 212 | gif.setFrameBuf(pFrameBuffer); 213 | bDMA = false; 214 | l = millis(); 215 | for (int i=0; i<4; i++) { // run it 4 times 216 | while (gif.playFrame(false, NULL)) { 217 | // CheckTouch(); 218 | iFrame++; 219 | } 220 | gif.reset(); 221 | } // for i 222 | l = millis() - l; 223 | iFPS1 = ((iFrame*1000)/l); 224 | // test with DMA enabled 225 | bDMA = true; 226 | iFrame = 0; 227 | l = millis(); 228 | for (int i=0; i<4; i++) { // run it 4 times 229 | while (gif.playFrame(false, NULL)) { 230 | // CheckTouch(); 231 | iFrame++; 232 | } 233 | gif.reset(); 234 | } // for i 235 | l = millis() - l; 236 | iFPS2 = ((iFrame*1000)/l); 237 | lcd.setCursor(0,0); 238 | if (lcd.width() < 240) { 239 | lcd.setFont(FONT_8x8); 240 | } else { 241 | lcd.setFont(FONT_12x16); 242 | } 243 | lcd.printf("W/O DMA: %d fps\n", iFPS1); 244 | lcd.printf("W/ DMA: %d fps\n", iFPS2); 245 | delay(10000); 246 | lcd.fillScreen(TFT_BLACK); 247 | } // while (1) 248 | } // gif open 249 | } /* loop() */ 250 | -------------------------------------------------------------------------------- /gif_from_sd/gif_from_sd.ino: -------------------------------------------------------------------------------- 1 | // 2 | // This example shows how to play an animated GIF file 3 | // from the built-in uSD slot of the CYD 4 | // 5 | #include // https://github.com/bitbank2/bb_spi_lcd.git 6 | #include // https://github.com/bitbank2/AnimatedGIF.git 7 | #include 8 | #include 9 | 10 | uint8_t *pFrameBuffer, *pTurboBuffer; 11 | bool bDMA; 12 | 13 | AnimatedGIF gif; 14 | BB_SPI_LCD lcd; 15 | SPIClass SD_SPI; 16 | int iOffX, iOffY; 17 | 18 | // GPIO pin assignments specifically for the CYD 2USB model 19 | // check your model if different 20 | #define SD_MOSI 23 21 | #define SD_MISO 19 22 | #define SD_SCK 18 23 | #define SD_CS 5 24 | 25 | // Change this to the file you would like to display 26 | #define gif_filename "/earth_128x128.gif" 27 | // 28 | // Draw callback from GIF decoder 29 | // 30 | // called once for each line of the current frame 31 | // MCUs with very little RAM would have to test for disposal methods, transparent pixels 32 | // and translate the 8-bit pixels through the palette to generate the final output. 33 | // The code for MCUs with enough RAM is much simpler because the AnimatedGIF library can 34 | // generate "cooked" pixels that are ready to send to the display 35 | // 36 | void GIFDraw(GIFDRAW *pDraw) 37 | { 38 | if (pDraw->y == 0) { // set the memory window when the first line is rendered 39 | lcd.setAddrWindow(iOffX + pDraw->iX, iOffY + pDraw->iY, pDraw->iWidth, pDraw->iHeight); 40 | } 41 | // For all other lines, just push the pixels to the display 42 | lcd.pushPixels((uint16_t *)pDraw->pPixels, pDraw->iWidth, (bDMA) ? DRAW_TO_LCD | DRAW_WITH_DMA : DRAW_TO_LCD); 43 | } /* GIFDraw() */ 44 | 45 | File file; 46 | 47 | // Callback functions to access a file on the SD card 48 | void *myOpen(const char *filename, int32_t *size) { 49 | file = SD.open(filename); 50 | if (file) { 51 | *size = file.size(); 52 | } 53 | return (void *)&file; 54 | } 55 | 56 | void myClose(void *pHandle) { 57 | File *f = static_cast(pHandle); 58 | if (f != NULL) 59 | f->close(); 60 | } 61 | 62 | int32_t myRead(GIFFILE *pFile, uint8_t *buffer, int32_t length) { 63 | // File *f = (File *)pFile->fHandle; 64 | // return f->read(buffer, length); 65 | int32_t iBytesRead; 66 | iBytesRead = length; 67 | File *f = static_cast(pFile->fHandle); 68 | // Note: If you read a file all the way to the last byte, seek() stops working 69 | if ((pFile->iSize - pFile->iPos) < length) 70 | iBytesRead = pFile->iSize - pFile->iPos - 1; // <-- ugly work-around 71 | if (iBytesRead <= 0) 72 | return 0; 73 | iBytesRead = (int32_t)f->read(buffer, iBytesRead); 74 | pFile->iPos = f->position(); 75 | return iBytesRead; 76 | } 77 | 78 | int32_t mySeek(GIFFILE *pFile, int32_t iPosition) 79 | { 80 | // int i = micros(); 81 | File *f = static_cast(pFile->fHandle); 82 | f->seek(iPosition); 83 | pFile->iPos = (int32_t)f->position(); 84 | // i = micros() - i; 85 | // Serial.printf("Seek time = %d us\n", i); 86 | return pFile->iPos; 87 | } /* GIFSeekFile() */ 88 | 89 | void setup() { 90 | gif.begin(BIG_ENDIAN_PIXELS); 91 | lcd.begin(DISPLAY_CYD_2USB); 92 | lcd.fillScreen(TFT_BLACK); 93 | lcd.setTextColor(TFT_GREEN, TFT_BLACK); 94 | lcd.setFont(FONT_8x8); 95 | lcd.setCursor(0, 0); 96 | lcd.println("GIF from SD Test"); 97 | SD_SPI.begin(SD_SCK, SD_MISO, SD_MOSI, SD_CS); 98 | if (!SD.begin(SD_CS, SD_SPI, 10000000)) { // Faster than 10MHz seems to fail on the CYDs 99 | lcd.println("Card Mount Failed"); 100 | while (1) {}; 101 | } else { 102 | lcd.println("Card Mount Succeeded"); 103 | } 104 | } /* setup() */ 105 | 106 | void loop() { 107 | int w, h, iFPS1, iFPS2; 108 | long l; 109 | if (gif.open(gif_filename, myOpen, myClose, myRead, mySeek, GIFDraw)) { 110 | w = gif.getCanvasWidth(); 111 | h = gif.getCanvasHeight(); 112 | iOffX = (lcd.width() - w)/2; 113 | iOffY = (lcd.height() - h)/2; 114 | lcd.printf("Canvas size: %dx%d\n", w, h); 115 | lcd.printf("Loop count: %d\n", gif.getLoopCount()); 116 | delay(3000); 117 | lcd.fillScreen(TFT_BLACK); 118 | // Serial.printf("Successfully opened GIF; Canvas size = %d x %d\n", w, h); 119 | #ifdef ARDUINO_ARCH_ESP32 120 | pFrameBuffer = (uint8_t *)heap_caps_malloc(w*(h+2), MALLOC_CAP_8BIT); 121 | #else 122 | pFrameBuffer = (uint8_t *)malloc(w*(h+2)); 123 | #endif 124 | while (1) { 125 | int iFrame = 0; 126 | gif.setDrawType(GIF_DRAW_COOKED); // we want the library to generate ready-made pixels 127 | gif.setFrameBuf(pFrameBuffer); 128 | bDMA = false; 129 | l = millis(); 130 | for (int i=0; i<4; i++) { // run it 4 times 131 | while (gif.playFrame(false, NULL)) { 132 | iFrame++; 133 | } 134 | gif.reset(); 135 | } // for i 136 | l = millis() - l; 137 | iFPS1 = ((iFrame*1000)/l); 138 | // test with DMA enabled 139 | bDMA = true; 140 | iFrame = 0; 141 | l = millis(); 142 | for (int i=0; i<4; i++) { // run it 4 times 143 | while (gif.playFrame(false, NULL)) { 144 | iFrame++; 145 | } 146 | gif.reset(); 147 | } // for i 148 | l = millis() - l; 149 | iFPS2 = ((iFrame*1000)/l); 150 | lcd.setCursor(0,0); 151 | if (lcd.width() < 240) { 152 | lcd.setFont(FONT_8x8); 153 | } else { 154 | lcd.setFont(FONT_12x16); 155 | } 156 | lcd.printf("W/O DMA: %d fps\n", iFPS1); 157 | lcd.printf("W/ DMA: %d fps\n", iFPS2); 158 | delay(10000); 159 | lcd.fillScreen(TFT_BLACK); 160 | } // while (1) 161 | } else { // gif open 162 | lcd.print("Error opening GIF file"); 163 | while (1) {}; 164 | } 165 | } /* loop() */ 166 | -------------------------------------------------------------------------------- /ip_camera_viewer/ip_camera_viewer.ino: -------------------------------------------------------------------------------- 1 | 2 | // 3 | // ESP32 IP camera stream viewer 4 | // 5 | // Written by Larry Bank (bitbank@pobox.com) 6 | // April 17, 2025 7 | // Some unsecured web cameras can provide a continuous stream of JPEG images. 8 | // This program is able to read from their streams and display the images 9 | // using the ESP32 HTTPClient and my JPEGDEC library 10 | // 11 | // Copyright 2025 BitBank Software, Inc. All Rights Reserved. 12 | // Licensed under the Apache License, Version 2.0 (the "License"); 13 | // you may not use this file except in compliance with the License. 14 | // You may obtain a copy of the License at 15 | // http://www.apache.org/licenses/LICENSE-2.0 16 | // Unless required by applicable law or agreed to in writing, software 17 | // distributed under the License is distributed on an "AS IS" BASIS, 18 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 | // See the License for the specific language governing permissions and 20 | // limitations under the License. 21 | //=========================================================================== 22 | #include 23 | #include 24 | #include 25 | #include 26 | BB_SPI_LCD lcd; 27 | JPEGDEC jpg; 28 | HTTPClient http; 29 | // 30 | // We can easily fit a decent quality 320x240 JPEG in 32k 31 | // and the older ESP32 can allocate 32k without running out of heap space 32 | // 33 | #define BUFFER_SIZE 32768 34 | uint8_t *pBuf; 35 | // Change these to access your local access point 36 | const char *SSID = "your_ssid"; 37 | const char *PW = "your_password"; 38 | // This is a sample URL - a dog care area somewhere in the Eastern USA 39 | const char *url = "http://173.165.152.129:8011/axis-cgi/mjpg/video.cgi?resolution=320x240&compression=60"; 40 | // 10 seconds WIFI connection timeout (1/2 second intervals) 41 | #define MAX_TIMEOUT 20 42 | // Define this to show the connection/download status in the serial terminal 43 | #define SHOW_DIAGNOSTICS 44 | // forward references 45 | void ShowFrame(uint8_t *pFrame, int iSize); 46 | // 47 | // Draw callback from JPEG decoder 48 | // 49 | // called multiple times with groups of MCUs (minimum coded units) 50 | // these are 8x8, 8x16, 16x8 or 16x16 blocks of pixels depending on the 51 | // color subsampling option of the JPEG image 52 | // Each call can have a large group (e.g. 128x16 pixels) 53 | // 54 | int JPEGDraw(JPEGDRAW *pDraw) 55 | { 56 | lcd.setAddrWindow(pDraw->x, pDraw->y, pDraw->iWidth, pDraw->iHeight); 57 | lcd.pushPixels((uint16_t *)pDraw->pPixels, pDraw->iWidth * pDraw->iHeight, DRAW_TO_LCD | DRAW_WITH_DMA); 58 | return 1; 59 | } /* JPEGDraw() */ 60 | 61 | // 62 | // Open an HTTP IP camera stream (JPEG only) with the given URL 63 | // This code will stay here, receiving images until the stream disconnects 64 | // 65 | void StreamVideo(const char *url) 66 | { 67 | int i, j, avail, httpCode; 68 | uint8_t c; 69 | int iCount, iPayloadSize; 70 | long l; 71 | bool bFound; 72 | WiFiClient * stream; 73 | char szTemp[256]; // to hold the http head we might need to parse manually 74 | #ifdef SHOW_DIAGNOSTICS 75 | Serial.printf("Sending GET request to %s\n", url); 76 | #endif 77 | http.begin(url); 78 | httpCode = http.GET(); //send GET request 79 | if (httpCode != 200) { 80 | #ifdef SHOW_DIAGNOSTICS 81 | Serial.print("Error on HTTP request: "); 82 | Serial.println(httpCode); 83 | #endif 84 | http.end(); 85 | return; 86 | } else { 87 | #ifdef SHOW_DIAGNOSTICS 88 | Serial.println("GET request succeeded (return code = 200)"); 89 | #endif 90 | stream = http.getStreamPtr(); 91 | while (http.connected()) { // keep reading the stream as long as we stay connecte 92 | i = j = 0; 93 | bFound = false; 94 | iPayloadSize = -1; 95 | vTaskDelay(2); // allow a little time for data to arrive 96 | find_header: 97 | while (i < sizeof(szTemp) && !bFound) { 98 | c = stream->read(); 99 | if (c == 0xff) { 100 | c = stream->peek(); 101 | if (c == 0xd8) { 102 | bFound = true; // found the start of the JPEG data 103 | } else { // we got out of sync, sift through the data until we get to an HTTP header 104 | i = 0; 105 | while (http.connected() && i == 0) { 106 | c = stream->read(); 107 | if (c == 0xff && stream->peek() == 0xd9) { // found the end of a frame 108 | i = 1; // break out of this loop 109 | stream->read(); // get rid of the 0xd9 110 | } 111 | } 112 | #ifdef SHOW_DIAGNOSTICS 113 | Serial.println("successfully resync'd with the feed"); 114 | #endif 115 | i = 0; 116 | } 117 | } else { 118 | szTemp[i++] = c; 119 | } 120 | } 121 | #ifdef SHOW_DIAGNOSTICS 122 | Serial.printf("Got http headers %d\n", i); 123 | #endif 124 | for (j=0; javailable() > 0) { 144 | if (iCount + avail > iPayloadSize) avail = iPayloadSize - iCount; // only read the JPEG payload here 145 | stream->readBytes(&pBuf[iCount], avail); 146 | iCount += avail; 147 | #ifdef SHOW_DIAGNOSTICS 148 | if ((iCount & 0xffff) == 0) { // show progress with a "." every 64k 149 | Serial.print("."); 150 | } 151 | #endif 152 | } else { 153 | vTaskDelay(2); // allow time for data to receive 154 | } 155 | } // while receiving the JPEG data 156 | #ifdef SHOW_DIAGNOSTICS 157 | l = millis() - l; 158 | Serial.printf("\nReceived all data in %d ms\n", (int)l); 159 | #endif 160 | ShowFrame(pBuf, iPayloadSize); // display the image 161 | } // while (connected) 162 | } // server returned 200 163 | } /* StreamVideo() */ 164 | 165 | // 166 | // Connect to a WiFi access point with the given ssid and password 167 | // returns TRUE for success, FALSE for failure 168 | // 169 | bool ConnectWiFi(const char *ssid, const char *password) { 170 | int iTimeout = 0; 171 | // Connect to wifi 172 | WiFi.begin(ssid, password); 173 | Serial.print("Connecting to wifi"); 174 | while (WiFi.status() != WL_CONNECTED && WiFi.status() != WL_CONNECT_FAILED && iTimeout < MAX_TIMEOUT) { 175 | delay(500); // allow up to 10 seconds to connect 176 | iTimeout++; 177 | Serial.print("."); 178 | } 179 | if (iTimeout == MAX_TIMEOUT) { 180 | return false; 181 | } 182 | return true; 183 | } /* ConnectWiFi() */ 184 | // 185 | // Display the current JPEG image 186 | // 187 | void ShowFrame(uint8_t *pFrame, int iSize) 188 | { 189 | int w, h, xoff, yoff; 190 | int iFlags = 0; 191 | 192 | if (jpg.openRAM(pFrame, iSize, JPEGDraw)) { // pass the data and its size 193 | jpg.setPixelType(RGB565_BIG_ENDIAN); // bb_spi_lcd uses big-endian RGB565 pixels 194 | // if the image is smaller than the LCD dimensions, center it 195 | w = jpg.getWidth(); 196 | h = jpg.getHeight(); 197 | #ifdef SHOW_DIAGNOSTICS 198 | Serial.printf("JPEG opened, w=%d, h=%d\n", w, h); 199 | #endif 200 | if (w > lcd.width()) { // scale it down 201 | iFlags = JPEG_SCALE_HALF; 202 | w /= 2; h /= 2; 203 | if (w > lcd.width()) { // still too big 204 | iFlags = JPEG_SCALE_QUARTER; 205 | w /= 2; h /= 2; 206 | } 207 | } 208 | xoff = (lcd.width() - w)/2; 209 | yoff = (lcd.height() - h)/2; 210 | if (jpg.decode(xoff,yoff,iFlags)) { // center the image and use the scaling option we selected 211 | Serial.println("Successfully decoded"); 212 | } else { 213 | Serial.printf("Last error: %d\n", jpg.getLastError()); 214 | } 215 | } else { // successfully opened the jpeg 216 | Serial.printf("JPEG failed, data: 0x%02x,0x%02x\n", pFrame[0], pFrame[1]); 217 | } 218 | } /* ShowFrame() */ 219 | 220 | void setup() { 221 | #ifdef SHOW_DIAGNOSTICS 222 | Serial.begin(115200); 223 | #endif 224 | // Set this to one of the more than 40 supported display types 225 | lcd.begin(DISPLAY_CYD_543); 226 | lcd.fillScreen(TFT_BLACK); 227 | lcd.setTextColor(TFT_GREEN); 228 | lcd.setFont(FONT_12x16); 229 | pBuf = (uint8_t *)malloc(BUFFER_SIZE); 230 | if (!pBuf) { 231 | lcd.setTextColor(TFT_RED); 232 | lcd.println("Memory alloc error!"); 233 | lcd.println("Halted"); 234 | while (1) { 235 | vTaskDelay(1); // halt here 236 | } 237 | } 238 | lcd.print("Traffic/Web cam Viewer"); 239 | } /* setup() */ 240 | 241 | void loop() { 242 | 243 | while (1) { 244 | // Re-connect if we lose the connection 245 | if (WiFi.status() != WL_CONNECTED) { // try to connect 246 | if (!ConnectWiFi(SSID, PW)) { 247 | lcd.fillScreen(TFT_BLACK); 248 | lcd.setTextColor(TFT_RED); 249 | lcd.println("WiFi failed, halting..."); 250 | lcd.println("Power off/reset"); 251 | lcd.println("To try again"); 252 | while (1) { 253 | vTaskDelay(1); 254 | } 255 | } // if connection failed 256 | lcd.println(" - Connected!"); 257 | } // if need to connect 258 | // Stream JPEG frames from the url, reconnects (goes around the loop again) if disconnected 259 | StreamVideo(url); // if it returns, it means that there was a stream error, so re-open it 260 | } // while (1) 261 | } /* loop() */ 262 | 263 | -------------------------------------------------------------------------------- /jpeg_example/jpeg_example.ino: -------------------------------------------------------------------------------- 1 | // 2 | // JPEG display example 3 | // written by Larry Bank (bitbank@pobox.com) 4 | // July 17, 2024 5 | // 6 | // This example demonstrates how to decode and display JPEG images 7 | // on the CYD LCD. This is the easiest scenario to use - the JPEG 8 | // data is compiled into the program FLASH memory and appears as 9 | // a single binary blob. It is certainly possible to provide the 10 | // JPEG data from SD card or Web or other sources by providing 11 | // the open, close, seek and read callback functions 12 | // See the Wiki for more info: https://github.com/bitbank2/JPEGDEC/wiki 13 | // 14 | #include 15 | #include 16 | #include "zebra.h" 17 | 18 | // Static instances of the 2 classes 19 | // These can be allocated dynamically too (e.g. *jpg = new JPEGDEC(); ) 20 | JPEGDEC jpg; 21 | BB_SPI_LCD lcd; 22 | // 23 | // Draw callback from JPEG decoder 24 | // 25 | // called multiple times with groups of MCUs (minimum coded units) 26 | // these are 8x8, 8x16, 16x8 or 16x16 blocks of pixels depending on the 27 | // color subsampling option of the JPEG image 28 | // Each call can have a large group (e.g. 128x16 pixels) 29 | // 30 | int JPEGDraw(JPEGDRAW *pDraw) 31 | { 32 | lcd.setAddrWindow(pDraw->x, pDraw->y, pDraw->iWidth, pDraw->iHeight); 33 | lcd.pushPixels((uint16_t *)pDraw->pPixels, pDraw->iWidth * pDraw->iHeight); 34 | return 1; 35 | } /* JPEGDraw() */ 36 | 37 | void setup() { 38 | int xoff, yoff; 39 | lcd.begin(DISPLAY_CYD_543); // set this to the correct display type for your board 40 | lcd.fillScreen(TFT_BLACK); 41 | lcd.setTextColor(TFT_GREEN, TFT_BLACK); 42 | lcd.setFont(FONT_12x16); 43 | lcd.println("JPEG Decoder Example"); 44 | lcd.println("Decode and center on LCD"); 45 | delay(3000); 46 | lcd.fillScreen(TFT_BLACK); 47 | if (jpg.openFLASH((uint8_t *)zebra, sizeof(zebra), JPEGDraw)) { // pass the data and its size 48 | jpg.setPixelType(RGB565_BIG_ENDIAN); // bb_spi_lcd uses big-endian RGB565 pixels 49 | // if the image is smaller than the LCD dimensions, center it 50 | xoff = (lcd.width() - jpg.getWidth())/2; 51 | yoff = (lcd.height() - jpg.getHeight())/2; 52 | jpg.decode(xoff,yoff,0); // center the image and no extra options (e.g. scaling) 53 | } 54 | } /* setup() */ 55 | 56 | void loop() { 57 | } /* loop() */ 58 | -------------------------------------------------------------------------------- /lcd_clock/humidity.h: -------------------------------------------------------------------------------- 1 | // Created with image_to_c 2 | // https://github.com/bitbank2/image_to_c 3 | // 4 | // humidity 5 | // Data size = 310 bytes 6 | // 7 | // OS/2 BMP, Compression=None, Size: 32 x 41, 1-Bpp 8 | // 9 | // for non-Arduino builds... 10 | #ifndef PROGMEM 11 | #define PROGMEM 12 | #endif 13 | const uint8_t humidity[] PROGMEM = { 14 | 0x42,0x4d,0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x7c,0x00, 15 | 0x00,0x00,0x20,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00, 16 | 0x00,0x00,0xa4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00, 17 | 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00, 18 | 0x00,0x00,0x00,0x00,0x00,0xff,0x42,0x47,0x52,0x73,0x80,0xc2,0xf5,0x28,0x60,0xb8, 19 | 0x1e,0x15,0x20,0x85,0xeb,0x01,0x40,0x33,0x33,0x13,0x80,0x66,0x66,0x26,0x40,0x66, 20 | 0x66,0x06,0xa0,0x99,0x99,0x09,0x3c,0x0a,0xd7,0x03,0x24,0x5c,0x8f,0x32,0x00,0x00, 21 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00, 22 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x08,0x04,0x00,0xe6,0xea, 23 | 0xe7,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x7f,0xff,0xff,0xfc, 24 | 0x3f,0xff,0xff,0xf8,0x1f,0xff,0xff,0xf0,0x0f,0xff,0xff,0xe0,0x07,0xff,0xff,0xc0, 25 | 0x03,0xff,0xff,0x80,0x01,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xfe,0x00, 26 | 0x00,0x7f,0xfc,0x00,0x0e,0x3f,0xf8,0xf0,0x1e,0x3f,0xf9,0xf8,0x1c,0x1f,0xf3,0xfc, 27 | 0x3c,0x0f,0xf3,0x9c,0x38,0x0f,0xe3,0x9c,0x78,0x07,0xe3,0x9c,0x70,0x07,0xe3,0x9c, 28 | 0xf0,0x07,0xc3,0x9c,0xe0,0x03,0xc3,0xfc,0xe0,0x03,0xc1,0xf9,0xc0,0x03,0xc0,0xf1, 29 | 0xc7,0x83,0xc0,0x03,0xcf,0xc3,0xc0,0x03,0x9f,0xe3,0xc0,0x07,0x9c,0xe3,0xc0,0x07, 30 | 0x1c,0xe3,0xc0,0x0f,0x1c,0xe3,0xc0,0x0e,0x1c,0xe3,0xe0,0x1e,0x1c,0xe7,0xe0,0x1c, 31 | 0x1f,0xe7,0xf0,0x1c,0x0f,0xcf,0xf0,0x38,0x07,0x8f,0xf8,0x38,0x00,0x1f,0xfc,0x00, 32 | 0x00,0x3f,0xfe,0x00,0x00,0x7f,0xff,0x80,0x01,0xff,0xff,0xe0,0x07,0xff,0xff,0xff, 33 | 0xff,0xff,0xff,0xff,0xff,0xff}; 34 | -------------------------------------------------------------------------------- /lcd_clock/lcd_clock.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "humidity.h" 5 | #include "temp_bw.h" 6 | 7 | // Define display type 8 | // CYD (original 2.8" resistive touch) 9 | #define CYD 0 10 | // CYD_543R (JC4827W543 w/resistive touch) 11 | #define CYD_543R 1 12 | // CYD_543C (JC4827W543 w/capacitive touch) 13 | #define CYD_543C 2 14 | // WT32_SC01_PLUS 15 | #define WT32_SC01_PLUS 3 16 | // CYD_550C (JC8048W550 w/capacitive touch) 17 | #define CYD_550 4 18 | 19 | #define BOARD_TYPE CYD_543R 20 | #define TWELVE_HOUR 21 | #define FARENHEIT 22 | 23 | #if BOARD_TYPE == CYD_550 24 | #define LCD DISPLAY_CYD_8048 25 | #define SDA_PIN 17 26 | #define SCL_PIN 18 27 | #define ICON_X1 60 28 | #define ICON_X2 230 29 | #define TEMP_X 106 30 | #define CO2_X 268 31 | #define FONT Roboto_Thin100pt7b 32 | #define FONT_GLYPHS Roboto_Thin100pt7bGlyphs 33 | #include "Roboto_Thin100pt7b.h" 34 | #include "DejaVu_Sans_Mono_Bold_48.h" 35 | #define SMALL_FONT DejaVu_Sans_Mono_Bold_48 36 | const int iStartY = 160; 37 | #endif 38 | 39 | #if BOARD_TYPE == CYD_543R 40 | #define LCD DISPLAY_CYD_543 41 | #define SDA_PIN 17 42 | #define SCL_PIN 18 43 | #define ICON_X1 60 44 | #define ICON_X2 230 45 | #define TEMP_X 106 46 | #define CO2_X 268 47 | #define FONT Roboto_Thin100pt7b 48 | #define FONT_GLYPHS Roboto_Thin100pt7bGlyphs 49 | #include "Roboto_Thin100pt7b.h" 50 | #include "DejaVu_Sans_Mono_Bold_48.h" 51 | #define SMALL_FONT DejaVu_Sans_Mono_Bold_48 52 | const int iStartY = 160; 53 | #endif 54 | 55 | #if BOARD_TYPE == WT32_SC01_PLUS 56 | #define LCD DISPLAY_WT32_SC01_PLUS 57 | #define CAP_TOUCH 58 | #define CT_ORIENTATION 90 59 | #define CT_SDA 33 60 | #define CT_SCL 32 61 | #define CT_RST 25 62 | #define CT_INT -1 63 | #endif 64 | 65 | #if BOARD_TYPE == CYD_543C 66 | #define CAP_TOUCH 67 | #define CT_ORIENTATION 0 68 | #define CT_SDA 8 69 | #define CT_SCL 4 70 | #define CT_RST 38 71 | #define CT_INT 3 72 | #define LCD DISPLAY_CYD_543 73 | #define SDA_PIN 17 74 | #define SCL_PIN 18 75 | #define ICON_X1 60 76 | #define ICON_X2 230 77 | #define TEMP_X 106 78 | #define CO2_X 268 79 | #define FONT Roboto_Thin100pt7b 80 | #define FONT_GLYPHS Roboto_Thin100pt7bGlyphs 81 | #include "Roboto_Thin100pt7b.h" 82 | #include "DejaVu_Sans_Mono_Bold_48.h" 83 | #define SMALL_FONT DejaVu_Sans_Mono_Bold_48 84 | const int iStartY = 160; 85 | #endif 86 | 87 | #if BOARD_TYPE == CYD 88 | #define LCD DISPLAY_CYD 89 | #define SDA_PIN 27 90 | #define SCL_PIN 22 91 | #define ICON_X1 40 92 | #define ICON_X2 154 93 | #define TEMP_X 80 94 | #define CO2_X 190 95 | #define FONT Roboto_Thin66pt7b 96 | #define FONT_GLYPHS Roboto_Thin66pt7bGlyphs 97 | #include "Roboto_Thin66pt7b.h" 98 | #include "DejaVu_Sans_Mono_Bold_28.h" 99 | #define SMALL_FONT DejaVu_Sans_Mono_Bold_28 100 | const int iStartY = 104; 101 | #endif 102 | 103 | #ifdef CAP_TOUCH 104 | #include 105 | BBCapTouch bbct; 106 | #endif 107 | 108 | SCD41 mySensor; 109 | BBRTC rtc; 110 | TOUCHINFO ti; 111 | BB_SPI_LCD lcd; 112 | bool bHasCO2 = false; 113 | int iCharWidth, iColonWidth; 114 | int iStartX, iStarty; 115 | uint16_t usColor; 116 | struct tm myTime; 117 | 118 | #define NIGHT_COLOR TFT_YELLOW 119 | 120 | typedef struct button_tag 121 | { 122 | int x, y, w, h; 123 | uint16_t usColor; 124 | const char *label; 125 | } BUTTON; 126 | uint32_t ButtonState(BUTTON *pButtons, int iButtonCount); 127 | 128 | #define BUTTON_COUNT 2 129 | int iDigitPos[6]; 130 | 131 | #if BOARD_TYPE != CYD 132 | BUTTON buttons[BUTTON_COUNT] = { 133 | {0, 240, 200, 30, TFT_RED, "Set Time"}, 134 | {280, 240, 200, 30, TFT_RED, "Night Mode"} 135 | }; 136 | #else 137 | BUTTON buttons[BUTTON_COUNT] = { 138 | {0, 210, 140, 30, TFT_RED, "Set Time"}, 139 | {180, 210, 140, 30, TFT_RED, "Night Mode"} 140 | }; 141 | #endif 142 | 143 | void lightSleep(uint64_t time_in_ms) 144 | { 145 | esp_sleep_enable_timer_wakeup(time_in_ms * 1000L); 146 | esp_light_sleep_start(); 147 | } /* lightSleep() */ 148 | 149 | void SetTime(void) 150 | { 151 | char szTime[32]; 152 | uint32_t u32 = 0; 153 | int iTouch, iOldTouch = -1; 154 | //Serial.begin(115200); 155 | lcd.fillRect(0, 0, lcd.width(), iStartY+20, TFT_BLACK); 156 | rtc.getTime(&myTime); // Read the current time from the RTC into our time structure 157 | sprintf(szTime, "%02d:%02d", myTime.tm_hour, myTime.tm_min); 158 | lcd.setFreeFont(&FONT); 159 | lcd.setTextColor(TFT_CYAN, TFT_BLACK); 160 | lcd.drawString(szTime, iStartX, iStartY); // erase old character 161 | 162 | iTouch = -1; 163 | while (u32 != 1) { // loop until the user presses "Set Time" again 164 | u32 = ButtonState(buttons, BUTTON_COUNT); // read the touch sensor here 165 | if (ti.count >= 1 && ti.y[0] < iStartY) { 166 | if (ti.x[0] > iDigitPos[0] && ti.x[0] < iDigitPos[2]) { // change hour 167 | iTouch = ((ti.x[0] - iDigitPos[0])/iCharWidth); 168 | // Serial.printf("x = %d, digit = %d\n", ti.x[0], iTouch); 169 | } else if (ti.x[0] > iDigitPos[3] && ti.x[0] < (iDigitPos[4]+iCharWidth)) { // minutes 170 | iTouch = 3 + ((ti.x[0] - iDigitPos[3])/iCharWidth); 171 | // Serial.printf("x = %d, digit = %d\n", ti.x[0], iTouch); 172 | } 173 | } else { 174 | iTouch = -1; 175 | } 176 | if (iOldTouch == -1 && iTouch != -1) { // update 177 | // Serial.printf("change digit %d\n", iTouch); 178 | switch (iTouch) { 179 | case 0: // hours 10's 180 | myTime.tm_hour += 10; 181 | if (myTime.tm_hour > 23) { myTime.tm_hour -= 20;} 182 | break; 183 | case 1: // hours 1's 184 | myTime.tm_hour++; 185 | if (myTime.tm_hour > 23) { myTime.tm_hour -= 24;} 186 | break; 187 | case 3: // minutes 10's 188 | myTime.tm_min += 10; 189 | if (myTime.tm_min > 59) { myTime.tm_min -= 60;} 190 | break; 191 | case 4: // minutes 1's 192 | myTime.tm_min++; 193 | if (myTime.tm_min > 59) { myTime.tm_min -= 60;} 194 | break; 195 | } 196 | lcd.fillRect(0, 0, lcd.width(), iStartY+20, TFT_BLACK); 197 | sprintf(szTime, "%02d:%02d", myTime.tm_hour, myTime.tm_min); 198 | lcd.setTextColor(TFT_CYAN, TFT_BLACK); 199 | lcd.drawString(szTime, iStartX, iStartY); // erase old character 200 | } 201 | iOldTouch = iTouch; 202 | delay(50); // don't let the user touch things too quickly 203 | } // while (1) 204 | rtc.setTime(&myTime); // update the new info 205 | lcd.fillRect(0, 0, lcd.width(), iStartY+20, TFT_BLACK); 206 | } /* SetTime() */ 207 | 208 | void DrawButton(BUTTON *pButton) 209 | { 210 | int iLen; 211 | lcd.setFont(FONT_12x16); 212 | iLen = strlen(pButton->label) * 12; 213 | lcd.fillRoundRect(pButton->x, pButton->y, pButton->w, pButton->h, 8, pButton->usColor); 214 | lcd.setTextColor(TFT_BLACK, pButton->usColor); 215 | lcd.drawString(pButton->label, pButton->x + (pButton->w - iLen)/2, pButton->y + (pButton->h-16)/2); 216 | } /* DrawButton() */ 217 | 218 | uint32_t ButtonState(BUTTON *pButtons, int iButtonCount) 219 | { 220 | int i; 221 | static uint32_t u32OldButtons = 0; 222 | uint32_t u32, u32Buttons = 0; 223 | 224 | #ifdef CAP_TOUCH 225 | bbct.getSamples(&ti); 226 | #else 227 | lcd.rtReadTouch(&ti); 228 | #endif 229 | if (ti.count >= 1) { 230 | for (i=0; i= pButtons[i].x && ti.x[0] < pButtons[i].x + pButtons[i].w && 232 | ti.y[0] >= pButtons[i].y && ti.y[0] < pButtons[i].y + pButtons[i].h) { 233 | u32Buttons |= (1 << i); // mark this button as being pressed 234 | } 235 | } // for i 236 | } // if touch event 237 | u32 = (u32Buttons ^ u32OldButtons) & u32Buttons; // newly pressed buttons return true 238 | u32OldButtons = u32Buttons; 239 | return u32; 240 | } /* ButtonState() */ 241 | 242 | void setup() 243 | { 244 | // Serial.begin(115200); 245 | rtc.init(SDA_PIN, SCL_PIN, 0); 246 | if (rtc.getType() == RTC_RV3032) { 247 | rtc.setVBackup(true); // turn on the charge pump for a capacitor to hold the time during power down 248 | } 249 | lcd.begin(LCD); 250 | #ifdef CAP_TOUCH 251 | bbct.init(CT_SDA, CT_SCL, CT_RST, CT_INT); 252 | #if CT_ORIENTATION != 0 253 | bbct.setOrientation(CT_ORIENTATION, lcd.height(), lcd.width()); // angle, native width, native height 254 | #endif 255 | #else 256 | lcd.rtInit(); // start the resistive touch 257 | #endif 258 | lcd.fillScreen(TFT_BLACK); 259 | iCharWidth = FONT_GLYPHS['0' - ' '].xAdvance; 260 | iColonWidth = FONT_GLYPHS[':' - ' '].xAdvance; 261 | iStartX = (lcd.width() - (4*iCharWidth + iColonWidth))/2; 262 | iDigitPos[0] = iStartX; 263 | iDigitPos[1] = iStartX+iCharWidth; 264 | iDigitPos[2] = iStartX+iCharWidth*2; 265 | iDigitPos[3] = iStartX+iColonWidth + iCharWidth*2; 266 | iDigitPos[4] = iDigitPos[3] + iCharWidth; 267 | iDigitPos[5] = lcd.width(); 268 | 269 | if (mySensor.init(SDA_PIN, SCL_PIN, 1, 100000) == SCD41_SUCCESS) { 270 | // Serial.println("Found SCD41 sensor!"); 271 | mySensor.start(); // start sampling mode 272 | #ifdef FARENHEIT 273 | mySensor.setUnits(SCD41_UNIT_FARENHEIT); 274 | #endif 275 | bHasCO2 = true; 276 | } 277 | } /* setup() */ 278 | 279 | void loop() 280 | { 281 | char szTemp[2], szTime[32], szOld[32]; 282 | uint8_t ucTemp[256]; 283 | int i, iTick; 284 | uint32_t u32Buttons; 285 | bool bNightMode = false; 286 | int H, T, CO2, iOldH, iOldT, iOldCO2; 287 | 288 | strcpy(szOld, " "); 289 | 290 | for (i=0; i 12) myTime.tm_hour -= 12; 298 | else if (myTime.tm_hour == 0) myTime.tm_hour = 12; 299 | #endif 300 | sprintf(szTime, "%02d:%02d", myTime.tm_hour, myTime.tm_min); 301 | if ((iTick & 0x1f) < 0x10) { // flash the colon 302 | szTime[2] = ' '; 303 | } 304 | if (strcmp(szTime, szOld)) { // digit(s) changed, redraw them to minimize flicker 305 | szTemp[1] = 0; 306 | lcd.setFreeFont(&FONT); 307 | for (i=0; i<5; i++) { 308 | if (szTime[i] != szOld[i]) { 309 | szTemp[0] = szOld[i]; 310 | lcd.setTextColor(TFT_BLACK, TFT_BLACK+1); 311 | lcd.drawString(szTemp, iDigitPos[i], iStartY); // erase old character 312 | // draw new character 313 | if (i == 0 && szTime[0] == '0') continue; // skip leading 0 for hours 314 | lcd.setTextColor(usColor, TFT_BLACK); 315 | szTemp[0] = szTime[i]; 316 | lcd.drawString(szTemp, iDigitPos[i], iStartY); 317 | } // if needs redraw 318 | } // for i 319 | strcpy(szOld, szTime); 320 | } 321 | delay(33); 322 | iTick++; 323 | if (bHasCO2 && (iTick & 0x3f) == 0x3f) { 324 | // update environmental data 325 | for (i=0; i<4*41; i++) { 326 | ucTemp[i] = 255 - humidity[0x92 + i]; // inverted 327 | } 328 | lcd.drawPattern(ucTemp, 4, ICON_X1, iStartY+30, 32, 41, (bNightMode) ? NIGHT_COLOR : TFT_YELLOW, 31); 329 | for (i=0; i<4*40; i++) { 330 | ucTemp[i] = 255 - temp_bw[0x92 + i]; // inverted 331 | } 332 | lcd.drawPattern(ucTemp, 4, ICON_X2, iStartY+30, 26, 40, (bNightMode) ? NIGHT_COLOR : TFT_GREEN, 31); 333 | mySensor.getSample(); 334 | H = mySensor.humidity(); 335 | T = mySensor.temperature(); 336 | CO2 = mySensor.co2(); 337 | lcd.setFreeFont(&SMALL_FONT); 338 | if (H != iOldH) { 339 | iOldH = H; 340 | lcd.fillRect(0, iStartY+28, ICON_X1, 50, TFT_BLACK); 341 | lcd.setCursor(0, iStartY+68); 342 | lcd.setTextColor((bNightMode) ? NIGHT_COLOR : TFT_YELLOW, TFT_BLACK); 343 | lcd.print(H); 344 | } 345 | if (T != iOldT) { 346 | iOldT = T; 347 | lcd.fillRect(TEMP_X, iStartY+28, ICON_X2 - TEMP_X , 50, TFT_BLACK); 348 | lcd.setCursor(TEMP_X, iStartY+68); 349 | lcd.setTextColor((bNightMode) ? NIGHT_COLOR : TFT_GREEN, TFT_BLACK); 350 | lcd.printf("%d.%d", T/10, T % 10); 351 | } 352 | if (iOldCO2 != CO2) { 353 | iOldCO2 = CO2; 354 | lcd.fillRect(CO2_X, iStartY+28, lcd.width() - CO2_X, 50, TFT_BLACK); 355 | lcd.setCursor(CO2_X, iStartY+68); 356 | lcd.setTextColor((bNightMode) ? NIGHT_COLOR : TFT_CYAN, TFT_BLACK); 357 | lcd.printf("%dppm", CO2); 358 | } 359 | } 360 | u32Buttons = ButtonState(buttons, BUTTON_COUNT); 361 | if (u32Buttons & 2) { // night mode toggle 362 | bNightMode = !bNightMode; 363 | iOldH = iOldT = iOldCO2 = 0; // force immediate repaint 364 | strcpy(szOld, " "); // force a redraw 365 | lcd.setBrightness((bNightMode)? 2 : 255); 366 | } else if (u32Buttons & 1) { // set time 367 | SetTime(); 368 | strcpy(szOld, " "); // force a redraw 369 | } 370 | // lightSleep(1000); // update the time once every second 371 | } 372 | } /* loop() */ 373 | -------------------------------------------------------------------------------- /lcd_clock/temp_bw.h: -------------------------------------------------------------------------------- 1 | // Created with image_to_c 2 | // https://github.com/bitbank2/image_to_c 3 | // 4 | // temp_bw 5 | // Data size = 306 bytes 6 | // 7 | // OS/2 BMP, Compression=None, Size: 26 x 40, 1-Bpp 8 | // 9 | // for non-Arduino builds... 10 | #ifndef PROGMEM 11 | #define PROGMEM 12 | #endif 13 | const uint8_t temp_bw[] PROGMEM = { 14 | 0x42,0x4d,0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x7c,0x00, 15 | 0x00,0x00,0x1a,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00, 16 | 0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00, 17 | 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00, 18 | 0x00,0x00,0x00,0x00,0x00,0xff,0x42,0x47,0x52,0x73,0x80,0xc2,0xf5,0x28,0x60,0xb8, 19 | 0x1e,0x15,0x20,0x85,0xeb,0x01,0x40,0x33,0x33,0x13,0x80,0x66,0x66,0x26,0x40,0x66, 20 | 0x66,0x06,0xa0,0x99,0x99,0x09,0x3c,0x0a,0xd7,0x03,0x24,0x5c,0x8f,0x32,0x00,0x00, 21 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00, 22 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff, 23 | 0xff,0x00,0xff,0xff,0xff,0xc0,0xff,0x8f,0xff,0xc0,0xfe,0x03,0xff,0xc0,0xfc,0x71, 24 | 0xff,0xc0,0xfc,0xf9,0xff,0xc0,0xfc,0xf9,0xc0,0x40,0xfc,0xf9,0xc0,0x40,0xfc,0xf9, 25 | 0xff,0xc0,0xfc,0xf9,0xff,0xc0,0xfc,0xf9,0xff,0xc0,0xfc,0xf9,0xc0,0x40,0xfc,0xf9, 26 | 0xc0,0x40,0xfc,0xf9,0xff,0xc0,0xfc,0xf9,0xff,0xc0,0xfc,0xf9,0xc0,0x40,0xfc,0x89, 27 | 0xc0,0x40,0xfc,0x89,0xff,0xc0,0xfc,0x89,0xff,0xc0,0xfc,0x89,0xff,0xc0,0xfc,0x89, 28 | 0xe0,0x40,0xfc,0x89,0xe0,0x40,0xfc,0x89,0xff,0xc0,0xf8,0x88,0xff,0xc0,0xf3,0x8e, 29 | 0x7f,0xc0,0xe7,0x8f,0x3f,0xc0,0xce,0x03,0x9f,0xc0,0xcc,0x01,0x9f,0xc0,0x9c,0x01, 30 | 0xcf,0xc0,0x98,0x00,0xcf,0xc0,0x98,0x00,0xcf,0xc0,0x98,0x00,0xcf,0xc0,0x98,0x00, 31 | 0xcf,0xc0,0x9c,0x01,0xcf,0xc0,0xcc,0x01,0x9f,0xc0,0xc6,0x03,0x1f,0xc0,0xe3,0x8f, 32 | 0x3f,0xc0,0xf1,0xfc,0x7f,0xc0,0xf8,0x00,0xff,0xc0,0xfe,0x03,0xff,0xc0,0xff,0xff, 33 | 0xff,0xc0}; 34 | -------------------------------------------------------------------------------- /scrolling_terminal/scrolling_terminal.ino: -------------------------------------------------------------------------------- 1 | // 2 | // Hardware Scrolling Terminal 3 | // written by Larry Bank 4 | // 5 | // This sketch implements a simple serial terminal 6 | // and uses hardware scrolling of the LCD when the text 7 | // reaches the bottom line. 8 | // 9 | #include 10 | BB_SPI_LCD lcd; 11 | int iCol, iRow, iCols, iRows; 12 | int iScroll = 0; 13 | 14 | //#define CYD_543 15 | #define SHOW_CURSOR 16 | int iCursor = 0; // current cursor state - 0=not visible, 1=visible 17 | #ifdef CYD_543 18 | #define LCD DISPLAY_CYD_543 19 | #define FONT FONT_12x16 20 | #define CHAR_WIDTH 12 21 | #define CHAR_HEIGHT 16 22 | #else // original CYD 23 | #define LCD DISPLAY_CYD 24 | #define ORIENTATION 0 25 | #define FONT FONT_8x8 26 | #define CHAR_WIDTH 8 27 | #define CHAR_HEIGHT 8 28 | #endif 29 | 30 | void ScrollOneLine(void) 31 | { 32 | // Erase rectangle where the new text will be written 33 | lcd.setCursor(iCol * CHAR_WIDTH, iScroll); // new text will be drawn here 34 | lcd.fillRect(0, iScroll, lcd.width(), CHAR_HEIGHT, TFT_BLACK); 35 | iScroll += CHAR_HEIGHT; 36 | iScroll %= lcd.height(); 37 | lcd.setScrollPosition(iScroll); 38 | } /* ScrollOneLine() */ 39 | 40 | void DrawCursor(int iShow) 41 | { 42 | lcd.fillRect(iCol * CHAR_WIDTH, (iScroll + (iRow * CHAR_HEIGHT)) % lcd.height(), CHAR_WIDTH, CHAR_HEIGHT, (iShow) ? TFT_WHITE : TFT_BLACK); 43 | } 44 | void setup() { 45 | lcd.begin(LCD); 46 | #ifdef ORIENTATION 47 | lcd.setRotation(ORIENTATION); 48 | #endif 49 | lcd.fillScreen(TFT_BLACK); 50 | iCols = lcd.width() / CHAR_WIDTH; 51 | iRows = lcd.height() / CHAR_HEIGHT; 52 | iCol = 0; iRow = 5; 53 | lcd.setFont(FONT); // use a large font 54 | lcd.setTextColor(TFT_GREEN, TFT_BLACK); 55 | lcd.println("Scrolling Serial Terminal Demo"); 56 | lcd.printf("%dx%d with the %dx%d font\n", iCols, iRows, CHAR_WIDTH, CHAR_HEIGHT); 57 | lcd.println("by Larry Bank"); 58 | lcd.println("Waiting for serial connection"); 59 | lcd.println("Config: 115200 baud, 8N1, CRLF"); 60 | lcd.setTextColor(TFT_WHITE, TFT_BLACK); 61 | Serial.begin(115200); 62 | } 63 | 64 | void loop() { 65 | char cOld, c, cTemp[4]; 66 | int iTick = 0; 67 | 68 | cTemp[1] = 0; // used for 1 character "strings" 69 | cOld = 0; // last character 70 | while (1) { 71 | if (!Serial.available()) { 72 | #ifdef SHOW_CURSOR 73 | delay(1); 74 | iTick++; 75 | if ((iTick & 0x1ff) == 0) { // blink cursor 76 | iCursor = 1-iCursor; 77 | DrawCursor(iCursor); 78 | } 79 | #endif // SHOW_CURSOR 80 | continue; 81 | } 82 | if (iCursor) { // erase old cursor position 83 | iCursor = 0; 84 | DrawCursor(iCursor); 85 | } 86 | c = Serial.read(); // read a single byte from the serial port 87 | if (c >= ' ') { // printable character 88 | if (iCol == iCols) { // next line 89 | iCol = 0; 90 | if (iRow < iRows-1) { 91 | iRow++; 92 | lcd.print("\n\r"); 93 | } else { 94 | ScrollOneLine(); 95 | } 96 | } 97 | cTemp[0] = c; 98 | lcd.print(cTemp); 99 | iCol++; 100 | } else { // control characters (CR / LF or CR+LF) 101 | if (c == 0xd || (c == 0xa && cOld != 0xd)) { 102 | iCol = 0; // carriage return 103 | if (iRow < iRows-1) { 104 | lcd.print("\n\r"); 105 | iRow++; 106 | } else { 107 | ScrollOneLine(); 108 | } 109 | } else if (c == 0x8) { // backspace 110 | if (iCol) { 111 | iCol--; 112 | lcd.setCursor(iCol * CHAR_WIDTH, -1); 113 | } 114 | } 115 | } 116 | cOld = c; 117 | } // while 118 | } /* loop() */ 119 | -------------------------------------------------------------------------------- /sound_board/sound_board.ino: -------------------------------------------------------------------------------- 1 | // 2 | // Sound board for ESP32-S3 and ESP32 3 | // requires Arduino ESP32 support 3.0.0 or higher 4 | // Written by Larry Bank 5 | // Copyright (c) 2024 BitBank Software, Inc. 6 | // 7 | 8 | // Define the board you're using here (only 1) 9 | // 10 | // Define this macro to configure for the JC4827W543 11 | //#define CYD_543 12 | // Define this macro to configure for the ESP32-2432022 (cap touch) 13 | //#define CYD_22C 14 | // Define this macro for the WT32_SC01_Plus board 15 | //#define CYD_WT32 16 | // Define this macro for the original CYD 17 | #define CYD 18 | // Define this macro for the 2-USB 2.8" CYD 19 | //#define CYD_2USB 20 | 21 | #include 22 | // 11Khz 8-bit WAV files 23 | #include "doh.h" 24 | #include "sorry_dave.h" 25 | #include "pacman_death.h" 26 | #include "looking.h" 27 | 28 | const uint8_t *sound_data[4] = {doh, pacman_death, looking, sorry_dave}; 29 | size_t sound_len[4] = {sizeof(doh), sizeof(pacman_death), sizeof(looking), sizeof(sorry_dave)}; 30 | 31 | #ifdef CYD 32 | #define ESP32_OLD 33 | #define LCD DISPLAY_CYD 34 | #endif 35 | 36 | #ifdef CYD_2USB 37 | #define ESP32_OLD 38 | #define LCD DISPLAY_CYD_2USB 39 | #endif 40 | 41 | #ifdef CYD_543 42 | #define LCD DISPLAY_CYD_543 43 | #define EXAMPLE_STD_BCLK GPIO_NUM_42 // I2S bit clock io number 44 | #define EXAMPLE_STD_WS GPIO_NUM_2 // I2S word select io number 45 | #define EXAMPLE_STD_DOUT GPIO_NUM_41 // I2S data out io number 46 | #endif 47 | 48 | #ifdef CYD_22C 49 | #define CAP_TOUCH 50 | #define ESP32_OLD 51 | #define LCD DISPLAY_CYD_22C 52 | #define AUDIO_PIN 26 53 | #define TOUCH_SDA 21 54 | #define TOUCH_SCL 22 55 | #define TOUCH_INT 23 56 | #define TOUCH_RST -1 57 | #endif 58 | 59 | #ifdef CYD_WT32 60 | #define CAP_TOUCH 61 | // WT32-SC01 Plus 62 | #define LCD DISPLAY_WT32_SC01_PLUS 63 | #define EXAMPLE_STD_BCLK GPIO_NUM_36 // I2S bit clock io number 64 | #define EXAMPLE_STD_WS GPIO_NUM_35 // I2S word select io number 65 | #define EXAMPLE_STD_DOUT GPIO_NUM_37 // I2S data out io number 66 | #define TOUCH_SDA 6 67 | #define TOUCH_SCL 5 68 | #define TOUCH_INT 7 69 | #define TOUCH_RST -1 70 | #endif 71 | 72 | #ifdef CAP_TOUCH 73 | #include 74 | BBCapTouch bbct; 75 | #endif 76 | 77 | BB_SPI_LCD lcd; 78 | int iWidth, iHeight; 79 | 80 | #ifdef ESP32_OLD 81 | #include "driver/i2s.h" 82 | #else 83 | #include "driver/i2s_std.h" 84 | static i2s_chan_handle_t tx_chan; // I2S tx channel handler 85 | #endif 86 | 87 | #define EXAMPLE_STD_DIN I2S_GPIO_UNUSED // I2S data in io number 88 | 89 | #define EXAMPLE_BUFF_SIZE 2048 90 | 91 | #ifdef ESP32_OLD 92 | int vol_shift = 5; 93 | #else 94 | int vol_shift = 4; 95 | #endif 96 | 97 | #define CCCC(c1, c2, c3, c4) ((c4 << 24) | (c3 << 16) | (c2 << 8) | c1) 98 | 99 | /* these are data structures to process wav file */ 100 | typedef enum headerState_e { 101 | HEADER_RIFF, HEADER_FMT, HEADER_DATA, DATA 102 | } headerState_t; 103 | 104 | typedef struct wavRiff_s { 105 | uint32_t chunkID; 106 | uint32_t chunkSize; 107 | uint32_t format; 108 | } wavRiff_t; 109 | typedef struct wavProperties_s { 110 | uint32_t chunkID; 111 | uint32_t chunkSize; 112 | uint16_t audioFormat; 113 | uint16_t numChannels; 114 | uint32_t sampleRate; 115 | uint32_t byteRate; 116 | uint16_t blockAlign; 117 | uint16_t bitsPerSample; 118 | } wavProperties_t; 119 | headerState_t state = HEADER_RIFF; 120 | wavProperties_t wavProps; 121 | 122 | /* write sample data to I2S */ 123 | void i2s_write_sample_nb(uint8_t sample){ 124 | uint16_t sample16 = (sample << vol_shift); 125 | size_t bytes_written; 126 | 127 | #ifdef ESP32_OLD 128 | i2s_write(I2S_NUM_0, &sample16, 2, &bytes_written, portMAX_DELAY); 129 | i2s_write(I2S_NUM_0, &sample16, 2, &bytes_written, portMAX_DELAY); 130 | #else 131 | // return i2s_write_bytes((i2s_port_t)i2s_num, (const char *)&sample, sizeof(uint8_t), 100); 132 | i2s_channel_write(tx_chan, &sample16, 2, &bytes_written, 100); 133 | #endif 134 | } 135 | 136 | void PlaySound(const uint8_t *pSound, int iLen) 137 | { 138 | int c = 0; 139 | int n; 140 | /* Play wav file */ 141 | const uint8_t *pEnd = &pSound[iLen]; 142 | 143 | state = HEADER_RIFF; 144 | 145 | while (pSound < pEnd) { 146 | switch(state){ 147 | case HEADER_RIFF: 148 | wavRiff_t wavRiff; 149 | /* these are function to process wav file */ 150 | memcpy(&wavRiff, pSound, sizeof(wavRiff_t)); 151 | pSound += sizeof(wavRiff_t); 152 | if(wavRiff.chunkID == CCCC('R', 'I', 'F', 'F') && wavRiff.format == CCCC('W', 'A', 'V', 'E')){ 153 | state = HEADER_FMT; 154 | //Serial.println("HEADER_RIFF"); 155 | } 156 | break; 157 | case HEADER_FMT: 158 | memcpy(&wavProps, pSound, sizeof(wavProperties_t)); 159 | pSound += sizeof(wavProperties_t); 160 | state = HEADER_DATA; 161 | //i2s_set_sample_rates(I2S_NUM_0, wavProps.sampleRate); 162 | //Serial.printf("Setting sample rate to %d\n", wavProps.sampleRate); 163 | break; 164 | case HEADER_DATA: 165 | uint32_t chunkId, chunkSize; 166 | memcpy(&chunkId, pSound, 4); 167 | pSound += 4; 168 | if(chunkId == CCCC('d', 'a', 't', 'a')){ 169 | //Serial.println("HEADER_DATA"); 170 | } 171 | memcpy(&chunkSize, pSound, 4); 172 | pSound += 4; 173 | //Serial.println("prepare data"); 174 | state = DATA; 175 | /* after processing wav file, it is time to process music data */ 176 | break; 177 | case DATA: 178 | uint8_t data; 179 | data = *pSound++; 180 | i2s_write_sample_nb(data); 181 | break; 182 | } 183 | } 184 | //Serial.println("done!"); 185 | } /* PlaySound() */ 186 | 187 | void i2sInit(void) 188 | { 189 | #ifdef ESP32_OLD 190 | i2s_config_t i2s_config = { 191 | .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN), 192 | .sample_rate = 11000, 193 | .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT, /* the DAC module will only take the 8bits from MSB */ 194 | .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT, 195 | .communication_format = (i2s_comm_format_t)I2S_COMM_FORMAT_I2S_MSB, 196 | .intr_alloc_flags = 0, // default interrupt priority 197 | .dma_buf_count = 8, 198 | .dma_buf_len = 64, 199 | .use_apll = 1 200 | }; 201 | //initialize i2s with configurations above 202 | i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL); 203 | i2s_set_pin(I2S_NUM_0, NULL); 204 | //set sample rates of i2s to sample rate of wav file 205 | i2s_set_sample_rates(I2S_NUM_0, 11000); 206 | #else 207 | i2s_chan_config_t tx_chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_AUTO, I2S_ROLE_MASTER); 208 | ESP_ERROR_CHECK(i2s_new_channel(&tx_chan_cfg, &tx_chan, NULL)); 209 | 210 | i2s_std_config_t tx_std_cfg = { 211 | .clk_cfg = I2S_STD_CLK_DEFAULT_CONFIG(11000), 212 | .slot_cfg = I2S_STD_PHILIPS_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO), 213 | .gpio_cfg = { 214 | .mclk = I2S_GPIO_UNUSED, // some codecs may require mclk signal, this example doesn't need it 215 | .bclk = EXAMPLE_STD_BCLK, 216 | .ws = EXAMPLE_STD_WS, 217 | .dout = EXAMPLE_STD_DOUT, 218 | .din = EXAMPLE_STD_DIN, 219 | .invert_flags = { 220 | .mclk_inv = false, 221 | .bclk_inv = false, 222 | .ws_inv = false, 223 | }, 224 | }, 225 | }; 226 | ESP_ERROR_CHECK(i2s_channel_init_std_mode(tx_chan, &tx_std_cfg)); 227 | /* Before write data, start the tx channel first */ 228 | #endif 229 | } 230 | void setup(void) 231 | { 232 | int x, y; 233 | #ifdef ESP32_OLD 234 | //Serial.begin(115200); 235 | #endif 236 | lcd.begin(LCD); 237 | iWidth = lcd.width(); 238 | iHeight = lcd.height(); 239 | #ifdef CAP_TOUCH 240 | bbct.init(TOUCH_SDA, TOUCH_SCL, TOUCH_RST, TOUCH_INT); 241 | bbct.setOrientation(270, iHeight, iWidth); // 270 degrees, native width, native height 242 | #else 243 | lcd.rtInit(); 244 | #endif 245 | 246 | lcd.fillScreen(TFT_BLACK); 247 | if (lcd.width() <= 320) { 248 | lcd.setFont(FONT_8x8); 249 | } else { // big display 250 | lcd.setFont(FONT_12x16); 251 | } 252 | y = (iHeight-40)/2; 253 | lcd.fillRoundRect(20, 20, (iWidth-40)/2, y, 20, TFT_WHITE); 254 | lcd.setTextColor(TFT_BLACK, TFT_WHITE); 255 | if (lcd.width() <= 320) { 256 | lcd.setCursor(76, 20 + (y-16)/2); 257 | } else { 258 | lcd.setCursor(110, 20 + (y-16)/2); 259 | } 260 | lcd.print("Doh!"); 261 | lcd.fillRoundRect(40+(iWidth-40)/2, 20, (iWidth-40)/2, y, 20, TFT_YELLOW); 262 | lcd.setTextColor(TFT_BLACK, TFT_YELLOW); 263 | if (lcd.width() <= 320) { 264 | lcd.setCursor(200, 20 + (y-16)/2); 265 | } else { 266 | lcd.setCursor(300, 20 + (y-16)/2); 267 | } 268 | lcd.print("PacMan Death"); 269 | lcd.fillRoundRect(20, 40+(iHeight-40)/2, (iWidth-40)/2, y, 20, TFT_CYAN); 270 | lcd.setTextColor(TFT_BLACK, TFT_CYAN); 271 | if (lcd.width() <= 320) { 272 | lcd.setCursor(68, (y-16)/2 + 40 + (iHeight-40)/2); 273 | } else { 274 | lcd.setCursor(92, (y-16)/2 + 40 + (iHeight-40)/2); 275 | } 276 | lcd.print("Bogart"); 277 | lcd.fillRoundRect(40+(iWidth-40)/2, 40+(iHeight-40)/2, (iWidth-40)/2, y, 20, TFT_MAGENTA); 278 | lcd.setTextColor(TFT_BLACK, TFT_MAGENTA); 279 | if (lcd.width() <= 320) { 280 | lcd.setCursor(212, (y-16)/2 + 40 + (iHeight-40)/2); 281 | } else { 282 | lcd.setCursor(312, (y-16)/2 + 40 + (iHeight-40)/2); 283 | } 284 | lcd.print("Sorry Dave"); 285 | i2sInit(); 286 | } 287 | 288 | void loop(void) 289 | { 290 | TOUCHINFO ti; 291 | int i; 292 | 293 | #ifdef CAP_TOUCH 294 | if (bbct.getSamples(&ti) && ti.count >= 1) { // a touch event 295 | #else 296 | if (lcd.rtReadTouch(&ti) && ti.count >= 1) { // a touch event 297 | #endif 298 | i = (ti.x[0] / (iWidth/2)); 299 | if (ti.y[0] > (iHeight/2)) i += 2; 300 | //Serial.printf("Playing sound %d\n", i); 301 | #ifdef ESP32_OLD 302 | i2s_start(I2S_NUM_0); 303 | PlaySound(sound_data[i], sound_len[i]); 304 | i2s_stop(I2S_NUM_0); // if I don't stop the I2S output, it makes buzzing/thumping noises continuously 305 | #else 306 | i2s_channel_enable(tx_chan); 307 | PlaySound(sound_data[i], sound_len[i]); 308 | i2s_channel_disable(tx_chan); 309 | #endif 310 | } 311 | } 312 | -------------------------------------------------------------------------------- /web_image_viewer/web_image_viewer.ino: -------------------------------------------------------------------------------- 1 | // 2 | // Example sketch showing how to host a web server on your CYD 3 | // and display JPEG images uploaded to it 4 | // The code will scale incoming images by 1/2, 1/4 or 1/8 to 5 | // make them fit on the LCD. Images larger than 64K (arbitrary) 6 | // or larger than 8x either LCD dimension will not display. 7 | // 8 | // 9 | #include 10 | #include 11 | #include 12 | #include // Install ESPAsyncWebSrv by dvarrel 13 | 14 | BB_SPI_LCD lcd; 15 | JPEGDEC jpg; 16 | #define MAX_FILE_SIZE 65536 17 | 18 | const String default_ssid = "your_ssid"; 19 | const String default_wifipassword = "your_password"; 20 | uint8_t *pBuffer; 21 | int iWidth, iHeight, iFileSize; 22 | // 23 | // The HTML is a static string with a simple form to upload the file 24 | // This form contains a single submit button which initiates a multi-part 25 | // file upload. 26 | // 27 | const char index_html[] PROGMEM = R"rawliteral( 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |

CYD JPEG image viewer

36 |

Upload a baseline JPEG image up to 64K.
37 | Images larger than the LCD will be scaled down.

38 |
39 |

Image Dimensions: %IMAGESIZE%

40 |

After clicking upload it will take some time for the file to upload,
41 | there is no indicator that the upload began. Please be patient.

42 |

Once uploaded the page will refresh and image information will be displayed.

43 | 44 | 45 | )rawliteral"; 46 | 47 | // configuration structure 48 | struct Config { 49 | String ssid; // wifi ssid 50 | String wifipassword; // wifi password 51 | int webserverporthttp; // http port number for web admin 52 | }; 53 | 54 | // variables 55 | Config config; // configuration 56 | AsyncWebServer *server; // initialise webserver 57 | 58 | // 59 | // This callback function draws the pixels as they're decoded 60 | // Each block of pixels is 1 MCU tall (8 or 16 pixels) and a variable 61 | // number of MCUs wide. 62 | // 63 | int JPEGDraw(JPEGDRAW *pDraw) 64 | { 65 | lcd.setAddrWindow(pDraw->x, pDraw->y, pDraw->iWidth, pDraw->iHeight); 66 | lcd.pushPixels((uint16_t *)pDraw->pPixels, pDraw->iWidth * pDraw->iHeight); 67 | return 1; 68 | } /* JPEGDraw() */ 69 | 70 | // Read the file info and decode it to the LCD 71 | void DisplayFile(void) 72 | { 73 | int options = 0, xoff, yoff, w, h; 74 | if (jpg.openRAM(pBuffer, iFileSize, JPEGDraw)) { // pass the data and its size 75 | jpg.setPixelType(RGB565_BIG_ENDIAN); // bb_spi_lcd uses big-endian RGB565 pixels 76 | // if the image is smaller than the LCD dimensions, center it 77 | w = iWidth = jpg.getWidth(); 78 | h = iHeight = jpg.getHeight(); 79 | if (w > lcd.width() || h > lcd.height()) { // try to scale it to fit the LCD 80 | if (w > lcd.width() * 4 || h > lcd.height() * 4) { 81 | options = JPEG_SCALE_EIGHTH; 82 | w = iWidth/8; h = iHeight/8; 83 | } else if (w > lcd.width() * 2 || h > lcd.height() * 2) { 84 | options = JPEG_SCALE_QUARTER; 85 | w = iWidth / 4; h = iHeight / 4; 86 | } else { 87 | options = JPEG_SCALE_HALF; 88 | w = iWidth / 2; h = iHeight / 2; 89 | } 90 | } 91 | xoff = (lcd.width() - w)/2; 92 | yoff = (lcd.height() - h)/2; 93 | if (xoff < 0) xoff = 0; 94 | if (yoff < 0) yoff = 0; 95 | lcd.fillScreen(TFT_BLACK); 96 | jpg.decode(xoff,yoff, options); // center the image and no extra options (e.g. scaling) 97 | } else { 98 | lcd.println("Error opening JPEG!"); 99 | } 100 | } /* DisplayFile() */ 101 | 102 | void configureWebServer() { 103 | server->on("/", HTTP_GET, [](AsyncWebServerRequest * request) { 104 | // String logmessage = "Client:" + request->client()->remoteIP().toString() + + " " + request->url(); 105 | // lcd.println(logmessage); 106 | request->send_P(200, "text/html", index_html, processor); 107 | }); 108 | 109 | // run handleUpload function when any file is uploaded 110 | server->on("/upload", HTTP_POST, [](AsyncWebServerRequest *request) { 111 | request->send(200); 112 | }, handleUpload); 113 | } /* configureWebServer() */ 114 | 115 | // handles jpeg file uploads 116 | void handleUpload(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) { 117 | if (len) { 118 | if (index+len <= MAX_FILE_SIZE) { 119 | memcpy(&pBuffer[index], data, len); 120 | } 121 | iFileSize = index+len; 122 | } 123 | if (final) { // last chunk 124 | // lcd.print("Upload complete\n"); 125 | if (iFileSize <= MAX_FILE_SIZE) { // we were able to hold the complete file in memory 126 | DisplayFile(); 127 | request->redirect("/"); 128 | } else { // we had to abandon the upload, after exceeding our buffer size 129 | lcd.setCursor(0,0); 130 | lcd.println("File too large!"); 131 | } 132 | } 133 | } /* handleUpload() */ 134 | 135 | // Process info requests from our one variable element 136 | String processor(const String& var) { 137 | char szTemp[128]; 138 | 139 | if (var == "IMAGESIZE") { 140 | sprintf(szTemp, "%d x %d, %d bytes", iWidth, iHeight, iFileSize); 141 | return String(szTemp); 142 | } 143 | return String(); 144 | } /* processor() */ 145 | 146 | void setup() { 147 | lcd.begin(DISPLAY_CYD_2USB); // Set this to your display type 148 | lcd.fillScreen(TFT_BLACK); 149 | lcd.setTextColor(TFT_GREEN); 150 | lcd.setFont(FONT_12x16); 151 | iFileSize = 0; // no image loaded 152 | lcd.println("Booting ..."); 153 | pBuffer = (uint8_t *)malloc(MAX_FILE_SIZE); // allow up to 64k JPEG 154 | if (!pBuffer) { 155 | lcd.println("malloc failed!"); 156 | while (1) {}; 157 | } 158 | config.ssid = default_ssid; 159 | config.wifipassword = default_wifipassword; 160 | config.webserverporthttp = 80; 161 | 162 | lcd.print("Connecting to Wifi: "); 163 | WiFi.begin(config.ssid.c_str(), config.wifipassword.c_str()); 164 | while (WiFi.status() != WL_CONNECTED) { 165 | delay(500); 166 | lcd.print("."); 167 | } 168 | lcd.print("\nServer IP: "); 169 | lcd.println(WiFi.localIP()); 170 | 171 | // configure web server 172 | server = new AsyncWebServer(config.webserverporthttp); 173 | configureWebServer(); 174 | 175 | // startup web server 176 | lcd.println("Starting Webserver"); 177 | server->begin(); 178 | } /* setup() */ 179 | 180 | // once the server starts, there's nothing to do here 181 | void loop() { 182 | } 183 | --------------------------------------------------------------------------------