// simple project using Arduino UNO and 128x64 SSD1306 IIC OLED Display 
// to show custom fonts for u8g2 library

// created by upir, 2023
// youtube channel: https://www.youtube.com/upir_upir

// YOUTUBE VIDEO: https://youtu.be/WIAcy5FXuAA
// SOURCE FILES: https://github.com/upiir/u8g2_custom_fonts

// Links from the video:
// Custom fonts FAQ: https://github.com/olikraus/u8g2/blob/c7dc077995ca513337a7d2a1970df693e18ee308/doc/faq.txt#L245
// bdfconv utility: https://github.com/olikraus/u8g2/tree/master/tools/font/bdfconv
// 128x64 SSD1306 OLED Display 1.54": https://s.click.aliexpress.com/e/_DCYdWXb 
// 128x64 SSD1306 OLED Display 0.96": https://s.click.aliexpress.com/e/_DCKdvnh
// 128x64 SSD1306 OLED Display 2.42": https://s.click.aliexpress.com/e/_DFdMoTh
// Arduino UNO: https://s.click.aliexpress.com/e/_AXDw1h
// Arduino breadboard prototyping shield: https://s.click.aliexpress.com/e/_ApbCwx
// Fony Font Editor: http://hukka.ncn.fi/?fony
// Photopea (online graphics editor like Photoshop): https://www.photopea.com/


// Related videos with Arduino UNO and 128x64 OLED screen:
// Arduino OLED menu: https://youtu.be/HVHVkKt-ldc
// U8g vs U8g2: https://youtu.be/K5e0lFRvZ2E
// Arduino Parking Sensor - https://youtu.be/sEWw087KOj0
// Turbo pressure gauge with Arduino and OLED display - https://youtu.be/JXmw1xOlBdk
// Arduino Car Cluster with OLED Display - https://youtu.be/El5SJelwV_0
// Knob over OLED Display - https://youtu.be/SmbcNx7tbX8
// Arduino + OLED = 3D ? - https://youtu.be/kBAcaA7NAlA
// Arduino OLED Gauge - https://youtu.be/xI6dXTA02UQ
// Smaller & Faster Arduino - https://youtu.be/4GfPQoIRqW8
// Save Image from OLED Display to PC - https://youtu.be/Ft2pRMVm44E


#include <Arduino.h>
#include <U8g2lib.h>

#include <Wire.h> // library requires for IIC communication

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // initialization for the used OLED display

