├── 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 |
--------------------------------------------------------------------------------