├── LICENSE ├── N5110_GUI_encoder_demo.ino ├── README.md ├── c64enh_font.h ├── small4x7_font.h ├── small5x7_font.h ├── small5x7bold_font.h ├── term9x14_font.h ├── times_dig_16x24_font.h └── tiny3x7_font.h /LICENSE: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | 9 | This version of the GNU Lesser General Public License incorporates 10 | the terms and conditions of version 3 of the GNU General Public 11 | License, supplemented by the additional permissions listed below. 12 | 13 | 0. Additional Definitions. 14 | 15 | As used herein, "this License" refers to version 3 of the GNU Lesser 16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU 17 | General Public License. 18 | 19 | "The Library" refers to a covered work governed by this License, 20 | other than an Application or a Combined Work as defined below. 21 | 22 | An "Application" is any work that makes use of an interface provided 23 | by the Library, but which is not otherwise based on the Library. 24 | Defining a subclass of a class defined by the Library is deemed a mode 25 | of using an interface provided by the Library. 26 | 27 | A "Combined Work" is a work produced by combining or linking an 28 | Application with the Library. The particular version of the Library 29 | with which the Combined Work was made is also called the "Linked 30 | Version". 31 | 32 | The "Minimal Corresponding Source" for a Combined Work means the 33 | Corresponding Source for the Combined Work, excluding any source code 34 | for portions of the Combined Work that, considered in isolation, are 35 | based on the Application, and not on the Linked Version. 36 | 37 | The "Corresponding Application Code" for a Combined Work means the 38 | object code and/or source code for the Application, including any data 39 | and utility programs needed for reproducing the Combined Work from the 40 | Application, but excluding the System Libraries of the Combined Work. 41 | 42 | 1. Exception to Section 3 of the GNU GPL. 43 | 44 | You may convey a covered work under sections 3 and 4 of this License 45 | without being bound by section 3 of the GNU GPL. 46 | 47 | 2. Conveying Modified Versions. 48 | 49 | If you modify a copy of the Library, and, in your modifications, a 50 | facility refers to a function or data to be supplied by an Application 51 | that uses the facility (other than as an argument passed when the 52 | facility is invoked), then you may convey a copy of the modified 53 | version: 54 | 55 | a) under this License, provided that you make a good faith effort to 56 | ensure that, in the event an Application does not supply the 57 | function or data, the facility still operates, and performs 58 | whatever part of its purpose remains meaningful, or 59 | 60 | b) under the GNU GPL, with none of the additional permissions of 61 | this License applicable to that copy. 62 | 63 | 3. Object Code Incorporating Material from Library Header Files. 64 | 65 | The object code form of an Application may incorporate material from 66 | a header file that is part of the Library. You may convey such object 67 | code under terms of your choice, provided that, if the incorporated 68 | material is not limited to numerical parameters, data structure 69 | layouts and accessors, or small macros, inline functions and templates 70 | (ten or fewer lines in length), you do both of the following: 71 | 72 | a) Give prominent notice with each copy of the object code that the 73 | Library is used in it and that the Library and its use are 74 | covered by this License. 75 | 76 | b) Accompany the object code with a copy of the GNU GPL and this license 77 | document. 78 | 79 | 4. Combined Works. 80 | 81 | You may convey a Combined Work under terms of your choice that, 82 | taken together, effectively do not restrict modification of the 83 | portions of the Library contained in the Combined Work and reverse 84 | engineering for debugging such modifications, if you also do each of 85 | the following: 86 | 87 | a) Give prominent notice with each copy of the Combined Work that 88 | the Library is used in it and that the Library and its use are 89 | covered by this License. 90 | 91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license 92 | document. 93 | 94 | c) For a Combined Work that displays copyright notices during 95 | execution, include the copyright notice for the Library among 96 | these notices, as well as a reference directing the user to the 97 | copies of the GNU GPL and this license document. 98 | 99 | d) Do one of the following: 100 | 101 | 0) Convey the Minimal Corresponding Source under the terms of this 102 | License, and the Corresponding Application Code in a form 103 | suitable for, and under terms that permit, the user to 104 | recombine or relink the Application with a modified version of 105 | the Linked Version to produce a modified Combined Work, in the 106 | manner specified by section 6 of the GNU GPL for conveying 107 | Corresponding Source. 108 | 109 | 1) Use a suitable shared library mechanism for linking with the 110 | Library. A suitable mechanism is one that (a) uses at run time 111 | a copy of the Library already present on the user's computer 112 | system, and (b) will operate properly with a modified version 113 | of the Library that is interface-compatible with the Linked 114 | Version. 115 | 116 | e) Provide Installation Information, but only if you would otherwise 117 | be required to provide such information under section 6 of the 118 | GNU GPL, and only to the extent that such information is 119 | necessary to install and execute a modified version of the 120 | Combined Work produced by recombining or relinking the 121 | Application with a modified version of the Linked Version. (If 122 | you use option 4d0, the Installation Information must accompany 123 | the Minimal Corresponding Source and Corresponding Application 124 | Code. If you use option 4d1, you must provide the Installation 125 | Information in the manner specified by section 6 of the GNU GPL 126 | for conveying Corresponding Source.) 127 | 128 | 5. Combined Libraries. 129 | 130 | You may place library facilities that are a work based on the 131 | Library side by side in a single library together with other library 132 | facilities that are not Applications and are not covered by this 133 | License, and convey such a combined library under terms of your 134 | choice, if you do both of the following: 135 | 136 | a) Accompany the combined library with a copy of the same work based 137 | on the Library, uncombined with any other library facilities, 138 | conveyed under the terms of this License. 139 | 140 | b) Give prominent notice with the combined library that part of it 141 | is a work based on the Library, and explaining where to find the 142 | accompanying uncombined form of the same work. 143 | 144 | 6. Revised Versions of the GNU Lesser General Public License. 145 | 146 | The Free Software Foundation may publish revised and/or new versions 147 | of the GNU Lesser General Public License from time to time. Such new 148 | versions will be similar in spirit to the present version, but may 149 | differ in detail to address new problems or concerns. 150 | 151 | Each version is given a distinguishing version number. If the 152 | Library as you received it specifies that a certain numbered version 153 | of the GNU Lesser General Public License "or any later version" 154 | applies to it, you have the option of following the terms and 155 | conditions either of that published version or of any later version 156 | published by the Free Software Foundation. If the Library as you 157 | received it does not specify a version number of the GNU Lesser 158 | General Public License, you may choose any version of the GNU Lesser 159 | General Public License ever published by the Free Software Foundation. 160 | 161 | If the Library as you received it specifies that a proxy can decide 162 | whether future versions of the GNU Lesser General Public License shall 163 | apply, that proxy's public statement of acceptance of any version is 164 | permanent authorization for you to choose that version for the 165 | Library. 166 | -------------------------------------------------------------------------------- /N5110_GUI_encoder_demo.ino: -------------------------------------------------------------------------------- 1 | /* 2 | (c)2018 Pawel A. Hernik 3 | YouTube video: https://youtu.be/GHULqZpVpz4 4 | */ 5 | // *** CONNECTIONS *** 6 | // N5110 LCD from left: 7 | // #1 RST - Pin 9 8 | // #2 CS/CE - Pin 10 9 | // #3 DC - Pin 8 10 | // #4 MOSI/DIN - Pin 11 11 | // #5 SCK/CLK - Pin 13 12 | // #6 VCC 3.3V or 5V 13 | // #7 LIGHT 14 | // #8 GND 15 | 16 | // DHT11 pinout from left: 17 | // VCC DATA NC GND 18 | 19 | // Encoder pins to 2 and 4 (uses 1st interrupt) 20 | // Encoder push button to pin 3 (can use 2nd interrupt) 21 | // use debouncing capacitors (100nF seems to be enough) 22 | 23 | #define DHT11_PIN 14 24 | #define BACKLIGHT 6 25 | 26 | // uncomment to write min/max to EEEPROM 27 | //#define USE_EEPROM 28 | 29 | #include 30 | #include 31 | #include 32 | 33 | // define USESPI in LCD driver header for HW SPI version 34 | #include "N5110_SPI.h" 35 | #if USESPI==1 36 | #include 37 | #endif 38 | N5110_SPI lcd(9,10,8); // RST,CS,DC 39 | 40 | #include "c64enh_font.h" 41 | #include "times_dig_16x24_font.h" 42 | #include "term9x14_font.h" 43 | #include "tiny3x7_font.h" 44 | #include "small4x7_font.h" 45 | #include "small5x7_font.h" 46 | #include "small5x7bold_font.h" 47 | //#include "fonts_all.h" 48 | 49 | // ------------------------- 50 | #define encoderPinA 2 51 | #define encoderPinB 4 52 | #define encoderButton 3 53 | volatile int encoderPos = 0; 54 | 55 | void initEncoder() 56 | { 57 | encoderPos=0; 58 | pinMode(encoderPinA, INPUT_PULLUP); 59 | pinMode(encoderPinB, INPUT_PULLUP); 60 | pinMode(encoderButton, INPUT_PULLUP); 61 | attachInterrupt(digitalPinToInterrupt(encoderPinA), readEncoderInt, CHANGE); // encoder pin on interrupt 0 = pin 2 62 | attachInterrupt(digitalPinToInterrupt(encoderButton), buttonInt, CHANGE); // encoder pin on interrupt 1 = pin 3 63 | } 64 | 65 | void buttonInt() {} 66 | 67 | void readEncoderInt() 68 | { 69 | //(digitalRead(encoderPinA) == digitalRead(encoderPinB)) ? encoderPos++ : encoderPos--; 70 | uint8_t pd = PIND & B10100; // pins 2 and 4 direct reading 71 | ((pd == B10100) || (pd == B00000)) ? encoderPos++ : encoderPos--; 72 | } 73 | 74 | int readButton() 75 | { 76 | static int lastState = HIGH; 77 | int v=0,state = digitalRead(encoderButton); 78 | if(state==LOW && lastState==HIGH) v=1; 79 | lastState = state; 80 | return v; 81 | } 82 | 83 | // ------------------------- 84 | int freeMemory () 85 | { 86 | extern int __heap_start, *__brkval; 87 | int v; 88 | return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 89 | } 90 | // ------------------------- 91 | long readVcc() 92 | { 93 | long result; 94 | // Read 1.1V reference against AVcc 95 | ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); 96 | delay(2); // Wait for Vref to settle 97 | ADCSRA |= _BV(ADSC); // Convert 98 | while (bit_is_set(ADCSRA,ADSC)); 99 | result = ADCL; 100 | result |= ADCH<<8; 101 | result = 1125300L / result; // Back-calculate AVcc in mV 102 | return result; 103 | } 104 | // ------------------------- 105 | 106 | #define DHT_OK 0 107 | #define DHT_CHECKSUM -1 108 | #define DHT_TIMEOUT -2 109 | int humidity,hum; 110 | int temp1,temp10; 111 | 112 | int readDHT11(int pin) 113 | { 114 | uint8_t bits[5]; 115 | uint8_t bit = 7; 116 | uint8_t idx = 0; 117 | 118 | for (int i = 0; i < 5; i++) bits[i] = 0; 119 | 120 | // REQUEST SAMPLE 121 | pinMode(pin, OUTPUT); 122 | digitalWrite(pin, LOW); 123 | delay(18); 124 | digitalWrite(pin, HIGH); 125 | delayMicroseconds(40); 126 | pinMode(pin, INPUT_PULLUP); 127 | 128 | // ACKNOWLEDGE or TIMEOUT 129 | unsigned int loopCnt = 10000; 130 | while(digitalRead(pin) == LOW) if(!loopCnt--) return DHT_TIMEOUT; 131 | 132 | loopCnt = 10000; 133 | while(digitalRead(pin) == HIGH) if(!loopCnt--) return DHT_TIMEOUT; 134 | 135 | // READ OUTPUT - 40 BITS => 5 BYTES or TIMEOUT 136 | for (int i = 0; i < 40; i++) { 137 | loopCnt = 10000; 138 | while(digitalRead(pin) == LOW) if(!loopCnt--) return DHT_TIMEOUT; 139 | 140 | unsigned long t = micros(); 141 | loopCnt = 10000; 142 | while(digitalRead(pin) == HIGH) if(!loopCnt--) return DHT_TIMEOUT; 143 | 144 | if(micros() - t > 40) bits[idx] |= (1 << bit); 145 | if(bit == 0) { 146 | bit = 7; // restart at MSB 147 | idx++; // next byte! 148 | } 149 | else bit--; 150 | } 151 | // bits[1] and bits[3] are always zero??? 152 | hum = bits[0]; 153 | //humidity = map(hum,33,55,50,78); 154 | humidity = hum; 155 | temp1 = bits[2]; 156 | temp10 = bits[3]; 157 | if(bits[4] != bits[0]+bits[1]+bits[2]+bits[3]) return DHT_CHECKSUM; 158 | return DHT_OK; 159 | } 160 | 161 | // ------------------------- 162 | // -100.0 to 199.9 to integer 163 | void wrFloat(float f, int addr) 164 | { 165 | #ifdef USE_EEPROM 166 | unsigned int ui = (f+100)*10; 167 | EEPROM.write(addr+0, ui&0xff); 168 | EEPROM.write(addr+1, (ui>>8)&0xff); 169 | #endif 170 | } 171 | 172 | float rdFloat(int addr) 173 | { 174 | unsigned int ui = EEPROM.read(addr) + (EEPROM.read(addr+1)<<8); 175 | return (ui/10.0)-100.0; 176 | } 177 | 178 | // ------------------------- 179 | 180 | enum wdt_time { 181 | SLEEP_15MS, 182 | SLEEP_30MS, 183 | SLEEP_60MS, 184 | SLEEP_120MS, 185 | SLEEP_250MS, 186 | SLEEP_500MS, 187 | SLEEP_1S, 188 | SLEEP_2S, 189 | SLEEP_4S, 190 | SLEEP_8S, 191 | SLEEP_FOREVER 192 | }; 193 | 194 | ISR(WDT_vect) { wdt_disable(); } 195 | 196 | void powerDown(uint8_t time) 197 | { 198 | ADCSRA &= ~(1 << ADEN); // turn off ADC 199 | if(time != SLEEP_FOREVER) { // use watchdog timer 200 | wdt_enable(time); 201 | WDTCSR |= (1 << WDIE); 202 | } 203 | set_sleep_mode(SLEEP_MODE_PWR_DOWN); // most power saving 204 | cli(); 205 | sleep_enable(); 206 | sleep_bod_disable(); 207 | sei(); 208 | sleep_cpu(); 209 | // ... sleeping here 210 | sleep_disable(); 211 | ADCSRA |= (1 << ADEN); // turn on ADC 212 | } 213 | 214 | // -------------------------------------------------------------------------- 215 | byte scr[84*4]; // frame buffer 216 | byte scrWd = 84; 217 | byte scrHt = 4; 218 | 219 | void clrBuf() 220 | { 221 | for(int i=0;i= scrWd) || (y < 0) || (y >= scrHt*8)) return; 227 | switch (color) 228 | { 229 | case 1: scr[x+(y/8)*scrWd] |= (1 << (y&7)); break; 230 | case 0: scr[x+(y/8)*scrWd] &= ~(1 << (y&7)); break; 231 | case 2: scr[x+(y/8)*scrWd] ^= (1 << (y&7)); break; 232 | } 233 | } 234 | 235 | void drawLineV(int x, int y0, int y1) 236 | { 237 | if(y1>y0) 238 | for(int y=y0; y<=y1; y++) drawPixel(x,y,1); 239 | else 240 | for(int y=y1; y<=y0; y++) drawPixel(x,y,1); 241 | } 242 | 243 | // -------------------------------------------------------------------------- 244 | 245 | char buf[25],buf2[15]; 246 | float temp,mint=1000,maxt=-1000; 247 | float minh=1000,maxh=-1000; 248 | 249 | int numT=0; 250 | int curT=0; 251 | float bufT[300]; 252 | int mint2; 253 | int maxt2; 254 | int graphStart=0; 255 | 256 | int first=1; 257 | char *menuTxt[] = {"Temperature","Humidity","Both","Battery","Backlight","Contrast","EEPROM dump","Graph","Help","Reboot"}; 258 | int numMenus=0; 259 | int menuLine; 260 | int menuStart; 261 | int numScrLines = 6; 262 | int menuMode = -1; // -1 -> menu of options, 0..n -> option 263 | int oldPos = 0; 264 | 265 | 266 | void setup() 267 | { 268 | first = 1; 269 | Serial.begin(9600); 270 | lcd.init(); 271 | lcd.clrScr(); 272 | for(int i=0;i<14;i++) pinMode(i, OUTPUT); 273 | #ifdef USE_EEPROM 274 | mint=rdFloat(0); 275 | maxt=rdFloat(2); 276 | minh=rdFloat(4); 277 | maxh=rdFloat(6); 278 | #endif 279 | //Serial.println(mint); Serial.println(maxt); 280 | if(mint<-40 || mint>100) mint=99; 281 | if(maxt<-40 || maxt>100) maxt=-99; 282 | if(minh<0 || minh>100) minh=99; 283 | if(maxh<0 || maxh>100) maxh=0; 284 | //CLKPR = 0x80; // lower internal clock frequency to save power 285 | //CLKPR = 0x02; // 0-16MHz, 1-8MHz, 2-4MHz, 3-2MHz, .. 286 | initEncoder(); 287 | numMenus = sizeof(menuTxt)/sizeof(char*); 288 | analogWrite(BACKLIGHT,0); // 0=max 289 | } 290 | 291 | void drawBatt(int x, int y, int wd, int perc) 292 | { 293 | int w = wd*perc/100; 294 | lcd.fillWin(x,y,1+w,1,B01111111); 295 | x+=w+1; 296 | w=wd-w; 297 | if(w>0) { 298 | lcd.fillWin(x,y,w,1,B01000001); 299 | x+=w; 300 | } 301 | lcd.fillWin(x++,y,1,1,B01111111); 302 | lcd.fillWin(x++,y,1,1,B00011100); 303 | lcd.fillWin(x++,y,1,1,B00011100); 304 | } 305 | 306 | void drawBattBig(int x, int y, int wd, int perc) 307 | { 308 | int w = wd*perc/100; 309 | lcd.fillWin(x,y+0,1+w,1,B11111110); 310 | lcd.fillWin(x,y+1,1+w,1,B01111111); 311 | x+=w+1; 312 | w=wd-w; 313 | if(w>0) { 314 | lcd.fillWin(x,y+0,w,1,B00000010); 315 | lcd.fillWin(x,y+1,w,1,B01000000); 316 | x+=w; 317 | } 318 | lcd.fillWin(x,y+0,1,1,B11111110); 319 | lcd.fillWin(x,y+1,1,1,B01111111); x++; 320 | lcd.fillWin(x,y+0,1,1,B11110000); 321 | lcd.fillWin(x,y+1,1,1,B00001111); x++; 322 | lcd.fillWin(x,y+0,1,1,B11110000); 323 | lcd.fillWin(x,y+1,1,1,B00001111); 324 | } 325 | 326 | // --------------------------------------- 327 | int t=0; 328 | void drawSin() 329 | { 330 | if(encoderPos<0) encoderPos=0; 331 | if(encoderPos>30) encoderPos=30; 332 | float mult = encoderPos-15; 333 | int x,y,yold; 334 | scrWd = 84; 335 | scrHt = 4; 336 | clrBuf(); 337 | for(x=0; x<84; x++) { 338 | y = 16+mult*(sin((x+t/4.0)/5.0)*cos(x/22.0)); 339 | if(x==0 || y==yold) 340 | drawPixel(x,y,1); 341 | else 342 | drawLineV(x,y,yold); 343 | yold = y; 344 | } 345 | lcd.drawBuf(scr,0,1,scrWd,4); 346 | lcd.setFont(Small5x7PLBold); 347 | lcd.setDigitMinWd(4); 348 | snprintf(buf,99," Mult: %2d ",(int)mult); 349 | lcd.printStr(ALIGN_CENTER,0,buf); 350 | t+=4; 351 | } 352 | 353 | // --------------------------------------- 354 | int x; 355 | long v; 356 | 357 | void showTemp() 358 | { 359 | lcd.setFont(c64enh); 360 | lcd.printStr(ALIGN_CENTER, 0, "Temperature"); 361 | buf[0]=0; 362 | strcat(buf," <"); dtostrf(mint,1,1,buf2); strcat(buf,buf2); 363 | strcat(buf,"' >"); dtostrf(maxt,1,1,buf2); strcat(buf,buf2); strcat(buf,"' "); 364 | lcd.printStr(ALIGN_CENTER, 5, buf); 365 | 366 | snprintf(buf,10,"%d",(int)temp); 367 | lcd.setFont(times_dig_16x24); 368 | lcd.setDigitMinWd(17); 369 | x=3; 370 | x=lcd.printStr(x, 1, buf); 371 | snprintf(buf,10,":%d",(int)temp10); 372 | x=lcd.printStr(x, 1, buf); 373 | lcd.setFont(Term9x14); 374 | lcd.printStr(x+1, 1, "`C"); 375 | } 376 | 377 | void showHum() 378 | { 379 | lcd.setFont(c64enh); 380 | lcd.printStr(ALIGN_CENTER, 0, "Humidity"); 381 | buf[0]=0; 382 | strcat(buf," <"); dtostrf(minh,1,0,buf2); strcat(buf,buf2); 383 | strcat(buf,"% >"); dtostrf(maxh,1,0,buf2); strcat(buf,buf2); strcat(buf,"% "); 384 | lcd.printStr(ALIGN_CENTER, 5, buf); 385 | 386 | snprintf(buf,10,"%d",humidity); 387 | lcd.setFont(times_dig_16x24); 388 | lcd.setDigitMinWd(17); 389 | x=lcd.printStr(22, 1, buf); 390 | lcd.setFont(Term9x14); 391 | lcd.printStr(x+2, 2, "%"); 392 | } 393 | 394 | void showTempHum() 395 | { 396 | snprintf(buf,10,"%d",(int)temp); 397 | lcd.setFont(times_dig_16x24); 398 | lcd.setDigitMinWd(17); 399 | x=lcd.printStr(0, 0, buf); 400 | lcd.setFont(Term9x14); 401 | lcd.printStr(x+0, 0, "`C"); 402 | 403 | snprintf(buf,10,"%d",humidity); 404 | lcd.setFont(times_dig_16x24); 405 | lcd.setDigitMinWd(17); 406 | lcd.printStr(39, 3, buf); 407 | lcd.setFont(Term9x14); 408 | lcd.printStr(ALIGN_RIGHT, 3, "%"); 409 | 410 | lcd.setFont(c64enh); 411 | lcd.setDigitMinWd(6); 412 | 413 | buf[0]=0; strcat(buf,"<"); dtostrf(mint,1,0,buf2); strcat(buf,buf2); strcat(buf,"'"); 414 | lcd.printStr(ALIGN_RIGHT, 0, buf); 415 | buf[0]=0; strcat(buf,">"); dtostrf(maxt,1,0,buf2); strcat(buf,buf2); strcat(buf,"'"); 416 | lcd.printStr(ALIGN_RIGHT, 1, buf); 417 | 418 | buf[0]=0; strcat(buf,"<"); dtostrf(minh,1,0,buf2); strcat(buf,buf2); strcat(buf,"%"); 419 | lcd.printStr(ALIGN_LEFT, 4, buf); 420 | buf[0]=0; strcat(buf,">"); dtostrf(maxh,1,0,buf2); strcat(buf,buf2); strcat(buf,"%"); 421 | lcd.printStr(ALIGN_LEFT, 5, buf); 422 | } 423 | 424 | void showBattery() 425 | { 426 | lcd.setFont(c64enh); 427 | lcd.printStr(ALIGN_CENTER, 0, "Battery"); 428 | lcd.setFont(c64enh); 429 | lcd.setDigitMinWd(6); 430 | dtostrf(v/1000.0,1,3,buf); 431 | drawBattBig(8,2,62,constrain(map(v,2900,4200,0,100),0,100)); 432 | x=lcd.printStr(20, 5, buf); 433 | lcd.printStr(x+2, 5, "V"); 434 | } 435 | 436 | void dumpEEPROM() 437 | { 438 | lcd.setFont(Tiny3x7PL); 439 | lcd.setCharMinWd(3); 440 | lcd.setDigitMinWd(3); 441 | if(encoderPos>=(128-6)*2) encoderPos=(128-6)*2; 442 | int st = encoderPos/2; 443 | for(int j=0;j84) encoderPos=84; 492 | snprintf(buf,6," %d ",encoderPos*255/84); 493 | lcd.setFont(Small5x7PL); 494 | lcd.setCharMinWd(5); 495 | lcd.setDigitMinWd(5); 496 | lcd.printStr(ALIGN_CENTER, 1, buf); 497 | lcd.printStr(ALIGN_LEFT, 1, "000"); 498 | lcd.printStr(ALIGN_RIGHT, 1, "255"); 499 | lcd.fillWin(0,2,encoderPos,1,0xfc); 500 | if(encoderPos<84) lcd.fillWin(encoderPos,2,84-encoderPos,1,0); 501 | analogWrite(BACKLIGHT,255-encoderPos*3); 502 | } 503 | 504 | void setContrast() 505 | { 506 | if(encoderPos>63) encoderPos=63; 507 | snprintf(buf,6,"%02X",encoderPos*2); 508 | lcd.setFont(Small5x7PL); 509 | lcd.setCharMinWd(5); 510 | lcd.setDigitMinWd(5); 511 | lcd.printStr(28, 1, buf); 512 | lcd.printStr(ALIGN_LEFT, 1, "00"); 513 | lcd.printStr(58, 1, "7F"); 514 | lcd.fillWin(0,2,encoderPos,1,0xfc); 515 | if(encoderPos<84) lcd.fillWin(encoderPos,2,84-encoderPos,1,0); 516 | lcd.setContrast(encoderPos*2); 517 | } 518 | 519 | void (*doReset)(void) = 0; 520 | void reboot() 521 | { 522 | if(encoderPos>=1*2) encoderPos=1*2; 523 | int st = encoderPos/2; 524 | lcd.setFont(c64enh); 525 | lcd.printStr(ALIGN_CENTER, 1, "Reboot?"); 526 | lcd.setInvert(st?0:1); 527 | lcd.printStr(10, 3, " NO "); 528 | lcd.setInvert(st?1:0); 529 | lcd.printStr(43, 3, " YES "); 530 | lcd.setInvert(0); 531 | if(readButton()<=0) return; 532 | menuMode=-1; 533 | lcd.clrScr(); 534 | if(st>0) { // yes 535 | lcd.printStr(ALIGN_CENTER, 2, "Rebooting ..."); delay(500); 536 | lcd.clrScr(); 537 | doReset(); 538 | } 539 | encoderPos=oldPos; 540 | } 541 | 542 | void setMenu(int m) 543 | { 544 | menuMode=m; 545 | lcd.clrScr(); 546 | oldPos=encoderPos; 547 | encoderPos=0; 548 | } 549 | 550 | void endMenu() 551 | { 552 | if(readButton()>0) { 553 | menuMode=-1; 554 | lcd.clrScr(); 555 | encoderPos=oldPos; 556 | } 557 | } 558 | 559 | void formatMenu(char *in, char *out, int num) 560 | { 561 | int j=strlen(in); 562 | out[0]=' '; 563 | strncpy(out+1,in,j++); 564 | for(;j=numMenus) { menuLine=numMenus-1; encoderPos=menuLine*2; } 602 | if(menuLine>=menuStart+numScrLines) menuStart=menuLine-numScrLines+1; 603 | if(menuLinemaxt) { maxt=temp; wrFloat(maxt,2); } 642 | if(humiditymaxh) { maxh=humidity; wrFloat(maxh,6); } 644 | if(first) { 645 | #ifndef USE_EEPROM 646 | mint=maxt=temp; 647 | minh=maxh=humidity; 648 | #endif 649 | first=0; 650 | lcd.clrScr(); 651 | } 652 | } 653 | if(first && ret!=DHT_OK) { 654 | lcd.clrScr(); 655 | lcd.setFont(Term9x14); 656 | lcd.printStr(ALIGN_CENTER, 1, "Sensor"); 657 | lcd.printStr(ALIGN_CENTER, 3, "init"); 658 | powerDown(SLEEP_2S); 659 | return; 660 | } 661 | 662 | handleMenu(); 663 | //powerDown(SLEEP_2S); 664 | } 665 | 666 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # N5110_GUI_encoder_demo 2 | Simple GUI with Arduino, Encoder and Nokia LCD 3 | 4 | # YouTube video: 5 | https://youtu.be/GHULqZpVpz4 6 | 7 | # Connections: 8 | 9 | ## Encoder 10 | |Signal|Pin| 11 | |-|-| 12 | |PinA|2| 13 | |PinB|4| 14 | |Button|3| 15 | 16 | ## Nokia 5110 LCD 17 | |No|Signal | Pin| 18 | |-|-|-| 19 | | 1|RST | 9 | 20 | | 2|CS/CE | 10 | 21 | | 3|DC| 8 | 22 | | 4| MOSI/DIN | 11| 23 | |5| SCK/CLK | 13| 24 | |6| VCC | Vcc| 25 | |7| LIGHT |6| 26 | |8| GND |GND| 27 | 28 | ## DHT11 (for demo) 29 | |No|Signal|Pin| 30 | |-|-|-| 31 | |1|VCC|7| 32 | |2|DATA|2| 33 | |3|NC|| 34 | |4|GND|GND| 35 | 36 | -------------------------------------------------------------------------------- /c64enh_font.h: -------------------------------------------------------------------------------- 1 | #ifndef c64enh_font_h 2 | #define c64enh_font_h 3 | 4 | const uint8_t c64enh[] PROGMEM = 5 | { 6 | -7, 8, 32, '~'+1+18, // -width, height, firstChar, lastChar 7 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 8 | 0x02, 0x5F, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, // ! 9 | 0x06, 0x07, 0x07, 0x00, 0x00, 0x07, 0x07, 0x00, // " 10 | 0x07, 0x14, 0x7F, 0x7F, 0x14, 0x7F, 0x7F, 0x14, // # 11 | 0x06, 0x24, 0x2E, 0x6B, 0x6B, 0x3A, 0x12, 0x00, // $ 12 | 0x06, 0x63, 0x73, 0x18, 0x0C, 0x67, 0x63, 0x00, // % 13 | 0x07, 0x32, 0x7F, 0x4D, 0x4D, 0x77, 0x72, 0x50, // & 14 | 0x04, 0x06, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00, // ' 15 | 0x04, 0x1C, 0x3E, 0x63, 0x41, 0x00, 0x00, 0x00, // ( 16 | 0x04, 0x41, 0x63, 0x3E, 0x1C, 0x00, 0x00, 0x00, // ) 17 | 0x07, 0x08, 0x2A, 0x3E, 0x1C, 0x3E, 0x2A, 0x08, // * 18 | 0x06, 0x08, 0x08, 0x3E, 0x3E, 0x08, 0x08, 0x00, // + 19 | 0x03, 0x80, 0xE0, 0x60, 0x00, 0x00, 0x00, 0x00, // , 20 | 0x06, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, // - 21 | 0x02, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, // . 22 | 0x07, 0x40, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, // / 23 | 0x06, 0x3E, 0x7F, 0x49, 0x45, 0x7F, 0x3E, 0x00, // 0 24 | 0x06, 0x40, 0x44, 0x7F, 0x7F, 0x40, 0x40, 0x00, // 1 25 | 0x06, 0x62, 0x73, 0x59, 0x49, 0x4F, 0x46, 0x00, // 2 26 | 0x06, 0x22, 0x63, 0x49, 0x49, 0x7F, 0x36, 0x00, // 3 27 | 0x07, 0x18, 0x1C, 0x16, 0x13, 0x7F, 0x7F, 0x10, // 4 28 | 0x06, 0x27, 0x67, 0x45, 0x45, 0x7D, 0x39, 0x00, // 5 29 | 0x06, 0x3E, 0x7F, 0x49, 0x49, 0x7B, 0x32, 0x00, // 6 30 | 0x06, 0x01, 0x01, 0x79, 0x7D, 0x07, 0x03, 0x00, // 7 31 | 0x06, 0x36, 0x7F, 0x49, 0x49, 0x7F, 0x36, 0x00, // 8 32 | 0x06, 0x26, 0x6F, 0x49, 0x49, 0x7F, 0x3E, 0x00, // 9 33 | 0x02, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, // : 34 | 0x03, 0x80, 0xC4, 0x44, 0x00, 0x00, 0x00, 0x00, // ; 35 | 0x06, 0x10, 0x30, 0x7F, 0x7F, 0x30, 0x10, 0x00, // < min 36 | 0x05, 0x00, 0x7E, 0x43, 0x43, 0x7E, 0x00, 0x00, // = batt 37 | 0x06, 0x04, 0x06, 0x7F, 0x7F, 0x06, 0x04, 0x00, // > max 38 | 0x06, 0x02, 0x03, 0x51, 0x59, 0x0F, 0x06, 0x00, // ? 39 | 0x06, 0x3E, 0x7F, 0x41, 0x4D, 0x6F, 0x2E, 0x00, // @ 40 | 0x06, 0x7C, 0x7E, 0x13, 0x13, 0x7E, 0x7C, 0x00, // A 41 | 0x06, 0x7F, 0x7F, 0x49, 0x49, 0x7F, 0x36, 0x00, // B 42 | 0x06, 0x3E, 0x7F, 0x41, 0x41, 0x63, 0x22, 0x00, // C 43 | 0x06, 0x7F, 0x7F, 0x41, 0x41, 0x7F, 0x3E, 0x00, // D 44 | 0x06, 0x7F, 0x7F, 0x49, 0x49, 0x41, 0x41, 0x00, // E 45 | 0x06, 0x7F, 0x7F, 0x09, 0x09, 0x01, 0x01, 0x00, // F 46 | 0x06, 0x3E, 0x7F, 0x41, 0x49, 0x7B, 0x3A, 0x00, // G 47 | 0x06, 0x7F, 0x7F, 0x08, 0x08, 0x7F, 0x7F, 0x00, // H 48 | 0x04, 0x41, 0x7F, 0x7F, 0x41, 0x00, 0x00, 0x00, // I 49 | 0x06, 0x20, 0x60, 0x41, 0x7F, 0x3F, 0x01, 0x00, // J 50 | 0x06, 0x7F, 0x7F, 0x1C, 0x36, 0x63, 0x41, 0x00, // K 51 | 0x06, 0x7F, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, // L 52 | 0x07, 0x7F, 0x7F, 0x06, 0x0C, 0x06, 0x7F, 0x7F, // M 53 | 0x06, 0x7F, 0x7F, 0x0C, 0x18, 0x7F, 0x7F, 0x00, // N 54 | 0x06, 0x3E, 0x7F, 0x41, 0x41, 0x7F, 0x3E, 0x00, // O 55 | 0x06, 0x7F, 0x7F, 0x09, 0x09, 0x0F, 0x06, 0x00, // P 56 | 0x06, 0x1E, 0x3F, 0x21, 0x61, 0x7F, 0x5E, 0x00, // Q 57 | 0x06, 0x7F, 0x7F, 0x19, 0x39, 0x6F, 0x46, 0x00, // R 58 | 0x06, 0x26, 0x6F, 0x49, 0x49, 0x7B, 0x32, 0x00, // S 59 | 0x06, 0x01, 0x01, 0x7F, 0x7F, 0x01, 0x01, 0x00, // T 60 | 0x06, 0x3F, 0x7F, 0x40, 0x40, 0x7F, 0x3F, 0x00, // U 61 | 0x06, 0x1F, 0x3F, 0x60, 0x60, 0x3F, 0x1F, 0x00, // V 62 | 0x07, 0x7F, 0x7F, 0x30, 0x18, 0x30, 0x7F, 0x7F, // W 63 | 0x06, 0x41, 0x63, 0x3E, 0x3E, 0x63, 0x41, 0x00, // X 64 | 0x06, 0x07, 0x0F, 0x78, 0x78, 0x0F, 0x07, 0x00, // Y 65 | 0x06, 0x61, 0x71, 0x59, 0x4D, 0x47, 0x43, 0x00, // Z 66 | 0x04, 0x7F, 0x7F, 0x41, 0x41, 0x00, 0x00, 0x00, // [ 67 | 0x07, 0x02, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, // BackSlash 68 | 0x04, 0x41, 0x41, 0x7F, 0x7F, 0x00, 0x00, 0x00, // ] 69 | 0x06, 0x08, 0x0C, 0xFE, 0xFE, 0x0C, 0x08, 0x00, // ^ 70 | 0x07, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, // _ 71 | 0x07, 0x1C, 0x3E, 0x63, 0x41, 0x63, 0x14, 0x14, // ` 72 | 0x06, 0x20, 0x74, 0x54, 0x54, 0x7C, 0x78, 0x00, // a 73 | 0x06, 0x7F, 0x7F, 0x44, 0x44, 0x7C, 0x38, 0x00, // b 74 | 0x05, 0x38, 0x7C, 0x44, 0x44, 0x44, 0x00, 0x00, // c 75 | 0x06, 0x38, 0x7C, 0x44, 0x44, 0x7F, 0x7F, 0x00, // d 76 | 0x06, 0x38, 0x7C, 0x54, 0x54, 0x5C, 0x18, 0x00, // e 77 | 0x05, 0x08, 0x7E, 0x7F, 0x09, 0x09, 0x00, 0x00, // f 78 | 0x06, 0x98, 0xBC, 0xA4, 0xA4, 0xFC, 0x7C, 0x00, // g 79 | 0x06, 0x7F, 0x7F, 0x04, 0x04, 0x7C, 0x78, 0x00, // h 80 | 0x04, 0x44, 0x7D, 0x7D, 0x40, 0x00, 0x00, 0x00, // i 81 | 0x05, 0x80, 0x80, 0x80, 0xFD, 0x7D, 0x00, 0x00, // j 82 | 0x06, 0x7F, 0x7F, 0x10, 0x38, 0x6C, 0x44, 0x00, // k 83 | 0x04, 0x41, 0x7F, 0x7F, 0x40, 0x00, 0x00, 0x00, // l 84 | 0x07, 0x78, 0x7C, 0x0C, 0x38, 0x0C, 0x7C, 0x78, // m 85 | 0x06, 0x7C, 0x7C, 0x04, 0x04, 0x7C, 0x78, 0x00, // n 86 | 0x06, 0x38, 0x7C, 0x44, 0x44, 0x7C, 0x38, 0x00, // o 87 | 0x06, 0xFC, 0xFC, 0x24, 0x24, 0x3C, 0x18, 0x00, // p 88 | 0x06, 0x18, 0x3C, 0x24, 0x24, 0xFC, 0xFC, 0x00, // q 89 | 0x06, 0x7C, 0x7C, 0x04, 0x04, 0x0C, 0x08, 0x00, // r 90 | 0x06, 0x48, 0x5C, 0x54, 0x54, 0x74, 0x24, 0x00, // s 91 | 0x05, 0x04, 0x3F, 0x7F, 0x44, 0x44, 0x00, 0x00, // t 92 | 0x06, 0x3C, 0x7C, 0x40, 0x40, 0x7C, 0x7C, 0x00, // u 93 | 0x06, 0x1C, 0x3C, 0x60, 0x60, 0x3C, 0x1C, 0x00, // v 94 | 0x07, 0x1C, 0x7C, 0x60, 0x38, 0x60, 0x7C, 0x1C, // w 95 | 0x06, 0x44, 0x6C, 0x38, 0x38, 0x6C, 0x44, 0x00, // x 96 | 0x06, 0x9C, 0xBC, 0xA0, 0xE0, 0x7C, 0x3C, 0x00, // y 97 | 0x06, 0x44, 0x64, 0x74, 0x5C, 0x4C, 0x44, 0x00, // z 98 | 0x05, 0x08, 0x3E, 0x7F, 0x41, 0x41, 0x00, 0x00, // { 99 | 0x02, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, // | 100 | 0x05, 0x41, 0x41, 0x7F, 0x3E, 0x08, 0x00, 0x00, // } 101 | 0x05, 0x10, 0x18, 0x18, 0x18, 0x08, 0x00, 0x00, // ~ 102 | 0x02, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, //  103 | 104 | 0x07, 0x7C, 0x7E, 0x13, 0x13, 0x7E, 0xFC, 0x80, // Ą 105 | 0x06, 0x3C, 0x7E, 0x46, 0x43, 0x66, 0x24, 0x00, // ! 106 | 0x07, 0x7F, 0x7F, 0x49, 0x49, 0x41, 0xC1, 0x80, // " 107 | 0x06, 0x7F, 0x7F, 0x48, 0x44, 0x40, 0x40, 0x00, // # 108 | 0x06, 0x7E, 0x7E, 0x0C, 0x19, 0x7E, 0x7E, 0x00, // $ 109 | 0x06, 0x3C, 0x7E, 0x46, 0x43, 0x7E, 0x3C, 0x00, // % 110 | 0x06, 0x24, 0x6E, 0x4A, 0x4E, 0x7B, 0x30, 0x00, // & 111 | 0x06, 0x62, 0x76, 0x5A, 0x4F, 0x46, 0x42, 0x00, // ' 112 | 0x06, 0x69, 0x79, 0x59, 0x4D, 0x4F, 0x4B, 0x00, // ( 113 | 114 | 0x07, 0x20, 0x74, 0x54, 0x54, 0x7C, 0xF8, 0x80, // ą 115 | 0x05, 0x38, 0x7C, 0x44, 0x46, 0x45, 0x00, 0x00, // * 116 | 0x06, 0x38, 0x7C, 0x54, 0x54, 0xDC, 0x98, 0x00, // + 117 | 0x04, 0x51, 0x7F, 0x7F, 0x44, 0x00, 0x00, 0x00, // , 118 | 0x06, 0x7C, 0x7C, 0x04, 0x06, 0x7D, 0x78, 0x00, // - 119 | 0x06, 0x38, 0x7C, 0x44, 0x46, 0x7D, 0x38, 0x00, // . 120 | 0x06, 0x48, 0x5C, 0x54, 0x56, 0x75, 0x24, 0x00, // / 121 | 0x06, 0x44, 0x64, 0x76, 0x5D, 0x4C, 0x44, 0x00, // 0 122 | 0x06, 0x44, 0x64, 0x75, 0x5D, 0x4C, 0x44, 0x00, // 1 123 | }; 124 | 125 | #endif 126 | -------------------------------------------------------------------------------- /small4x7_font.h: -------------------------------------------------------------------------------- 1 | #ifndef Small4x7PL_font_h 2 | #define Small4x7PL_font_h 3 | 4 | #include "Arduino.h" 5 | 6 | const uint8_t Small4x7PL[] PROGMEM = 7 | { 8 | -5, 8, 32, '~'+1+18+2, // -width, height, firstChar, lastChar 9 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // 10 | 0x01, 0x5F, 0x00, 0x00, 0x00, 0x00, // ! 11 | 0x03, 0x03, 0x00, 0x03, 0x00, 0x00, // " 12 | 0x05, 0x14, 0x7F, 0x14, 0x7F, 0x14, // # 13 | 0x05, 0x24, 0x4A, 0xFF, 0x4A, 0x34, // $ 14 | 0x03, 0x61, 0x1C, 0x43, 0x00, 0x00, // % 15 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // & 16 | 0x03, 0x02, 0x05, 0x02, 0x00, 0x00, // ' 17 | 0x02, 0x3E, 0x41, 0x00, 0x00, 0x00, // ( 18 | 0x02, 0x41, 0x3E, 0x00, 0x00, 0x00, // ) 19 | 0x05, 0x14, 0x08, 0x1C, 0x08, 0x14, // * 20 | 0x03, 0x08, 0x1C, 0x08, 0x00, 0x00, // + 21 | 0x02, 0x80, 0x40, 0x00, 0x00, 0x00, // , 22 | 0x03, 0x08, 0x08, 0x08, 0x00, 0x00, // - 23 | 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, // . 24 | 0x03, 0x60, 0x1C, 0x03, 0x00, 0x00, // / 25 | 0x04, 0x3E, 0x41, 0x41, 0x3E, 0x00, // 0 26 | 0x03, 0x42, 0x7F, 0x40, 0x00, 0x00, // 1 27 | 0x04, 0x62, 0x51, 0x49, 0x46, 0x00, // 2 28 | 0x04, 0x22, 0x49, 0x49, 0x36, 0x00, // 3 29 | 0x04, 0x18, 0x14, 0x12, 0x7F, 0x00, // 4 30 | 0x04, 0x4F, 0x49, 0x49, 0x31, 0x00, // 5 31 | 0x04, 0x3E, 0x49, 0x49, 0x32, 0x00, // 6 32 | 0x04, 0x01, 0x71, 0x09, 0x07, 0x00, // 7 33 | 0x04, 0x36, 0x49, 0x49, 0x36, 0x00, // 8 34 | 0x04, 0x26, 0x49, 0x49, 0x3E, 0x00, // 9 35 | 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, // : 36 | 0x01, 0xC8, 0x00, 0x00, 0x00, 0x00, // ; 37 | 0x03, 0x08, 0x14, 0x22, 0x00, 0x00, // < 38 | 0x03, 0x14, 0x14, 0x14, 0x00, 0x00, // = 39 | 0x03, 0x22, 0x14, 0x08, 0x00, 0x00, // > 40 | 0x04, 0x02, 0x51, 0x09, 0x06, 0x00, // ? 41 | 0x05, 0x3E, 0x59, 0x59, 0x59, 0x46, // @ 42 | 0x04, 0x7E, 0x11, 0x11, 0x7E, 0x00, // A 43 | 0x04, 0x7F, 0x49, 0x49, 0x36, 0x00, // B 44 | 0x04, 0x3E, 0x41, 0x41, 0x22, 0x00, // C 45 | 0x04, 0x7F, 0x41, 0x41, 0x3E, 0x00, // D 46 | 0x04, 0x7F, 0x49, 0x49, 0x41, 0x00, // E 47 | 0x04, 0x7F, 0x09, 0x09, 0x01, 0x00, // F 48 | 0x04, 0x3E, 0x41, 0x49, 0x3A, 0x00, // G 49 | 0x04, 0x7F, 0x08, 0x08, 0x7F, 0x00, // H 50 | 0x01, 0x7F, 0x00, 0x00, 0x00, 0x00, // I 51 | 0x04, 0x21, 0x41, 0x41, 0x3F, 0x00, // J 52 | 0x04, 0x7F, 0x08, 0x14, 0x63, 0x00, // K 53 | 0x04, 0x7F, 0x40, 0x40, 0x40, 0x00, // L 54 | 0x05, 0x7F, 0x02, 0x1C, 0x02, 0x7F, // M 55 | 0x04, 0x7F, 0x02, 0x04, 0x7F, 0x00, // N 56 | 0x04, 0x3E, 0x41, 0x41, 0x3E, 0x00, // O 57 | 0x04, 0x7F, 0x11, 0x11, 0x0E, 0x00, // P 58 | 0x04, 0x3E, 0x41, 0xC1, 0xBE, 0x00, // Q 59 | 0x04, 0x7F, 0x11, 0x11, 0x6E, 0x00, // R 60 | 0x04, 0x26, 0x49, 0x49, 0x32, 0x00, // S 61 | 0x03, 0x01, 0x7F, 0x01, 0x00, 0x00, // T 62 | 0x04, 0x3F, 0x40, 0x40, 0x3F, 0x00, // U 63 | 0x05, 0x07, 0x18, 0x60, 0x18, 0x07, // V 64 | 0x05, 0x1F, 0x60, 0x18, 0x60, 0x1F, // W 65 | 0x05, 0x63, 0x14, 0x08, 0x14, 0x63, // X 66 | 0x05, 0x03, 0x0C, 0x70, 0x0C, 0x03, // Y 67 | 0x04, 0x71, 0x49, 0x45, 0x43, 0x00, // Z 68 | 0x03, 0x7F, 0x41, 0x41, 0x00, 0x00, // [ 69 | 0x05, 0x02, 0x04, 0x08, 0x10, 0x20, // BackSlash 70 | 0x03, 0x41, 0x41, 0x7F, 0x00, 0x00, // ] 71 | 0x03, 0x02, 0x01, 0x02, 0x00, 0x00, // ^ 72 | 0x04, 0x80, 0x80, 0x80, 0x80, 0x00, // _ 73 | 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, // ` 74 | 0x05, 0x20, 0x54, 0x54, 0x38, 0x40, // a 75 | 0x04, 0x3F, 0x48, 0x44, 0x38, 0x00, // b 76 | 0x04, 0x38, 0x44, 0x44, 0x28, 0x00, // c 77 | 0x04, 0x38, 0x44, 0x44, 0x7F, 0x00, // d 78 | 0x04, 0x38, 0x54, 0x54, 0x18, 0x00, // e 79 | 0x03, 0x08, 0x7E, 0x09, 0x00, 0x00, // f 80 | 0x04, 0x98, 0xA4, 0xA4, 0x58, 0x00, // g 81 | 0x04, 0x7F, 0x04, 0x04, 0x78, 0x00, // h 82 | 0x01, 0x7D, 0x00, 0x00, 0x00, 0x00, // i 83 | 0x03, 0x80, 0x80, 0x7D, 0x00, 0x00, // j 84 | 0x04, 0x7F, 0x10, 0x28, 0x44, 0x00, // k 85 | 0x02, 0x3F, 0x40, 0x00, 0x00, 0x00, // l 86 | 0x05, 0x78, 0x04, 0x18, 0x04, 0x78, // m 87 | 0x04, 0x7C, 0x04, 0x04, 0x78, 0x00, // n 88 | 0x04, 0x38, 0x44, 0x44, 0x38, 0x00, // o 89 | 0x04, 0xFC, 0x24, 0x24, 0x18, 0x00, // p 90 | 0x04, 0x18, 0x24, 0x24, 0xFC, 0x00, // q 91 | 0x04, 0x7C, 0x08, 0x04, 0x04, 0x00, // r 92 | 0x04, 0x48, 0x54, 0x54, 0x24, 0x00, // s 93 | 0x03, 0x04, 0x3F, 0x44, 0x00, 0x00, // t 94 | 0x04, 0x3C, 0x40, 0x40, 0x7C, 0x00, // u 95 | 0x05, 0x1C, 0x20, 0x40, 0x20, 0x1C, // v 96 | 0x05, 0x1C, 0x60, 0x18, 0x60, 0x1C, // w 97 | 0x05, 0x44, 0x28, 0x10, 0x28, 0x44, // x 98 | 0x04, 0x9C, 0xA0, 0xA0, 0x7C, 0x00, // y 99 | 0x04, 0x64, 0x54, 0x54, 0x4C, 0x00, // z 100 | 0x03, 0x08, 0x36, 0x41, 0x00, 0x00, // { 101 | 0x01, 0x7F, 0x00, 0x00, 0x00, 0x00, // | 102 | 0x03, 0x41, 0x36, 0x08, 0x00, 0x00, // } 103 | 0x04, 0x02, 0x01, 0x02, 0x01, 0x00, // ~ 104 | 0x05, 0xFF, 0x81, 0x81, 0x81, 0xFF, //  105 | 106 | 0x04, 0x7E, 0x11, 0x91, 0x7E, 0x00, // € 107 | 0x04, 0x3C, 0x46, 0x43, 0x24, 0x00, //  108 | 0x04, 0x7F, 0x49, 0xC9, 0x81, 0x00, // ‚ 109 | 0x04, 0x7F, 0x48, 0x44, 0x40, 0x00, // ƒ 110 | 0x04, 0x7E, 0x05, 0x0B, 0x7C, 0x00, // „ 111 | 0x04, 0x3C, 0x46, 0x43, 0x3C, 0x00, // … 112 | 0x04, 0x24, 0x4E, 0x4B, 0x32, 0x00, // † 113 | 0x04, 0x62, 0x56, 0x4B, 0x46, 0x00, // ‡ 114 | 0x04, 0x69, 0x59, 0x4D, 0x4B, 0x00, // ˆ 115 | 0x05, 0x20, 0x54, 0x54, 0xF8, 0x80, // ‰ 116 | 117 | 0x04, 0x38, 0x44, 0x46, 0x29, 0x00, // Š 118 | 0x04, 0x38, 0x54, 0xD4, 0x98, 0x00, // ‹ 119 | 0x03, 0x08, 0x3F, 0x42, 0x00, 0x00, // Ś 120 | 0x04, 0x7C, 0x06, 0x05, 0x78, 0x00, // Ť 121 | 0x04, 0x38, 0x44, 0x46, 0x39, 0x00, // Ž 122 | 0x04, 0x48, 0x54, 0x56, 0x25, 0x00, // Ź 123 | 0x04, 0x64, 0x56, 0x55, 0x4C, 0x00, //  124 | 0x04, 0x64, 0x54, 0x55, 0x4C, 0x00, // ‘ 125 | 126 | 0x05, 0x3E, 0x55, 0x61, 0x55, 0x3E, // ’ 127 | 0x05, 0x3E, 0x65, 0x51, 0x65, 0x3E, // “ 128 | }; 129 | 130 | #endif 131 | 132 | -------------------------------------------------------------------------------- /small5x7_font.h: -------------------------------------------------------------------------------- 1 | #ifndef Small5x7PL_font_h 2 | #define Small5x7PL_font_h 3 | 4 | #include "Arduino.h" 5 | 6 | const uint8_t Small5x7PL[] PROGMEM = 7 | { 8 | -5, 8, 32, '~'+1+18, // -width, height, firstChar, lastChar 9 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // 10 | 0x01, 0x5F, 0x00, 0x00, 0x00, 0x00, // ! 11 | 0x03, 0x03, 0x00, 0x03, 0x00, 0x00, // " 12 | 0x05, 0x14, 0x7F, 0x14, 0x7F, 0x14, // # 13 | 0x05, 0x24, 0x4A, 0xFF, 0x4A, 0x34, // $ 14 | 0x03, 0x61, 0x1C, 0x43, 0x00, 0x00, // % 15 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // & 16 | 0x04, 0x06, 0x09, 0x09, 0x06, 0x00, // ' 17 | 0x02, 0x3E, 0x41, 0x00, 0x00, 0x00, // ( 18 | 0x02, 0x41, 0x3E, 0x00, 0x00, 0x00, // ) 19 | 0x05, 0x14, 0x08, 0x1C, 0x08, 0x14, // * 20 | 0x05, 0x08, 0x08, 0x3E, 0x08, 0x08, // + 21 | 0x02, 0x80, 0x40, 0x00, 0x00, 0x00, // , 22 | 0x05, 0x08, 0x08, 0x08, 0x08, 0x08, // - 23 | 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, // . 24 | 0x03, 0x60, 0x1C, 0x03, 0x00, 0x00, // / 25 | 0x05, 0x3E, 0x41, 0x41, 0x41, 0x3E, // 0 26 | 0x05, 0x44, 0x42, 0x7F, 0x40, 0x40, // 1 27 | 0x05, 0x62, 0x51, 0x49, 0x49, 0x46, // 2 28 | 0x05, 0x22, 0x41, 0x49, 0x49, 0x36, // 3 29 | 0x05, 0x18, 0x14, 0x12, 0x7F, 0x10, // 4 30 | 0x05, 0x4F, 0x49, 0x49, 0x49, 0x31, // 5 31 | 0x05, 0x3E, 0x49, 0x49, 0x49, 0x32, // 6 32 | 0x05, 0x01, 0x61, 0x11, 0x09, 0x07, // 7 33 | 0x05, 0x36, 0x49, 0x49, 0x49, 0x36, // 8 34 | 0x05, 0x26, 0x49, 0x49, 0x49, 0x3E, // 9 35 | 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, // : 36 | 0x02, 0x80, 0x48, 0x00, 0x00, 0x00, // ; 37 | 0x04, 0x08, 0x14, 0x22, 0x41, 0x00, // < 38 | 0x04, 0x14, 0x14, 0x14, 0x14, 0x00, // = 39 | 0x04, 0x41, 0x22, 0x14, 0x08, 0x00, // > 40 | 0x04, 0x02, 0x51, 0x09, 0x06, 0x00, // ? 41 | 0x05, 0x3E, 0x59, 0x59, 0x59, 0x46, // @ 42 | 0x05, 0x7E, 0x11, 0x11, 0x11, 0x7E, // A 43 | 0x05, 0x7F, 0x49, 0x49, 0x49, 0x36, // B 44 | 0x05, 0x3E, 0x41, 0x41, 0x41, 0x22, // C 45 | 0x05, 0x7F, 0x41, 0x41, 0x41, 0x3E, // D 46 | 0x05, 0x7F, 0x49, 0x49, 0x41, 0x41, // E 47 | 0x05, 0x7F, 0x09, 0x09, 0x01, 0x01, // F 48 | 0x05, 0x3E, 0x41, 0x49, 0x49, 0x3A, // G 49 | 0x05, 0x7F, 0x08, 0x08, 0x08, 0x7F, // H 50 | 0x01, 0x7F, 0x00, 0x00, 0x00, 0x00, // I 51 | 0x05, 0x21, 0x41, 0x41, 0x41, 0x3F, // J 52 | 0x05, 0x7F, 0x08, 0x14, 0x22, 0x41, // K 53 | 0x05, 0x7F, 0x40, 0x40, 0x40, 0x40, // L 54 | 0x05, 0x7F, 0x02, 0x1C, 0x02, 0x7F, // M 55 | 0x05, 0x7F, 0x02, 0x04, 0x08, 0x7F, // N 56 | 0x05, 0x3E, 0x41, 0x41, 0x41, 0x3E, // O 57 | 0x05, 0x7F, 0x11, 0x11, 0x11, 0x0E, // P 58 | 0x05, 0x3E, 0x41, 0xC1, 0xA1, 0xBE, // Q 59 | 0x05, 0x7F, 0x11, 0x11, 0x29, 0x46, // R 60 | 0x05, 0x26, 0x49, 0x49, 0x49, 0x32, // S 61 | 0x05, 0x01, 0x01, 0x7F, 0x01, 0x01, // T 62 | 0x05, 0x3F, 0x40, 0x40, 0x40, 0x3F, // U 63 | 0x05, 0x07, 0x18, 0x60, 0x18, 0x07, // V 64 | 0x05, 0x1F, 0x60, 0x18, 0x60, 0x1F, // W 65 | 0x05, 0x63, 0x14, 0x08, 0x14, 0x63, // X 66 | 0x05, 0x03, 0x0C, 0x70, 0x0C, 0x03, // Y 67 | 0x05, 0x61, 0x51, 0x49, 0x45, 0x43, // Z 68 | 0x03, 0x7F, 0x41, 0x41, 0x00, 0x00, // [ 69 | 0x05, 0x02, 0x04, 0x08, 0x10, 0x20, // BackSlash 70 | 0x03, 0x41, 0x41, 0x7F, 0x00, 0x00, // ] 71 | 0x05, 0x04, 0x02, 0x01, 0x02, 0x04, // ^ 72 | 0x05, 0x80, 0x80, 0x80, 0x80, 0x80, // _ 73 | 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, // ` 74 | 0x05, 0x20, 0x54, 0x54, 0x38, 0x40, // a 75 | 0x05, 0x3F, 0x48, 0x44, 0x44, 0x38, // b 76 | 0x05, 0x38, 0x44, 0x44, 0x44, 0x28, // c 77 | 0x05, 0x38, 0x44, 0x44, 0x28, 0x7F, // d 78 | 0x05, 0x38, 0x54, 0x54, 0x54, 0x18, // e 79 | 0x04, 0x08, 0x7E, 0x09, 0x01, 0x00, // f 80 | 0x05, 0x98, 0xA4, 0xA4, 0xA4, 0x58, // g 81 | 0x05, 0x7F, 0x04, 0x04, 0x04, 0x78, // h 82 | 0x01, 0x7D, 0x00, 0x00, 0x00, 0x00, // i 83 | 0x03, 0x80, 0x80, 0x7D, 0x00, 0x00, // j 84 | 0x05, 0x7F, 0x10, 0x10, 0x28, 0x44, // k 85 | 0x03, 0x3F, 0x40, 0x40, 0x00, 0x00, // l 86 | 0x05, 0x78, 0x04, 0x18, 0x04, 0x78, // m 87 | 0x05, 0x7C, 0x04, 0x04, 0x04, 0x78, // n 88 | 0x05, 0x38, 0x44, 0x44, 0x44, 0x38, // o 89 | 0x05, 0xFC, 0x24, 0x24, 0x24, 0x18, // p 90 | 0x05, 0x18, 0x24, 0x24, 0x24, 0xFC, // q 91 | 0x04, 0x7C, 0x08, 0x04, 0x04, 0x00, // r 92 | 0x05, 0x48, 0x54, 0x54, 0x54, 0x24, // s 93 | 0x04, 0x04, 0x3F, 0x44, 0x40, 0x00, // t 94 | 0x05, 0x3C, 0x40, 0x40, 0x20, 0x7C, // u 95 | 0x05, 0x1C, 0x20, 0x40, 0x20, 0x1C, // v 96 | 0x05, 0x1C, 0x60, 0x18, 0x60, 0x1C, // w 97 | 0x05, 0x44, 0x28, 0x10, 0x28, 0x44, // x 98 | 0x05, 0x9C, 0xA0, 0xA0, 0xA0, 0x7C, // y 99 | 0x05, 0x64, 0x54, 0x54, 0x54, 0x4C, // z 100 | 0x03, 0x08, 0x36, 0x41, 0x00, 0x00, // { 101 | 0x01, 0x7F, 0x00, 0x00, 0x00, 0x00, // | 102 | 0x03, 0x41, 0x36, 0x08, 0x00, 0x00, // } 103 | 0x04, 0x02, 0x01, 0x02, 0x01, 0x00, // ~ 104 | 0x05, 0xFF, 0x81, 0x81, 0x81, 0xFF, //  105 | 106 | 0x05, 0x7E, 0x11, 0x91, 0x51, 0x7E, // Ą 107 | 0x05, 0x3C, 0x42, 0x46, 0x43, 0x24, //  108 | 0x05, 0x7F, 0x49, 0x49, 0xC1, 0x81, // ‚ 109 | 0x05, 0x7F, 0x48, 0x44, 0x42, 0x40, // ƒ 110 | 0x05, 0x7E, 0x04, 0x0A, 0x11, 0x7E, // „ 111 | 0x05, 0x3C, 0x42, 0x46, 0x43, 0x3C, // … 112 | 0x05, 0x24, 0x4A, 0x4E, 0x4B, 0x32, // † 113 | 0x05, 0x62, 0x56, 0x4B, 0x4A, 0x46, // ‡ 114 | 0x05, 0x69, 0x59, 0x49, 0x4D, 0x4B, // ˆ 115 | 116 | 0x05, 0x20, 0x54, 0x54, 0xF8, 0x80, // ą 117 | 0x04, 0x38, 0x44, 0x46, 0x45, 0x00, // Š 118 | 0x05, 0x38, 0x54, 0x54, 0xD4, 0x98, // ‹ 119 | 0x04, 0x08, 0x3F, 0x42, 0x40, 0x00, // Ś 120 | 0x05, 0x7C, 0x04, 0x06, 0x05, 0x78, // Ť 121 | 0x05, 0x38, 0x44, 0x46, 0x45, 0x38, // Ž 122 | 0x05, 0x48, 0x54, 0x56, 0x55, 0x24, // Ź 123 | 0x05, 0x64, 0x54, 0x56, 0x55, 0x4C, //  124 | 0x05, 0x64, 0x54, 0x55, 0x54, 0x4C, // ‘ 125 | }; 126 | 127 | #endif 128 | 129 | -------------------------------------------------------------------------------- /small5x7bold_font.h: -------------------------------------------------------------------------------- 1 | #ifndef Small5x7PLBold_font_h 2 | #define Small5x7PLBold_font_h 3 | 4 | #include "Arduino.h" 5 | 6 | const uint8_t Small5x7PLBold[] PROGMEM = 7 | { 8 | -5, 8, ' ', '~'+1+18, // -width, height, firstChar, lastChar 9 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // 10 | 0x02, 0x5F, 0x5F, 0x00, 0x00, 0x00, // ! 11 | 0x05, 0x03, 0x03, 0x00, 0x03, 0x03, // " 12 | 0x05, 0x14, 0x7F, 0x14, 0x7F, 0x14, // # 13 | 0x05, 0x24, 0x4A, 0xFF, 0x4A, 0x34, // $ 14 | 0x04, 0x61, 0x7C, 0x1F, 0x43, 0x00, // % 15 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // & 16 | 0x04, 0x06, 0x09, 0x09, 0x06, 0x00, // ' 17 | 0x03, 0x3E, 0x7F, 0x41, 0x00, 0x00, // ( 18 | 0x03, 0x41, 0x7F, 0x3E, 0x00, 0x00, // ) 19 | 0x05, 0x14, 0x08, 0x1C, 0x08, 0x14, // * 20 | 0x05, 0x08, 0x08, 0x3E, 0x08, 0x08, // + 21 | 0x03, 0x80, 0xC0, 0x40, 0x00, 0x00, // , 22 | 0x05, 0x08, 0x08, 0x08, 0x08, 0x08, // - 23 | 0x02, 0x60, 0x60, 0x00, 0x00, 0x00, // . 24 | 0x04, 0x60, 0x7C, 0x1F, 0x03, 0x00, // / 25 | 0x05, 0x3E, 0x7F, 0x41, 0x7F, 0x3E, // 0 26 | 0x04, 0x42, 0x7F, 0x7F, 0x40, 0x00, // 1 27 | 0x05, 0x62, 0x73, 0x59, 0x4F, 0x46, // 2 28 | 0x05, 0x22, 0x63, 0x49, 0x7F, 0x36, // 3 29 | 0x05, 0x0F, 0x0F, 0x08, 0x7F, 0x7F, // 4 30 | 0x05, 0x4F, 0x4F, 0x49, 0x79, 0x31, // 5 31 | 0x05, 0x3E, 0x7F, 0x49, 0x7B, 0x32, // 6 32 | 0x05, 0x01, 0x71, 0x79, 0x0F, 0x07, // 7 33 | 0x05, 0x36, 0x7F, 0x49, 0x7F, 0x36, // 8 34 | 0x05, 0x26, 0x6F, 0x49, 0x7F, 0x3E, // 9 35 | 0x02, 0x28, 0x28, 0x00, 0x00, 0x00, // : 36 | 0x03, 0x80, 0xC8, 0x48, 0x00, 0x00, // ; 37 | 0x05, 0x08, 0x1C, 0x36, 0x63, 0x41, // < 38 | 0x05, 0x14, 0x14, 0x14, 0x14, 0x14, // = 39 | 0x05, 0x41, 0x63, 0x36, 0x1C, 0x08, // > 40 | 0x05, 0x02, 0x53, 0x59, 0x0F, 0x06, // ? 41 | 0x05, 0x3E, 0x7F, 0x5D, 0x5F, 0x4E, // @ 42 | 0x05, 0x7E, 0x7F, 0x11, 0x7F, 0x7E, // A 43 | 0x05, 0x7F, 0x7F, 0x49, 0x7F, 0x36, // B 44 | 0x05, 0x3E, 0x7F, 0x41, 0x63, 0x22, // C 45 | 0x05, 0x7F, 0x7F, 0x41, 0x7F, 0x3E, // D 46 | 0x05, 0x7F, 0x7F, 0x49, 0x49, 0x41, // E 47 | 0x05, 0x7F, 0x7F, 0x09, 0x09, 0x01, // F 48 | 0x05, 0x3E, 0x7F, 0x41, 0x79, 0x3A, // G 49 | 0x05, 0x7F, 0x7F, 0x08, 0x7F, 0x7F, // H 50 | 0x02, 0x7F, 0x7F, 0x00, 0x00, 0x00, // I 51 | 0x05, 0x21, 0x61, 0x41, 0x7F, 0x3F, // J 52 | 0x05, 0x7F, 0x7F, 0x1C, 0x36, 0x63, // K 53 | 0x05, 0x7F, 0x7F, 0x40, 0x40, 0x40, // L 54 | 0x05, 0x7F, 0x7E, 0x1C, 0x7E, 0x7F, // M 55 | 0x05, 0x7F, 0x7E, 0x04, 0x08, 0x7F, // N 56 | 0x05, 0x3E, 0x7F, 0x41, 0x7F, 0x3E, // O 57 | 0x05, 0x7F, 0x7F, 0x11, 0x1F, 0x0E, // P 58 | 0x05, 0x3E, 0x7F, 0xC1, 0xFF, 0xBE, // Q 59 | 0x05, 0x7F, 0x7F, 0x11, 0x7F, 0x6E, // R 60 | 0x05, 0x26, 0x6F, 0x49, 0x7B, 0x32, // S 61 | 0x04, 0x01, 0x7F, 0x7F, 0x01, 0x00, // T 62 | 0x05, 0x3F, 0x7F, 0x40, 0x7F, 0x3F, // U 63 | 0x05, 0x07, 0x1F, 0x78, 0x1F, 0x07, // V 64 | 0x05, 0x1F, 0x7F, 0x18, 0x7F, 0x1F, // W 65 | 0x05, 0x63, 0x77, 0x1C, 0x77, 0x63, // X 66 | 0x05, 0x07, 0x0F, 0x78, 0x0F, 0x07, // Y 67 | 0x05, 0x71, 0x79, 0x4D, 0x47, 0x43, // Z 68 | 0x04, 0x7F, 0x7F, 0x41, 0x41, 0x00, // [ 69 | 0x05, 0x03, 0x06, 0x0C, 0x18, 0x30, // BackSlash 70 | 0x04, 0x41, 0x41, 0x7F, 0x7F, 0x00, // ] 71 | 0x05, 0x04, 0x06, 0x03, 0x06, 0x04, // ^ 72 | 0x05, 0x80, 0x80, 0x80, 0x80, 0x80, // _ 73 | 0x03, 0x01, 0x03, 0x02, 0x00, 0x00, // ` 74 | 0x05, 0x30, 0x7A, 0x4A, 0x7E, 0x7C, // a 75 | 0x05, 0x3F, 0x7F, 0x44, 0x7C, 0x38, // b 76 | 0x05, 0x38, 0x7C, 0x44, 0x44, 0x44, // c 77 | 0x05, 0x38, 0x7C, 0x44, 0x7F, 0x7F, // d 78 | 0x05, 0x38, 0x7C, 0x54, 0x5C, 0x18, // e 79 | 0x04, 0x7E, 0x7F, 0x09, 0x01, 0x00, // f 80 | 0x05, 0x98, 0xBC, 0xA4, 0xFC, 0x58, // g 81 | 0x05, 0x7F, 0x7F, 0x04, 0x7C, 0x78, // h 82 | 0x02, 0x7D, 0x7D, 0x00, 0x00, 0x00, // i 83 | 0x05, 0x40, 0xC0, 0x80, 0xFD, 0x7D, // j 84 | 0x05, 0x7F, 0x7F, 0x38, 0x6C, 0x44, // k 85 | 0x04, 0x3F, 0x7F, 0x40, 0x40, 0x00, // l 86 | 0x05, 0x78, 0x7C, 0x18, 0x7C, 0x78, // m 87 | 0x05, 0x7C, 0x7C, 0x04, 0x7C, 0x78, // n 88 | 0x05, 0x38, 0x7C, 0x44, 0x7C, 0x38, // o 89 | 0x05, 0xFC, 0xFC, 0x24, 0x3C, 0x18, // p 90 | 0x05, 0x18, 0x3C, 0x24, 0xFC, 0xFC, // q 91 | 0x05, 0x7C, 0x7C, 0x04, 0x0C, 0x08, // r 92 | 0x05, 0x48, 0x5C, 0x54, 0x74, 0x24, // s 93 | 0x05, 0x04, 0x3F, 0x7F, 0x44, 0x40, // t 94 | 0x05, 0x3C, 0x7C, 0x40, 0x7C, 0x7C, // u 95 | 0x05, 0x1C, 0x3C, 0x60, 0x3C, 0x1C, // v 96 | 0x05, 0x1C, 0x7C, 0x18, 0x7C, 0x1C, // w 97 | 0x05, 0x44, 0x6C, 0x10, 0x6C, 0x44, // x 98 | 0x05, 0x9C, 0xBC, 0xA0, 0xFC, 0x7C, // y 99 | 0x05, 0x64, 0x74, 0x54, 0x5C, 0x4C, // z 100 | 0x04, 0x08, 0x3E, 0x77, 0x41, 0x00, // { 101 | 0x02, 0x7F, 0x7F, 0x00, 0x00, 0x00, // | 102 | 0x04, 0x41, 0x77, 0x3E, 0x08, 0x00, // } 103 | 0x04, 0x02, 0x01, 0x02, 0x01, 0x00, // ~ 104 | 0x05, 0x7F, 0x41, 0x41, 0x41, 0x7F, //  105 | 106 | 0x05, 0x7E, 0x7F, 0x91, 0xFF, 0x7E, // € 107 | 0x05, 0x3C, 0x7E, 0x46, 0x43, 0x42, //  108 | 0x05, 0x7F, 0x7F, 0x49, 0xC1, 0x81, // ‚ 109 | 0x05, 0x7F, 0x7F, 0x48, 0x44, 0x40, // ƒ 110 | 0x05, 0x7E, 0x7E, 0x0A, 0x7D, 0x7E, // „ 111 | 0x05, 0x3C, 0x7E, 0x46, 0x7B, 0x3C, // … 112 | 0x05, 0x24, 0x6E, 0x4E, 0x7B, 0x32, // † 113 | 0x05, 0x62, 0x76, 0x5B, 0x4E, 0x46, // ‡ 114 | 0x05, 0x69, 0x79, 0x5D, 0x4F, 0x4B, // ˆ 115 | 116 | 0x05, 0x20, 0x74, 0x54, 0xFC, 0xB8, // ‰ 117 | 0x05, 0x38, 0x7C, 0x47, 0x45, 0x44, // Š 118 | 0x05, 0x38, 0x7C, 0x54, 0xDC, 0x98, // ‹ 119 | 0x05, 0x10, 0x3F, 0x7F, 0x42, 0x40, // Ś 120 | 0x05, 0x7C, 0x7C, 0x07, 0x7D, 0x78, // Ť 121 | 0x05, 0x38, 0x7C, 0x47, 0x7D, 0x38, // Ž 122 | 0x05, 0x48, 0x5C, 0x57, 0x75, 0x24, // Ź 123 | 0x05, 0x64, 0x74, 0x57, 0x5D, 0x4C, //  124 | 0x05, 0x64, 0x74, 0x55, 0x5C, 0x4C, // ‘ 125 | }; 126 | 127 | #endif 128 | 129 | -------------------------------------------------------------------------------- /term9x14_font.h: -------------------------------------------------------------------------------- 1 | #ifndef Term9x14_font_h 2 | #define Term9x14_font_h 3 | 4 | const uint8_t Term9x14[] PROGMEM = 5 | { 6 | -9, 16, ' ', '~'+1, 7 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 8 | 0x05, 0x3E, 0x00, 0xFF, 0x33, 0xFF, 0x33, 0xFF, 0x33, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ! 9 | 0x07, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, // " 10 | 0x09, 0x20, 0x01, 0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x1F, 0x20, 0x01, 0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x1F, 0x20, 0x01, // # 11 | 0x09, 0x38, 0x06, 0x3C, 0x0E, 0x6C, 0x0C, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x8C, 0x0B, 0x1C, 0x0F, 0x18, 0x07, // $ 12 | 0x09, 0x1E, 0x30, 0x33, 0x3C, 0x33, 0x1F, 0xDE, 0x07, 0xF0, 0x01, 0x7C, 0x1E, 0x1F, 0x33, 0x07, 0x33, 0x01, 0x1E, // % 13 | 0x09, 0x1E, 0x1F, 0xBF, 0x3F, 0xF3, 0x31, 0xE1, 0x20, 0xF3, 0x31, 0xBF, 0x3F, 0x1E, 0x1F, 0x80, 0x3B, 0x80, 0x31, // & 14 | 0x03, 0x0B, 0x00, 0x0F, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ' 15 | 0x05, 0xF8, 0x07, 0xFE, 0x3F, 0xFF, 0x7F, 0x07, 0x78, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ( 16 | 0x05, 0x01, 0x40, 0x07, 0x78, 0xFF, 0x7F, 0xFE, 0x3F, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ) 17 | 0x09, 0x80, 0x00, 0xA0, 0x02, 0xE0, 0x03, 0xE0, 0x03, 0xC0, 0x01, 0xE0, 0x03, 0xE0, 0x03, 0xA0, 0x02, 0x80, 0x00, // * 18 | 0x09, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, // + 19 | 0x03, 0x00, 0xB0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // , 20 | 0x09, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, // - 21 | 0x03, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // . 22 | 0x09, 0x00, 0x30, 0x00, 0x3C, 0x00, 0x3F, 0xC0, 0x0F, 0xF0, 0x03, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0x00, 0x03, 0x00, // / 23 | 0x09, 0xFC, 0x0F, 0xFE, 0x1F, 0xFF, 0x3F, 0x83, 0x37, 0xE1, 0x21, 0x7B, 0x30, 0xFF, 0x3F, 0xFE, 0x1F, 0xFC, 0x0F, // 0 24 | 0x09, 0x04, 0x20, 0x04, 0x20, 0x06, 0x20, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, // 1 25 | 0x09, 0x0C, 0x38, 0x0E, 0x3C, 0x0F, 0x3E, 0x03, 0x27, 0x81, 0x23, 0xC3, 0x21, 0xFF, 0x20, 0x7E, 0x20, 0x3C, 0x20, // 2 26 | 0x09, 0x0C, 0x0C, 0x0E, 0x1C, 0x4F, 0x3C, 0x43, 0x30, 0x41, 0x20, 0x43, 0x30, 0xFF, 0x3F, 0xFE, 0x1F, 0xBC, 0x0F, // 3 27 | 0x09, 0x00, 0x0F, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x08, 0x1F, 0x08, 0x83, 0x3F, 0x80, 0x3F, 0x00, 0x08, 0x00, 0x08, // 4 28 | 0x09, 0x3F, 0x0C, 0x3F, 0x1C, 0x3F, 0x3C, 0x21, 0x30, 0x21, 0x20, 0x61, 0x30, 0xE1, 0x3F, 0xC1, 0x1F, 0x81, 0x0F, // 5 29 | 0x09, 0xE0, 0x0F, 0xF8, 0x1F, 0xFC, 0x3F, 0x5E, 0x30, 0x47, 0x20, 0xC3, 0x30, 0xC1, 0x3F, 0x80, 0x1F, 0x00, 0x0F, // 6 30 | 0x09, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x3C, 0x81, 0x3F, 0xF1, 0x3F, 0xFF, 0x03, 0x7F, 0x00, 0x0F, 0x00, // 7 31 | 0x09, 0x1C, 0x0F, 0xBE, 0x1F, 0xFF, 0x3F, 0xE3, 0x30, 0x41, 0x20, 0xE3, 0x30, 0xFF, 0x3F, 0xBE, 0x1F, 0x1C, 0x0F, // 8 32 | 0x09, 0x3C, 0x00, 0x7E, 0x00, 0xFF, 0x20, 0xC3, 0x30, 0x81, 0x38, 0x83, 0x1E, 0xFF, 0x0F, 0xFE, 0x07, 0xFC, 0x01, // 9 33 | 0x03, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // : 34 | 0x03, 0x60, 0xB0, 0x60, 0xF0, 0x60, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ; 35 | 0x08, 0x80, 0x00, 0xC0, 0x01, 0xE0, 0x03, 0x70, 0x07, 0x38, 0x0E, 0x1C, 0x1C, 0x0C, 0x18, 0x04, 0x10, 0x00, 0x00, // < 36 | 0x09, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0x01, // = 37 | 0x08, 0x04, 0x10, 0x0C, 0x18, 0x1C, 0x1C, 0x38, 0x0E, 0x70, 0x07, 0xE0, 0x03, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, // > 38 | 0x09, 0x06, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, 0x33, 0xC1, 0x33, 0xF3, 0x33, 0xFF, 0x00, 0x3F, 0x00, 0x1E, 0x00, // ? 39 | 0x09, 0xFC, 0x0F, 0xFE, 0x1F, 0xFF, 0x3F, 0xE3, 0x31, 0xF1, 0x23, 0xF1, 0x23, 0x13, 0x23, 0xFF, 0x33, 0xFE, 0x33, // @ 40 | 0x09, 0xFC, 0x3F, 0xFE, 0x3F, 0xFF, 0x3F, 0x03, 0x01, 0x01, 0x01, 0x03, 0x01, 0xFF, 0x3F, 0xFE, 0x3F, 0xFC, 0x3F, // A 41 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x41, 0x20, 0x41, 0x20, 0xE3, 0x30, 0xFF, 0x3F, 0xBE, 0x1F, 0x1C, 0x0F, // B 42 | 0x09, 0xFC, 0x0F, 0xFE, 0x1F, 0xFF, 0x3F, 0x03, 0x30, 0x01, 0x20, 0x03, 0x30, 0x0F, 0x3C, 0x0E, 0x1C, 0x0C, 0x0C, // C 43 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x01, 0x20, 0x01, 0x20, 0x07, 0x38, 0xFF, 0x3F, 0xFE, 0x1F, 0xF8, 0x07, // D 44 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x41, 0x20, 0x41, 0x20, 0x41, 0x20, 0x41, 0x20, 0x41, 0x20, 0x01, 0x20, // E 45 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x01, 0x00, // F 46 | 0x09, 0xFC, 0x0F, 0xFE, 0x1F, 0xFF, 0x3F, 0x03, 0x30, 0x81, 0x20, 0x83, 0x30, 0x8F, 0x3F, 0x8E, 0x1F, 0x8C, 0x0F, // G 47 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, // H 48 | 0x09, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x01, 0x20, 0x01, 0x20, 0x01, 0x20, // I 49 | 0x09, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x30, 0x00, 0x20, 0x00, 0x30, 0xFF, 0x3F, 0xFF, 0x1F, 0xFF, 0x0F, // J 50 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xE0, 0x01, 0xF8, 0x07, 0x3C, 0x0F, 0x1F, 0x3E, 0x0F, 0x3C, 0x03, 0x30, // K 51 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, // L 52 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xF8, 0x00, 0xC0, 0x03, 0xF8, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, // M 53 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x7C, 0x00, 0xF0, 0x01, 0xC0, 0x07, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, // N 54 | 0x09, 0xFC, 0x0F, 0xFE, 0x1F, 0xFF, 0x3F, 0x03, 0x30, 0x01, 0x20, 0x03, 0x30, 0xFF, 0x3F, 0xFE, 0x1F, 0xFC, 0x0F, // O 55 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x81, 0x00, 0x81, 0x00, 0xC3, 0x00, 0xFF, 0x00, 0x7E, 0x00, 0x3C, 0x00, // P 56 | 0x09, 0xFC, 0x0F, 0xFE, 0x1F, 0xFF, 0x3F, 0x03, 0x30, 0x01, 0x60, 0x03, 0xF0, 0xFF, 0xFF, 0xFE, 0x9F, 0xFC, 0x0F, // Q 57 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x81, 0x00, 0x81, 0x01, 0xC3, 0x1F, 0xFF, 0x3F, 0x7E, 0x3E, 0x3C, 0x20, // R 58 | 0x09, 0x3C, 0x0C, 0x7E, 0x1C, 0x7F, 0x3C, 0xE3, 0x30, 0xE1, 0x21, 0xC3, 0x31, 0x8F, 0x3F, 0x8E, 0x1F, 0x0C, 0x0F, // S 59 | 0x09, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, // T 60 | 0x09, 0xFF, 0x0F, 0xFF, 0x1F, 0xFF, 0x3F, 0x00, 0x30, 0x00, 0x20, 0x00, 0x30, 0xFF, 0x3F, 0xFF, 0x1F, 0xFF, 0x0F, // U 61 | 0x09, 0x3F, 0x00, 0xFF, 0x01, 0xFF, 0x0F, 0xC0, 0x3F, 0x00, 0x3C, 0xC0, 0x3F, 0xFF, 0x0F, 0xFF, 0x01, 0x3F, 0x00, // V 62 | 0x09, 0xFF, 0x01, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x3F, 0xC0, 0x01, 0x00, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x01, // W 63 | 0x09, 0x0F, 0x3C, 0x3F, 0x3F, 0xFF, 0x3F, 0xF0, 0x03, 0xC0, 0x00, 0xF0, 0x03, 0xFF, 0x3F, 0x3F, 0x3F, 0x0F, 0x3C, // X 64 | 0x09, 0x3F, 0x00, 0xFF, 0x00, 0xFF, 0x01, 0xC0, 0x3F, 0x80, 0x3F, 0xC0, 0x3F, 0xFF, 0x01, 0xFF, 0x00, 0x3F, 0x00, // Y 65 | 0x09, 0x01, 0x38, 0x01, 0x3E, 0x81, 0x3F, 0xC1, 0x27, 0xE1, 0x21, 0x79, 0x20, 0x3F, 0x20, 0x1F, 0x20, 0x07, 0x20, // Z 66 | 0x05, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x01, 0x20, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // [ 67 | 0x09, 0x03, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3F, 0x00, 0x3C, 0x00, 0x30, // BackSlash 68 | 0x05, 0x01, 0x20, 0x01, 0x20, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ] 69 | 0x09, 0x04, 0x00, 0x04, 0x00, 0x06, 0x00, 0x07, 0x00, 0x03, 0x00, 0x07, 0x00, 0x06, 0x00, 0x06, 0x00, 0x04, 0x00, // ^ 70 | 0x09, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, // _ 71 | 0x06, 0x06, 0x00, 0x0F, 0x00, 0x09, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ` (deg) 72 | 0x09, 0x00, 0x1E, 0x40, 0x3F, 0x60, 0x3F, 0x20, 0x21, 0x20, 0x21, 0x20, 0x31, 0xE0, 0x3F, 0xE0, 0x3F, 0xC0, 0x3F, // a 73 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x60, 0x30, 0x20, 0x20, 0x60, 0x30, 0xE0, 0x3F, 0xC0, 0x1F, 0x80, 0x0F, // b 74 | 0x09, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0x60, 0x30, 0x20, 0x20, 0x20, 0x20, 0x60, 0x30, 0x60, 0x30, 0x40, 0x10, // c 75 | 0x09, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0x60, 0x30, 0x20, 0x20, 0x60, 0x30, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, // d 76 | 0x09, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0x60, 0x32, 0x20, 0x22, 0x60, 0x22, 0xE0, 0x33, 0xC0, 0x33, 0x80, 0x13, // e 77 | 0x09, 0x20, 0x00, 0x20, 0x00, 0xFE, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x21, 0x00, 0x23, 0x00, 0x23, 0x00, 0x02, 0x00, // f 78 | 0x09, 0x80, 0x47, 0xC0, 0x4F, 0xE0, 0xDF, 0x60, 0xD8, 0x20, 0x90, 0x60, 0xD8, 0xE0, 0xFF, 0xE0, 0x7F, 0xE0, 0x3F, // g 79 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x60, 0x00, 0x20, 0x00, 0x60, 0x00, 0xE0, 0x3F, 0xC0, 0x3F, 0x80, 0x3F, // h 80 | 0x07, 0x20, 0x20, 0x20, 0x20, 0xE3, 0x3F, 0xE3, 0x3F, 0xE3, 0x3F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, // i 81 | 0x06, 0x00, 0x40, 0x20, 0xC0, 0x20, 0xC0, 0xE3, 0xFF, 0xE3, 0xFF, 0xE3, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // j 82 | 0x09, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x07, 0x80, 0x0F, 0xC0, 0x1D, 0xE0, 0x38, 0x60, 0x30, 0x20, 0x20, // k 83 | 0x07, 0x01, 0x20, 0x01, 0x20, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, // l 84 | 0x09, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x00, 0xC0, 0x1F, 0xE0, 0x00, 0xE0, 0x3F, 0xE0, 0x3F, 0xC0, 0x3F, // m 85 | 0x09, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x3F, 0x60, 0x00, 0x20, 0x00, 0x60, 0x00, 0xE0, 0x3F, 0xC0, 0x3F, 0x80, 0x3F, // n 86 | 0x09, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0x60, 0x30, 0x20, 0x20, 0x60, 0x30, 0xE0, 0x3F, 0xC0, 0x1F, 0x80, 0x0F, // o 87 | 0x09, 0xE0, 0xFF, 0xE0, 0xFF, 0xE0, 0xFF, 0x60, 0x30, 0x20, 0x20, 0x60, 0x30, 0xE0, 0x3F, 0xC0, 0x1F, 0x80, 0x0F, // p 88 | 0x09, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x60, 0x30, 0xE0, 0xFF, 0xE0, 0xFF, 0xE0, 0xFF, // q 89 | 0x09, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x3F, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x40, 0x00, // r 90 | 0x09, 0xC0, 0x10, 0xE0, 0x31, 0xE0, 0x31, 0x20, 0x23, 0x20, 0x27, 0x20, 0x26, 0x60, 0x3C, 0x60, 0x3C, 0x40, 0x18, // s 91 | 0x07, 0x20, 0x00, 0x20, 0x00, 0xFE, 0x1F, 0xFE, 0x3F, 0xFE, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, // t 92 | 0x09, 0xE0, 0x1F, 0xE0, 0x3F, 0xE0, 0x3F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x30, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x3F, // u 93 | 0x09, 0xE0, 0x03, 0xE0, 0x07, 0xE0, 0x1F, 0x00, 0x3C, 0x00, 0x30, 0x00, 0x3C, 0xE0, 0x1F, 0xE0, 0x07, 0xE0, 0x03, // v 94 | 0x09, 0xE0, 0x07, 0xE0, 0x3F, 0xE0, 0x3F, 0x00, 0x3E, 0xC0, 0x07, 0x00, 0x3E, 0xE0, 0x3F, 0xE0, 0x3F, 0xE0, 0x07, // w 95 | 0x09, 0x60, 0x30, 0xE0, 0x3D, 0xE0, 0x3D, 0x80, 0x0F, 0x00, 0x07, 0x80, 0x0F, 0xE0, 0x3D, 0xE0, 0x3D, 0x60, 0x30, // x 96 | 0x09, 0xE0, 0x83, 0xE0, 0x8F, 0xE0, 0xDF, 0x00, 0xFC, 0x00, 0x70, 0x00, 0x3C, 0xE0, 0x1F, 0xE0, 0x0F, 0xE0, 0x03, // y 97 | 0x09, 0x20, 0x30, 0x20, 0x38, 0x20, 0x3C, 0x20, 0x2E, 0x20, 0x27, 0xA0, 0x23, 0xE0, 0x21, 0xE0, 0x20, 0x60, 0x20, // z 98 | 0x06, 0x80, 0x00, 0xFE, 0x3F, 0xFF, 0x7F, 0x7F, 0x7F, 0x01, 0x40, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // { 99 | 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // | 100 | 0x06, 0x01, 0x40, 0x01, 0x40, 0x7F, 0x7F, 0xFF, 0x7F, 0xFE, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // } 101 | 0x09, 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x03, 0x00, 0x01, 0x00, 0x01, 0x00, // ~ 102 | 0x09, 0xE0, 0x3F, 0xF8, 0x3F, 0xFC, 0x3F, 0x1F, 0x30, 0x07, 0x30, 0x1F, 0x30, 0xFC, 0x3F, 0xF8, 0x3F, 0xE0, 0x3F //  103 | }; 104 | 105 | #endif 106 | -------------------------------------------------------------------------------- /times_dig_16x24_font.h: -------------------------------------------------------------------------------- 1 | #ifndef times_dig_16x24_font_h 2 | #define times_dig_16x24_font_h 3 | 4 | const uint8_t times_dig_16x24[] PROGMEM ={ 5 | -16, 24, '0', '0'+10, 6 | 0x0F, 0x80, 0xFF, 0x01, 0xF0, 0xFF, 0x0F, 0xF8, 0xFF, 0x1F, 0xFC, 0xFF, 0x3F, 0xFE, 0xFF, 0x7F, 0x07, 0x00, 0xE0, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x03, 0x00, 0xC0, 0xFE, 0xFF, 0x7F, 0xFC, 0xFF, 0x3F, 0xF8, 0xFF, 0x1F, 0xF0, 0xFF, 0x0F, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, // 0 7 | 0x0C, 0x10, 0x00, 0x80, 0x18, 0x00, 0x80, 0x08, 0x00, 0x80, 0x1C, 0x00, 0xC0, 0xFC, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 1 8 | 0x10, 0x00, 0x00, 0x80, 0x70, 0x00, 0xC0, 0x1C, 0x00, 0xE0, 0x1C, 0x00, 0xF0, 0x0E, 0x00, 0xF8, 0x0F, 0x00, 0xFE, 0x0F, 0x00, 0xFF, 0x0F, 0x80, 0xFB, 0x1F, 0xE0, 0xF9, 0x3F, 0xF8, 0xF8, 0xFF, 0x3F, 0xF8, 0xFE, 0x1F, 0xF8, 0xFE, 0x0F, 0xF8, 0xFC, 0x07, 0xF8, 0xF0, 0x01, 0xFC, 0x00, 0x00, 0x0E, // 2 9 | 0x10, 0x00, 0x00, 0x30, 0x08, 0x00, 0x78, 0x0C, 0x00, 0xF8, 0x04, 0x00, 0xF0, 0x02, 0x00, 0xF0, 0x02, 0x04, 0xE0, 0x03, 0x0C, 0xC0, 0x03, 0x0E, 0xC0, 0x07, 0x1E, 0xC0, 0x8F, 0x3F, 0x40, 0xFF, 0xFE, 0x70, 0xFF, 0xFE, 0x7F, 0x7E, 0xFC, 0x3F, 0x7E, 0xFC, 0x1F, 0x38, 0xF8, 0x0F, 0x00, 0xF0, 0x03, // 3 10 | 0x10, 0x00, 0xC0, 0x07, 0x00, 0xA0, 0x07, 0x00, 0x90, 0x07, 0x00, 0x88, 0x07, 0x00, 0x86, 0x07, 0x00, 0x81, 0x07, 0x80, 0x80, 0x07, 0x60, 0x80, 0x07, 0x10, 0x80, 0x07, 0xF8, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x07, 0x00, 0x80, 0x07, // 4 11 | 0x0F, 0x00, 0x0C, 0x30, 0x80, 0x0F, 0x78, 0xF0, 0x0F, 0xF8, 0x9E, 0x0F, 0xF8, 0x9F, 0x0F, 0xF0, 0x9F, 0x0F, 0xE0, 0x9F, 0x1F, 0xC0, 0x1F, 0x1F, 0xC0, 0x1F, 0x1F, 0x80, 0x1F, 0x3F, 0x80, 0x1F, 0x7E, 0x80, 0x1F, 0x7C, 0x40, 0x1F, 0xFC, 0x61, 0x0F, 0xF8, 0x3F, 0x01, 0xE0, 0x0F, 0x00, 0x00, 0x00, // 5 12 | 0x10, 0x00, 0xF8, 0x03, 0x00, 0xFF, 0x0F, 0x80, 0xFF, 0x3F, 0xE0, 0xFF, 0x3F, 0xF0, 0xFF, 0x7F, 0xF8, 0x07, 0xF8, 0x78, 0x04, 0xC0, 0x3C, 0x04, 0x80, 0x1C, 0x04, 0x80, 0x0E, 0x0C, 0x80, 0x06, 0x3C, 0xC0, 0x02, 0xFC, 0x7F, 0x03, 0xF8, 0x7F, 0x03, 0xF8, 0x3F, 0x01, 0xF0, 0x1F, 0x01, 0xC0, 0x07, // 6 13 | 0x0F, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x80, 0x1F, 0x00, 0xF0, 0x1F, 0x00, 0x7E, 0x1F, 0xC0, 0x0F, 0x1F, 0xF8, 0x01, 0x1F, 0x3E, 0x00, 0xDF, 0x07, 0x00, 0xFF, 0x01, 0x00, 0x3F, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, // 7 14 | 0x0F, 0xF0, 0x00, 0x1F, 0xFC, 0xC3, 0x3F, 0xFE, 0xC7, 0x7F, 0xFE, 0xEF, 0x7F, 0xFF, 0x7F, 0xE0, 0xC3, 0x3F, 0xC0, 0x81, 0x3F, 0x80, 0x01, 0x3F, 0x80, 0x01, 0x7E, 0x80, 0x01, 0xFE, 0xC1, 0x07, 0xFF, 0x7F, 0xFE, 0xFB, 0x7F, 0xFE, 0xF3, 0x3F, 0xFC, 0xE1, 0x1F, 0x78, 0x80, 0x0F, 0x00, 0x00, 0x00, // 8 15 | 0x10, 0xE0, 0x03, 0x80, 0xF8, 0x0F, 0x80, 0xFC, 0x1F, 0xC0, 0xFE, 0x1F, 0xC0, 0xFE, 0x3F, 0x40, 0x03, 0x3C, 0x60, 0x01, 0x30, 0x70, 0x01, 0x20, 0x38, 0x01, 0x20, 0x3C, 0x03, 0x20, 0x1E, 0x1E, 0xE0, 0x1F, 0xFE, 0xFF, 0x0F, 0xFC, 0xFF, 0x07, 0xF8, 0xFF, 0x03, 0xF0, 0xFF, 0x00, 0xC0, 0x1F, 0x00, // 9 16 | 0x05, 0x00, 0x00, 0x70, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // : (.) 17 | }; 18 | #endif 19 | 20 | -------------------------------------------------------------------------------- /tiny3x7_font.h: -------------------------------------------------------------------------------- 1 | #ifndef Tiny3x7PL_font_h 2 | #define Tiny3x7PL_font_h 3 | 4 | #include "Arduino.h" 5 | 6 | const uint8_t Tiny3x7PL[] PROGMEM = 7 | { 8 | -5, 8, 32, '~'+1+18, // -width, height, firstChar, lastChar 9 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // 10 | 0x01, 0x5F, 0x00, 0x00, 0x00, 0x00, // ! 11 | 0x03, 0x03, 0x00, 0x03, 0x00, 0x00, // " 12 | 0x05, 0x14, 0x7F, 0x14, 0x7F, 0x14, // # 13 | 0x03, 0x66, 0xFF, 0x5A, 0x00, 0x00, // $ 14 | 0x03, 0x31, 0x0C, 0x23, 0x00, 0x00, // % 15 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // & 16 | 0x03, 0x02, 0x05, 0x02, 0x00, 0x00, // ' 17 | 0x02, 0x3E, 0x41, 0x00, 0x00, 0x00, // ( 18 | 0x02, 0x41, 0x3E, 0x00, 0x00, 0x00, // ) 19 | 0x05, 0x14, 0x08, 0x1C, 0x08, 0x14, // * 20 | 0x03, 0x08, 0x1C, 0x08, 0x00, 0x00, // + 21 | 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, // , 22 | 0x03, 0x08, 0x08, 0x08, 0x00, 0x00, // - 23 | 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, // . 24 | 0x03, 0x70, 0x0C, 0x03, 0x00, 0x00, // / 25 | 0x03, 0x3E, 0x41, 0x3E, 0x00, 0x00, // 0 26 | 0x02, 0x02, 0x7F, 0x00, 0x00, 0x00, // 1 27 | 0x03, 0x72, 0x49, 0x46, 0x00, 0x00, // 2 28 | 0x03, 0x22, 0x49, 0x36, 0x00, 0x00, // 3 29 | 0x03, 0x0F, 0x08, 0x7F, 0x00, 0x00, // 4 30 | 0x03, 0x4F, 0x49, 0x31, 0x00, 0x00, // 5 31 | 0x03, 0x3E, 0x49, 0x32, 0x00, 0x00, // 6 32 | 0x03, 0x01, 0x79, 0x07, 0x00, 0x00, // 7 33 | 0x03, 0x36, 0x49, 0x36, 0x00, 0x00, // 8 34 | 0x03, 0x26, 0x49, 0x3E, 0x00, 0x00, // 9 35 | 0x01, 0x28, 0x00, 0x00, 0x00, 0x00, // : 36 | 0x02, 0x80, 0x48, 0x00, 0x00, 0x00, // ; 37 | 0x03, 0x08, 0x14, 0x22, 0x00, 0x00, // < 38 | 0x03, 0x14, 0x14, 0x14, 0x00, 0x00, // = 39 | 0x03, 0x22, 0x14, 0x08, 0x00, 0x00, // > 40 | 0x03, 0x02, 0x59, 0x06, 0x00, 0x00, // ? 41 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // @ 42 | 0x03, 0x7E, 0x11, 0x7E, 0x00, 0x00, // A 43 | 0x03, 0x7F, 0x49, 0x36, 0x00, 0x00, // B 44 | 0x03, 0x3E, 0x41, 0x22, 0x00, 0x00, // C 45 | 0x03, 0x7F, 0x41, 0x3E, 0x00, 0x00, // D 46 | 0x03, 0x7F, 0x49, 0x41, 0x00, 0x00, // E 47 | 0x03, 0x7F, 0x09, 0x01, 0x00, 0x00, // F 48 | 0x03, 0x3E, 0x41, 0x3A, 0x00, 0x00, // G 49 | 0x03, 0x7F, 0x08, 0x7F, 0x00, 0x00, // H 50 | 0x01, 0x7F, 0x00, 0x00, 0x00, 0x00, // I 51 | 0x03, 0x21, 0x41, 0x3F, 0x00, 0x00, // J 52 | 0x04, 0x7F, 0x08, 0x14, 0x63, 0x00, // K 53 | 0x03, 0x7F, 0x40, 0x40, 0x00, 0x00, // L 54 | 0x05, 0x7F, 0x02, 0x1C, 0x02, 0x7F, // M 55 | 0x04, 0x7F, 0x02, 0x04, 0x7F, 0x00, // N 56 | 0x03, 0x3E, 0x41, 0x3E, 0x00, 0x00, // O 57 | 0x03, 0x7F, 0x11, 0x0E, 0x00, 0x00, // P 58 | 0x03, 0x3E, 0x41, 0xBE, 0x00, 0x00, // Q 59 | 0x03, 0x7F, 0x11, 0x6E, 0x00, 0x00, // R 60 | 0x03, 0x26, 0x49, 0x32, 0x00, 0x00, // S 61 | 0x03, 0x01, 0x7F, 0x01, 0x00, 0x00, // T 62 | 0x03, 0x3F, 0x40, 0x7F, 0x00, 0x00, // U 63 | 0x03, 0x1F, 0x60, 0x1F, 0x00, 0x00, // V 64 | 0x05, 0x1F, 0x60, 0x18, 0x60, 0x1F, // W 65 | 0x03, 0x63, 0x1C, 0x63, 0x00, 0x00, // X 66 | 0x03, 0x07, 0x78, 0x07, 0x00, 0x00, // Y 67 | 0x03, 0x71, 0x49, 0x47, 0x00, 0x00, // Z 68 | 0x02, 0x7F, 0x41, 0x00, 0x00, 0x00, // [ 69 | 0x03, 0x03, 0x1C, 0x60, 0x00, 0x00, // BackSlash 70 | 0x02, 0x41, 0x7F, 0x00, 0x00, 0x00, // ] 71 | 0x03, 0x02, 0x01, 0x02, 0x00, 0x00, // ^ 72 | 0x03, 0x80, 0x80, 0x80, 0x00, 0x00, // _ 73 | 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, // ` 74 | 0x03, 0x20, 0x54, 0x78, 0x00, 0x00, // a 75 | 0x03, 0x3F, 0x44, 0x38, 0x00, 0x00, // b 76 | 0x03, 0x38, 0x44, 0x44, 0x00, 0x00, // c 77 | 0x03, 0x38, 0x44, 0x7F, 0x00, 0x00, // d 78 | 0x03, 0x38, 0x54, 0x58, 0x00, 0x00, // e 79 | 0x03, 0x7E, 0x09, 0x02, 0x00, 0x00, // f 80 | 0x03, 0x98, 0xA4, 0x58, 0x00, 0x00, // g 81 | 0x03, 0x7F, 0x04, 0x78, 0x00, 0x00, // h 82 | 0x01, 0x7D, 0x00, 0x00, 0x00, 0x00, // i 83 | 0x02, 0x80, 0x7D, 0x00, 0x00, 0x00, // j 84 | 0x03, 0x7F, 0x10, 0x6C, 0x00, 0x00, // k 85 | 0x03, 0x3F, 0x40, 0x20, 0x00, 0x00, // l 86 | 0x05, 0x78, 0x04, 0x38, 0x04, 0x78, // m 87 | 0x03, 0x7C, 0x04, 0x78, 0x00, 0x00, // n 88 | 0x03, 0x38, 0x44, 0x38, 0x00, 0x00, // o 89 | 0x03, 0xFC, 0x24, 0x18, 0x00, 0x00, // p 90 | 0x03, 0x18, 0x24, 0xFC, 0x00, 0x00, // q 91 | 0x03, 0x7C, 0x08, 0x04, 0x00, 0x00, // r 92 | 0x03, 0x48, 0x54, 0x24, 0x00, 0x00, // s 93 | 0x03, 0x04, 0x3F, 0x44, 0x00, 0x00, // t 94 | 0x03, 0x3C, 0x40, 0x7C, 0x00, 0x00, // u 95 | 0x03, 0x1C, 0x60, 0x1C, 0x00, 0x00, // v 96 | 0x05, 0x3C, 0x40, 0x30, 0x40, 0x3C, // w 97 | 0x03, 0x44, 0x38, 0x44, 0x00, 0x00, // x 98 | 0x03, 0x9C, 0xA0, 0x7C, 0x00, 0x00, // y 99 | 0x03, 0x64, 0x54, 0x4C, 0x00, 0x00, // z 100 | 0x03, 0x08, 0x36, 0x41, 0x00, 0x00, // { 101 | 0x01, 0x7F, 0x00, 0x00, 0x00, 0x00, // | 102 | 0x03, 0x41, 0x36, 0x08, 0x00, 0x00, // } 103 | 0x04, 0x02, 0x01, 0x02, 0x01, 0x00, // ~ 104 | 0x03, 0xFF, 0x81, 0xFF, 0x00, 0x00, //  105 | 106 | 0x03, 0x7E, 0x91, 0x7E, 0x00, 0x00, // Ą 107 | 0x03, 0x3C, 0x42, 0x25, 0x00, 0x00, //  108 | 0x03, 0x7F, 0x49, 0x81, 0x00, 0x00, // ‚ 109 | 0x03, 0x7F, 0x48, 0x44, 0x00, 0x00, // ƒ 110 | 0x04, 0x7E, 0x04, 0x09, 0x7E, 0x00, // „ 111 | 0x03, 0x3C, 0x42, 0x3D, 0x00, 0x00, // … 112 | 0x03, 0x24, 0x4A, 0x33, 0x00, 0x00, // † 113 | 0x03, 0x76, 0x4B, 0x46, 0x00, 0x00, // ‡ 114 | 0x03, 0x69, 0x5D, 0x4B, 0x00, 0x00, // ˆ 115 | 116 | 0x03, 0x20, 0x54, 0xF8, 0x00, 0x00, // ą 117 | 0x03, 0x38, 0x46, 0x45, 0x00, 0x00, // Š 118 | 0x03, 0x38, 0x54, 0x98, 0x00, 0x00, // ‹ 119 | 0x03, 0x10, 0x3F, 0x44, 0x00, 0x00, // Ś 120 | 0x03, 0x7C, 0x06, 0x79, 0x00, 0x00, // Ť 121 | 0x03, 0x38, 0x46, 0x39, 0x00, 0x00, // Ž 122 | 0x03, 0x48, 0x56, 0x25, 0x00, 0x00, // Ź 123 | 0x03, 0x64, 0x56, 0x4D, 0x00, 0x00, //  124 | 0x03, 0x64, 0x55, 0x4C, 0x00, 0x00, // ‘ 125 | }; 126 | 127 | #endif 128 | 129 | --------------------------------------------------------------------------------