/*
  Fontname: big_digits_aldo
  Copyright: Created with Fony 1.4.7
  Glyphs: 10/256
  BBX Build Mode: 0
*/
/*
  Fontname: Aldo the Apache
  Copyright: 
  Glyphs: 91/256
  BBX Build Mode: 0
*/
const uint8_t aldo_the_apache[1253] U8G2_FONT_SECTION("aldo_the_apache") = 
  "[\0\3\4\4\4\2\5\5\14\22\0\375\14\0\15\377\1\311\3a\4\310 \5\0B\12!\10\302C"
  "\212\207!\2\42\10V\342\13!:\11#\32\313\302M\21Q!Q!\61\25\65!Q!\261\7\263 "
  "\341 Q!\61\0$\20\347><\241\207\244\342\321Q\223\207\64!\0% \313B\36\302\220\262\22\261"
  " \21\241\260\22\61\22q\240\20\302\220\62\21IR\204\302J\2I\0&\15\231\313\275\341i\17l\205"
  "\303\241\0'\6R\342\11\5(\12\344\276\232$\371'\222\1)\13\344\276\212\21\42\371\247\24\0*\16"
  "f[,\241\20\221\223\61\22\241\20\0+\14\231\313\275\341i\17l\303\323\0,\11S:\212\224\20\21"
  "\0-\6$\326\12\4.\6\63B\212\4/\17\344\276\272\230\204\302b\222\24\26I\10\0\60\14\310\302"
  "\234\207!\373\351a\4\0\61\10\305B\33\247\371\7\62\23\310\302,\223\23\241\21\241A\262\42\242\62\302"
  "\321\207\0\63\23\307C\234\22\23!\21!QAQ\302\242\242\207\20\0\64\23\310\303\314\340Aje\42"
  "B#B\222P\16\205\205\0\65\15\306C\14G\211%f%%)\5\66\16\310\302\234\207!\253\17D"
  "\226\36F\0\67\21\307C\14\23\23\241\42\301\211\202\23\5\7\5\1\70\13\306C\234&J\227(\265\0"
  "\71\17\310\302\254\7!K\17\244FF\17#\0:\10\243B\212t\320\4;\13\303:\212t\320\224\20"
  "\21\0<\26\271\302|\220\340A\62\302Qq\220q\0r\0r\200q\220\0=\12h\316\214\207pH"
  "\17\1>\27\271\302\214p\220q\0r\200q\220q\20\321\301A\302\341p\20\0\77\20\306C\214\22$"
  "\42A\61\211\342\220\4\205\0@\27\312C\236\7c\42\224\224!\222!\222!\222!\222!\222\24\23\0"
  "A\14\310\302\254\7!\233\36\216l\32B\16\310\302\214\223%K*'C\226V\16C\15\310\302\234\207"
  "!\253s\62z\30\1D\14\310\302\14\243%\373\351a\4\0E\12\306\302\213\267io\323\30F\12\306"
  "\302\33\267ios\3G\15\310\302\214\223\223\321\271\134+{\30H\14\310\302\214!;=\34\331i\0"
  "I\11\304C\13\224\371e\1J\15\307B\34\33\347hb\362\20\2\0K\17\310\302\214!\223\271\10\31"
  "=\20\331i\0L\11\307\302\213\301\371G\7M\26\311B\215\61\263\23\134LFHFHFHF\210"
  "\202\210\202\4N\15\307B\214\241J&&+\66U\32O\13\310\302\214\7\42\373\351\201\0P\14\310\302"
  "\234\207!;=\234N\5Q\16\350\272\234\207!\373\351\201X\34 \0R\16\310\302\234\207!\233\36N"
  "\346d\64\0S\13\306C\214\227\22\63J\17\15T\12\307C\14\247\301\371'\0U\12\310\302\214!\373"
  "\247\7\2V\21\310B\214\241\21!y\32\21\262\255\214\220\22\0W \314\302\216!\241\21!\241\21!"
  "\231F\204N\204N\304H\310H\310\206\6\207\6\207\6\207\206\0X\23\310\303\214!\221I\42b\25\7"
  "\313*\215\314\42\66\0Y\20\307\303\14!\23\23\241J\204\23\5'\12\2Z\17\307B\234\42\303\261\301"
  "\261\301A\301i\16[\11\343>\12\24\371\27\3\134\15\344\276\12\261\330\204\304\342&\26\3]\11\343\277"
  "\12\23\371\27\4^\5\0B\12_\7)\266\214\207\1`\7#\367\12!\1a\14\310\302\254\7!\233"
  "\36\216l\32b\16\310\302\214\223%K*'C\226V\16c\15\310\302\234\207!\253s\62z\30\1d"
  "\14\310\302\14\243%\373\351a\4\0e\12\306\302\213\267io\323\30f\12\306\302\33\267ios\3g"
  "\15\310\302\214\223\223\321\271\134+{\30h\14\310\302\214!;=\34\331i\0i\10\303B\212\264\207\4"
  "j\15\307B\314\331\1g\64\61y\10\1k\17\310\302\214!\223\271\10\31=\20\331i\0l\11\307\302"
  "\213\301\371G\7m\26\311B\215\61\263\23\134LFHFHFHF\210\202\210\202\4n\15\307B\214"
  "\241J&&+\66U\32o\13\310\302\214\7\42\373\351\201\0p\14\310\302\234\207!;=\234N\5q"
  "\16\350\272\234\207!\373\351\201X\34 \0r\16\310\302\234\207!\233\36N\346d\64\0s\13\306C\214"
  "\227\62\332\212\210\34t\12\307C\14\247\301\371'\0u\12\310\302\214!\373\247\7\2v\21\310B\214\241"
  "\21!y\32\21\262\255\214\220\22\0w \314\302\216!\241\21!\241\21!\231F\204N\204N\304H\310"
  "H\310\206\6\207\6\207\6\207\206\0x\23\310\303\214!\221I\42b\25\7\313*\215\314\42\66\0y\20"
  "\307\303\14!\23\23\241J\204\23\5'\12\2z\17\307B\234\42\303\261\301\261\301A\301i\16\0\0\0"
  "\4\377\377\0";


/*
  Fontname: Aldo the Apache
  Copyright: 
  Glyphs: 91/256
  BBX Build Mode: 0
*/
const uint8_t aldo_the_apache_26pt[2338] U8G2_FONT_SECTION("aldo_the_apache_26pt") = 
  "[\0\4\4\5\5\3\6\6\30%\0\372\31\0\33\375\3,\6@\11\5 \6\0\20D\1!\15%"
  "\27<\341\7%\206\314o\37(\42\12J\65f\201\10\376\23\2#>\66\27\304o\20QBD\11\21"
  "%D\224\20QBc\11\15{`\342\301\203V\204\210\22\42J\210(!\242\204H=\60\361\300\304\3"
  "c\203\210\22\42J\210(!\242\204\210\22\42Jh\34\0$\35\255\327{\213$\241\7\77P\224a\301"
  "s\327\241\273\316\240\32m\36\374@\25IB\0%M\66\27\314\345d \224C\20\16!\62n\14\221"
  "a\203\210\14\33Dd\324(\42\203\206\21\31\63\216\310\230qh\6\42\31yd<\240\61\7\307\240\33"
  "\223l\320\230a\203\306\214\232f\320\260\61\203\304\215\231n\314\220\201)F\242\11z\4\0&\27tv"
  "\274\317\270\275{\360\277c\250\24\261q\362 \306\3\11\14\0'\10D\65\66\341\3\5(\23\310\267S"
  "\247\210\211\7\214\350\377\177\364 \304\21\63\5)\24\310\267S\241\214\221\23\17\2\321\377\377\350\1\13#"
  "e\0*\32\256\225\205\213(eB\210\10a\321\244\221\271c\251\210\220!\63.P \0+\17tv"
  "\274\317\270\275{\360\277\63n\337\1,\14E\225;\341\213!#\6\5\1-\10\207TM\341A\3."
  "\7\305\24<\341\3/\30\310\267Sk*a\242\346J\230\250\271\22\65\257D\315\225\60Q\263\2\60\25"
  ".\27\204g\11\213\7\37\4\322\377\217\36|\20\202\311\32\0\61\17)\27\134\307\310\211\7+\60\252\377"
  "\377\0\62\32-\27|G\311\212\7\17\332\250)X\235\261S\367\231\271\202\5\37\374\240\0\63\37.\27"
  "\214g\11\213\7\37\4\322\250du\347J\22=w\262\244\42\215\36|\20\202\311\32\0\64%\60\27\224"
  "q\64Y\243\7\261K\246\214D\251\22\245J\24*R\250H\231:)T\346\305\23\67-\313\326\11\0"
  "\65\33.\27\204\241E_\224\254\345\32&-\36\264\254R\221F\17\36\214h\302f\1\66\32-\27|"
  "G\311\212\7\17\332hX\341\203\37\250\321\233\7\17Z,Q\3\0\67!.\27\204a\15\223\26\17\36"
  "\14RT\260d\205%K\222\254\260d\205%\13\32,Y\320`\71\0\70\34.\27\214g\11\213\7\37"
  "\4\322G$\230\254b\361`\220\36=\370 \4\223\65\0\71\33-\27|G\311\212\7\17\332\350\315\203"
  "\37(,\250F\233\7\17Z,Q\3\0:\11\245\26<\341{\30|;\17%\227C\341{\30|\61"
  "d\304\240 \0<\35\361\366\233\37D\360\301eM\36\274\362\340\245\205I\27\276\261\341\213\15\27\37\17"
  "\42\0=\15P\365\234\341\7\343\341\350\301\7\3>#\361\366\233!<\10\361\0H\33>{\370b\303"
  "\207M\223\65y\322\344\301+\215\232%-\36@x\20\0\77\32-\27|A\315\22\26\17\36\204QS"
  "\260v\306lW\260\366\20\25\254#\0@\67\26\27\314\347\1\221\7%\36|\60X\253\7\202\36\214y"
  "@\344A\221\7EJ))\245\244\224\222RJJ))\245\244\224\222RJ\36\24yP\304E\221&"
  "E\330\0A\24.\27\204g\11\213\7\37\4\322\217\36\374A!\375Q\1B%/\27\214a\21\233&"
  ".\134\24*Q\250D\241\22\205J\24*\341\242\11\233&\17J\351\325\203\7%\234\264aC\27.\27"
  "\204g\11\213\7\37\4\322\227\365#\215\36|\20\202\311\32\0D\26.\27\204a\15\223\26\17\36\14\322"
  "\377\217\36|\20\202\311\32\0E\21,\27t\341\17\312\325\335\212\275(Ww\17~F\24,\27t'"
  "\211\212\7\17\324\325\335\212\275(W\377\16\0G\22/\27\224\301\205_\24\255\337\360\225\256\36\374A\1"
  "H\20.\27\204\241\220\376\243\7\177PH\377Q\1I\15)\27\134\341'\205\352\377\223\7\37J\23-"
  "\27|e\37\326\377P\215\66\17\36\264X\242\6\0K#/\27\224\241\224\242\22\205J\24*Q\246H"
  "\231\42\325\24)S\242P\211B%\12=\370\203R\372W\5L\15,\27|\241\134\375\377\357\36\374\0"
  "M\67\63\27\264\301\34\273V^\275y\20\346A\230\7a\36\210x\60\342\301\10\27'T\234PqB"
  "\305\11%E\224\24QRDI\21\65c\324\214Q\63F\315\30E\201\12N\32/\27\224\241\324\242\215"
  "\330p\323\244\23\27.T\214P\341Iox\264\253\2O\17/\27\214\341\37\224\322\377\257\36\374A\1"
  "P\24.\27\204g\11\213\7\37\4\322\77z\360\7%\353%\0Q\26\257\227\213\207I\213\7\37\220\322"
  "\377\257\36\374A\321\262\244\205\7R\36.\27\214g\11\213\7\37\4\322G\17\376\240\10\231\42uS\242"
  "L\211\62%\12iT\0S\26-\27|\341\17\324hX\360\334u\350\256\63\250F\233\7\77PT\15"
  "/\27\214\341_\25\255\377\377\25\0U\15.\27\204\241\220\376\377\217\36\374\1V//\27\214\241\20\33"
  "\66%\314\24)S\244L\221\62E\312\24)S\244\210\221\212J\24*Q\250D\241\22\205J\24*Q"
  "\250D!e\371\15\0WJ\67\27\324\241\24!U\204\24UQ\246P\211\62\205J\224)D\244\214\221"
  "j\214Tr\244\14\221#eJ\34)Sb\4E%FPTbD\242$\250\220\240:\203\352\314\261"
  "\63\307\316\234\63d\316\220\271R\346J\25,U\10\0X\60\61\27\234\243T\21\63f**S\310\204"
  "\251\22\305J\24[\227\60\313\223(\23\246S\267\254D)\23\206L\30*S\306\22\63FJ\225\60e"
  "\0Y&\60\27\224\301\220\211BE\12\25\261\246H\241\42\205X)\323\16!\226F--[\324h\331"
  "\242F\313\26\65\10\0Z\37-\27\204\201\5\213\7\17\322\231+g\256\234\271r\346\312\231+g\231\71"
  "s\345\36\374\240\0[\17\307\267K\341\203\64\364\377\277y\360\240\0\134\32\310\267Sa\324d\222\215\232"
  "\231\260Q\63\223l\324\314$\33\65\63\311F\15]\17\307\267K\341\203\62\364\377\277y\360 \1^\6"
  "\0\20D\1_\10qT\233\341\7\6`\13\246XO\201\14\21\62\203\6a\24.\27\204g\11\213\7"
  "\37\4\322\217\36\374A!\375Q\1b%/\27\214a\21\233&.\134\24*Q\250D\241\22\205J\24"
  "*\341\242\11\233&\17J\351\325\203\7%\234\264ac\27.\27\204g\11\213\7\37\4\322\227\365#\215"
  "\36|\20\202\311\32\0d\26.\27\204a\15\223\26\17\36\14\322\377\217\36|\20\202\311\32\0e\21,"
  "\27t\341\17\312\325\335\212\275(Ww\17~f\24,\27t'\211\212\7\17\324\325\335\212\275(W\377"
  "\16\0g\22/\27\224\301\205_\24\255\337\360\225\256\36\374A\1h\20.\27\204\241\220\376\243\7\177P"
  "H\377Q\1i\13%\27<\341\323\7\177\240\0j\25-\27|\261\276\7V\260\376P\215\66\17\36\264"
  "X\242\6\0k#/\27\224\241\224\242\22\205J\24*Q\246H\231\42\325\24)S\242P\211B%\12"
  "=\370\203R\372W\5l\15,\27|\241\134\375\377\357\36\374\0m\67\63\27\264\301\34\273V^\275y"
  "\20\346A\230\7a\36\210x\60\342\301\10\27'T\234PqB\305\11%E\224\24QRDI\21\65"
  "c\324\214Q\63F\315\30E\201\12n\32/\27\224\241\324\242\215\330p\323\244\23\27.T\214P\341I"
  "ox\264\253\2o\17/\27\214\341\37\224\322\377\257\36\374A\1p\24.\27\204g\11\213\7\37\4\322"
  "\77z\360\7%\353%\0q\26\257\227\213\207I\213\7\37\220\322\377\257\36\374A\321\262\244\205\7r\36"
  ".\27\214g\11\213\7\37\4\322G\17\376\240\10\231\42uS\242L\211\62%\12iT\0s\26-\27"
  "|\341\17\324hX\360\334u\350\256\63\250F\233\7\77Pt\15/\27\214\341_\25\255\377\377\25\0u"
  "\15.\27\204\241\220\376\377\217\36\374\1v//\27\214\241\20\33\66%\314\24)S\244L\221\62E\312"
  "\24)S\244\210\221\212J\24*Q\250D\241\22\205J\24*Q\250D!e\371\15\0wJ\67\27\324"
  "\241\24!U\204\24UQ\246P\211\62\205J\224)D\244\214\221j\214Tr\244\14\221#eJ\34)"
  "Sb\4E%FPTbD\242$\250\220\240:\203\352\314\261\63\307\316\234\63d\316\220\271R\346J"
  "\25,U\10\0x\60\61\27\234\243T\21\63f**S\310\204\251\22\305J\24[\227\60\313\223(\23"
  "\246S\267\254D)\23\206L\30*S\306\22\63FJ\225\60e\0y&\60\27\224\301\220\211BE\12"
  "\25\261\246H\241\42\205X)\323\16!\226F--[\324h\331\242F\313\26\65\10\0z\37-\27\204"
  "\201\5\213\7\17\322\231+g\256\234\271r\346\312\231+g\231\71s\345\36\374\240\0\0\0\0\4\377\377"
  "\0";


/*
  Fontname: Untitled
  Copyright: Created with Fony 1.4.7
  Glyphs: 10/256
  BBX Build Mode: 0
*/
const uint8_t aldo_digits_50px[415] U8G2_FONT_SECTION("aldo_digits_50px") = 
  "\12\0\4\5\5\6\3\1\6\23\62\0\0\62\0\0\0\0\0\0\0\1\202\60\33Sf\272\34z\6\222"
  "(>`\216\375\377\377\377\277\373\200\211H\240y\310)\0\61\24L~\272\16B&\21%>\200be"
  "\346\377\377\377\377\17\62\65Sf\272\34z\6\222(>`\216\275\63\330h\203\215\66\330h\203\215\66\330"
  "h\203\215\66\330h\203\215\66\330h\203\215\66\330h\203\215\66\330h\363\353\17~P\1\63'Sf\272"
  "\34z\6\222(>`\216\275\63\332\374;\346\26T\62Q\346\230\66\377\65s\354\335\7LD\2\315C"
  "N\1\64ESfz\15>\30YD\225T\341\332\261\231\21\206\31a\230\21F\31b\224!F\31b"
  "\220\61\6\31c\220\61&\62\306 c\14\62\304(C\214\62\304(#\14\63\302\60#\14c\216\71#"
  "d\22\33X\233\377\1\65 Sf\32\376`k\363\377\265S\17A\23\211\24S\233\377\232\71\366\316\10"
  "I\242\201\350)\307\32\66 Sf\272\34z\6\222(>`\216}m\376\372\203\37l\307\376\377\356\3"
  "&\42\201\346!\247\0\67+Sf\32\42\211D\12)>\70\332\34\33m\306F\233\261\321fl\264\31"
  "\33m\306F\233\261\321fl\264\31\33m\306F\233)\0\70$Sf\272\34z\6\222(>`\216\375"
  "\377\256\210H\240y\16\222(\260c\377\277\373\200\211H\240y\310)\0\71!Sf\272\34z\6\222("
  ">`\216\375\377\356\203\37lm\376\65s\354\335\7LD\2\315CN\1\0\0\0\4\377\377\0";



void setup(void) {
  u8g2.begin(); // start the u8g2 library
}

void loop(void) {
  u8g2.clearBuffer();		// clear the internal memory

	u8g2.setFont(aldo_digits_50px); // set custom font
  u8g2.drawStr(0,56,"098765"); // print some message

  u8g2.sendBuffer();		// transfer internal memory to the display
  delay(2000);  // two seconds delay, but we are only displaying a static text, so it makes no difference

  u8g2.clearBuffer();
  u8g2.setFont(aldo_the_apache_26pt);
  u8g2.drawStr(0,26,"*123456*");
  u8g2.drawStr(0,56,"*AbCdEf*");
  u8g2.sendBuffer();
  delay(2000);

  u8g2.clearBuffer();
  u8g2.setFont(aldo_the_apache);
  u8g2.drawStr(0,14,"*ABC*UVW*XYZ*");
  u8g2.drawStr(0,28,"*9876543210+*");
  u8g2.drawStr(0,42,"*ABC*UVW*XYZ*");
  u8g2.drawStr(0,58,"*9876543210+*");
  u8g2.sendBuffer();
  delay(2000);

}