This commit is contained in:
e2002
2022-02-10 15:31:36 +03:00
parent a2cea7ebc4
commit 094534b40f
12 changed files with 873 additions and 24 deletions

View File

@@ -6,6 +6,8 @@
\ \
![ёRadio](images/img5.jpg)\ ![ёRadio](images/img5.jpg)\
\ \
![ёRadio](images/img6.jpg)\
\
![ёRadio](images/page1.jpg)\ ![ёRadio](images/page1.jpg)\
\ \
![ёRadio](images/page2.jpg)\ ![ёRadio](images/page2.jpg)\

View File

@@ -11,6 +11,7 @@
##### Displays ##### Displays
- **ST7735** 1.8' or 1.44' https://aliexpress.ru/item/1005002822797745.html - **ST7735** 1.8' or 1.44' https://aliexpress.ru/item/1005002822797745.html
- or **SSD1306** 0.96' I2C https://aliexpress.ru/item/1005001621806398.html - or **SSD1306** 0.96' I2C https://aliexpress.ru/item/1005001621806398.html
- or **Nokia5110** 84x48 SPI https://aliexpress.ru/item/1005001621837569.html
##### Controls ##### Controls
Three tact buttons or Encoder or all together Three tact buttons or Encoder or all together
### Connection table ### Connection table
@@ -47,10 +48,13 @@ Three tact buttons or Encoder or all together
\* Any free pin, configured in options.h \* Any free pin, configured in options.h
### Dependencies ### Dependencies
#### Libraries: #### Libraries:
Adafruit_GFX, Adafruit_ST7735\*, Adafruit_SSD1306\* (\* depending on display model), ESP32Encoder, OneButton, [ESPAsyncWebServer](https://github.com/me-no-dev/ESPAsyncWebServer), [AsyncTCP](https://github.com/me-no-dev/AsyncTCP) Adafruit_GFX, Adafruit_ST7735\*, Adafruit_SSD1306\*, Adafruit_PCD8544\*, (\* depending on display model), ESP32Encoder, OneButton, [ESPAsyncWebServer](https://github.com/me-no-dev/ESPAsyncWebServer), [AsyncTCP](https://github.com/me-no-dev/AsyncTCP)
#### Tool: #### Tool:
[ESP32 Filesystem Uploader](https://randomnerdtutorials.com/install-esp32-filesystem-uploader-arduino-ide/) [ESP32 Filesystem Uploader](https://randomnerdtutorials.com/install-esp32-filesystem-uploader-arduino-ide/)
## Version history ## Version history
### v0.4.197
- added support for Nokia 5110 SPI displays
- some bugs fixes
### v0.4.183 ### v0.4.183
- ovol reading bug - ovol reading bug
### v0.4.182 ### v0.4.182
@@ -59,5 +63,5 @@ Adafruit_GFX, Adafruit_ST7735\*, Adafruit_SSD1306\* (\* depending on display mod
### v0.4.180 ### v0.4.180
- vol steps 0..256 (in ESP32-audioI2S) - vol steps 0..256 (in ESP32-audioI2S)
### v0.4.177 ### v0.4.177
- added support for SSD1306 I2C displays. - added support for SSD1306 I2C displays
- fixed broken buttons. - fixed broken buttons.

BIN
images/img6.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 KiB

View File

@@ -16,6 +16,9 @@ DisplayST7735 dsp;
#elif DSP_MODEL==2 #elif DSP_MODEL==2
#include "src/displays/displaySSD1306.h" #include "src/displays/displaySSD1306.h"
DisplaySSD1306 dsp; DisplaySSD1306 dsp;
#elif DSP_MODEL==3
#include "src/displays/displayN5110.h"
DisplayN5110 dsp;
#endif #endif
Display display; Display display;
@@ -25,8 +28,14 @@ void ticks() {
} }
#define STARTTIME 5000 #define STARTTIME 5000
#define SCROLLTIME 83
#if DSP_MODEL==3
#define SCROLLDELTA 8
#define SCROLLTIME 332
#else
#define SCROLLDELTA 3 #define SCROLLDELTA 3
#define SCROLLTIME 83
#endif
void Scroll::init(char *sep, byte tsize, byte top, uint16_t dlay, uint16_t fgcolor, uint16_t bgcolor) { void Scroll::init(char *sep, byte tsize, byte top, uint16_t dlay, uint16_t fgcolor, uint16_t bgcolor) {
textsize = tsize; textsize = tsize;
@@ -128,12 +137,18 @@ void Scroll::getbounds(uint16_t &tWidth, uint16_t &tHeight, uint16_t &sWidth) {
void Display::init() { void Display::init() {
dsp.initD(screenwidth, screenheight); dsp.initD(screenwidth, screenheight);
dsp.drawLogo(); dsp.drawLogo();
meta.init(" * ", 2, TFT_FRAMEWDT, STARTTIME, TFT_LOGO, TFT_BG); if(DSP_MODEL==3){
title1.init(" * ", 1, TFT_FRAMEWDT + 2 * TFT_LINEHGHT, STARTTIME, TFT_FG, TFT_BG); meta.init(" * ", 1, TFT_FRAMEWDT, STARTTIME, TFT_LOGO, TFT_BG);
title2.init(" * ", 1, TFT_FRAMEWDT + 3 * TFT_LINEHGHT, STARTTIME, TFT_FG, TFT_BG); title1.init(" * ", 1, TFT_FRAMEWDT + TFT_LINEHGHT+1, STARTTIME, TFT_FG, TFT_BG);
//title2.init(" * ", 1, TFT_FRAMEWDT + 2 * TFT_LINEHGHT, STARTTIME, TFT_FG, TFT_BG);
}else{
meta.init(" * ", 2, TFT_FRAMEWDT, STARTTIME, TFT_LOGO, TFT_BG);
title1.init(" * ", 1, TFT_FRAMEWDT + 2 * TFT_LINEHGHT, STARTTIME, TFT_FG, TFT_BG);
title2.init(" * ", 1, TFT_FRAMEWDT + 3 * TFT_LINEHGHT, STARTTIME, TFT_FG, TFT_BG);
}
int yStart = (screenheight / 2 - PLMITEMHEIGHT / 2) + 3; int yStart = (screenheight / 2 - PLMITEMHEIGHT / 2) + 3;
//plCurrent.init(" * ", 2, 57, 0, TFT_BG, TFT_LOGO); //plCurrent.init(" * ", 2, 57, 0, TFT_BG, TFT_LOGO);
plCurrent.init(" * ", 2, yStart, 0, TFT_BG, TFT_LOGO); plCurrent.init(" * ", DSP_MODEL==3?1:2, yStart, 0, TFT_BG, TFT_LOGO);
plCurrent.lock(); plCurrent.lock();
} }
@@ -178,13 +193,13 @@ void Display::swichMode(displayMode_e newmode) {
if (newmode == PLAYER) { if (newmode == PLAYER) {
meta.reset(); meta.reset();
title1.reset(); title1.reset();
title2.reset(); if(DSP_MODEL!=3) title2.reset();
plCurrent.lock(); plCurrent.lock();
time(); time();
} else { } else {
meta.lock(); meta.lock();
title1.lock(); title1.lock();
title2.lock(); if(DSP_MODEL!=3) title2.lock();
} }
if (newmode == VOL) { if (newmode == VOL) {
dsp.frameTitle("VOLUME"); dsp.frameTitle("VOLUME");
@@ -210,7 +225,7 @@ void Display::drawPlayer() {
} }
meta.loop(); meta.loop();
title1.loop(); title1.loop();
title2.loop(); if(DSP_MODEL!=3) title2.loop();
} }
void Display::drawVolume() { void Display::drawVolume() {
@@ -260,6 +275,7 @@ void Display::rightText(const char* text, byte y, uint16_t fg, uint16_t bg) {
void Display::station() { void Display::station() {
meta.setText(dsp.utf8Rus(config.station.name, true)); meta.setText(dsp.utf8Rus(config.station.name, true));
dsp.loop();
netserver.requestOnChange(STATION, 0); netserver.requestOnChange(STATION, 0);
} }
@@ -271,7 +287,7 @@ void Display::title(const char *str) {
strlcpy(config.station.title, title, BUFLEN); strlcpy(config.station.title, title, BUFLEN);
if (strlen(config.station.title) > 0) { if (strlen(config.station.title) > 0) {
char* ici; char* ici;
if ((ici = strstr(config.station.title, " - ")) != NULL) { if ((ici = strstr(config.station.title, " - ")) != NULL && DSP_MODEL!=3) {
strlcpy(sng, ici + 3, BUFLEN / 2); strlcpy(sng, ici + 3, BUFLEN / 2);
strlcpy(ttl, config.station.title, strlen(config.station.title) - strlen(ici) + 1); strlcpy(ttl, config.station.title, strlen(config.station.title) - strlen(ici) + 1);
} else { } else {
@@ -279,7 +295,8 @@ void Display::title(const char *str) {
sng[0] = '\0'; sng[0] = '\0';
} }
title1.setText(dsp.utf8Rus(ttl, true)); title1.setText(dsp.utf8Rus(ttl, true));
title2.setText(dsp.utf8Rus(sng, true)); if(DSP_MODEL!=3) title2.setText(dsp.utf8Rus(sng, true));
dsp.loop();
} }
netserver.requestOnChange(TITLE, 0); netserver.requestOnChange(TITLE, 0);
} }

View File

@@ -1,12 +1,13 @@
#ifndef options_h #ifndef options_h
#define options_h #define options_h
#define VERSION "0.4.183" #define VERSION "0.4.197"
/* DISPLAY MODEL /* DISPLAY MODEL
* 0 - DUMMY * 0 - DUMMY
* 1 - ST7735 * 1 - ST7735
* 2 - SSD1306 * 2 - SSD1306
* 3 - NOKIA5110
*/ */
#define DSP_MODEL 1 #define DSP_MODEL 1

View File

@@ -0,0 +1,306 @@
#include "displayN5110.h"
#include <Wire.h>
#include "../../player.h"
#include "../../config.h"
#include "../../network.h"
#define LOGO_WIDTH 21
#define LOGO_HEIGHT 28
const unsigned char logo [] PROGMEM=
{
0x07, 0x03, 0x80, 0x0f, 0x87, 0xc0, 0x0f, 0x87, 0xc0, 0x0f, 0x87, 0xc0, 0x0f, 0x87, 0xc0, 0x07,
0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x07, 0xff, 0x80, 0x1f, 0xff,
0xc0, 0x1f, 0xff, 0xe0, 0x3f, 0xff, 0xf0, 0x7f, 0x07, 0xf0, 0x7e, 0x03, 0xf0, 0x7e, 0x01, 0xf8,
0x7f, 0xff, 0xf8, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xf8, 0x7e, 0x00, 0x00, 0x7f,
0x00, 0x00, 0x7f, 0x80, 0x20, 0x3f, 0xff, 0xe0, 0x3f, 0xff, 0xe0, 0x1f, 0xff, 0xe0, 0x0f, 0xff,
0xe0, 0x01, 0xff, 0xc0
};
DisplayN5110::DisplayN5110(): Adafruit_PCD8544(TFT_DC, TFT_CS, TFT_RST) {
}
char* DisplayN5110::utf8Rus(const char* str, bool uppercase) {
int index = 0;
static char strn[BUFLEN];
bool E = false;
strlcpy(strn, str, BUFLEN);
if (uppercase) {
bool next = false;
for (char *iter = strn; *iter != '\0'; ++iter)
{
if (E) {
E = false;
continue;
}
byte rus = (byte) * iter;
if (rus == 208 && (byte) * (iter + 1) == 129) {
*iter = (char)209;
*(iter + 1) = (char)145;
E = true;
continue;
}
if (rus == 209 && (byte) * (iter + 1) == 145) {
*iter = (char)209;
*(iter + 1) = (char)145;
E = true;
continue;
}
if (next) {
if (rus >= 128 && rus <= 143) *iter = (char)(rus + 32);
if (rus >= 176 && rus <= 191) *iter = (char)(rus - 32);
next = false;
}
if (rus == 208) next = true;
if (rus == 209) {
*iter = (char)208;
next = true;
}
*iter = toupper(*iter);
}
}
while (strn[index])
{
if (strn[index] >= 0xBF)
{
switch (strn[index]) {
case 0xD0: {
if (strn[index + 1] == 0x81) {
strn[index] = 0xA8;
break;
}
if (strn[index + 1] >= 0x90 && strn[index + 1] <= 0xBF) strn[index] = strn[index + 1] + 0x30;
break;
}
case 0xD1: {
if (strn[index + 1] == 0x91) {
strn[index] = 0xB8;
break;
}
if (strn[index + 1] >= 0x80 && strn[index + 1] <= 0x8F) strn[index] = strn[index + 1] + 0x70;
break;
}
}
int sind = index + 2;
while (strn[sind]) {
strn[sind - 1] = strn[sind];
sind++;
}
strn[sind - 1] = 0;
}
index++;
}
return strn;
}
void DisplayN5110::apScreen() {
setTextSize(1);
setTextColor(TFT_FG, TFT_BG);
setFont(&TinyFont6);
setCursor(TFT_FRAMEWDT, TFT_FRAMEWDT + 1 * TFT_LINEHGHT+6);
print("AP NAME: ");
print(apSsid);
setCursor(TFT_FRAMEWDT, TFT_FRAMEWDT + 2 * TFT_LINEHGHT+6);
print("PASSWD: ");
print(apPassword);
setTextColor(SILVER, TFT_BG);
setCursor(TFT_FRAMEWDT, sheight - 10);
print("SETTINGS PAGE ON: ");
setCursor(TFT_FRAMEWDT, sheight-2);
print("http://");
print(WiFi.softAPIP().toString().c_str());
print("/");
setFont();
}
void DisplayN5110::initD(uint16_t &screenwidth, uint16_t &screenheight) {
begin();
setContrast(TFT_CONTRAST);
cp437(true);
fillScreen(TFT_BG);
setRotation(TFT_ROTATE);
setTextWrap(false);
screenwidth = width();
screenheight = height();
swidth = screenwidth;
sheight = screenheight;
}
void DisplayN5110::drawLogo() {
clearDisplay();
drawBitmap((width() - LOGO_WIDTH ) / 2, 0, logo, LOGO_WIDTH, LOGO_HEIGHT, 1);
display();
}
void DisplayN5110::drawPlaylist(uint16_t currentItem, char* currentItemText) {
for (byte i = 0; i < PLMITEMS; i++) {
plMenu[i][0] = '\0';
}
config.fillPlMenu(plMenu, currentItem - 3, PLMITEMS);
setTextSize(1);
int yStart = (sheight / 2 - PLMITEMHEIGHT / 2) - PLMITEMHEIGHT * (PLMITEMS - 1) / 2 + 3;
fillRect(0, (sheight / 2 - PLMITEMHEIGHT / 2) + 1, swidth, PLMITEMHEIGHT, TFT_LOGO);
setTextColor(TFT_FG, TFT_BG);
for (byte i = 0; i < PLMITEMS; i++) {
if (i == 3) {
strlcpy(currentItemText, plMenu[i], PLMITEMLENGHT - 1);
} else {
setCursor(TFT_FRAMEWDT, yStart + i * PLMITEMHEIGHT);
print(utf8Rus(plMenu[i], true));
}
}
}
void DisplayN5110::clearDsp() {
fillScreen(TFT_BG);
}
void DisplayN5110::drawScrollFrame(uint16_t texttop, uint16_t textheight, uint16_t bg) {
if (TFT_FRAMEWDT == 0) return;
fillRect(0, texttop, TFT_FRAMEWDT, textheight, bg);
fillRect(swidth - TFT_FRAMEWDT, texttop, TFT_FRAMEWDT, textheight, bg);
}
void DisplayN5110::getScrolBbounds(const char* text, const char* separator, byte textsize, uint16_t &tWidth, uint16_t &tHeight, uint16_t &sWidth) {
int16_t x1, y1;
uint16_t w, h;
setTextSize(textsize);
getTextBounds(text, 0, 0, &x1, &y1, &w, &h);
tWidth = w;
tHeight = h;
getTextBounds(separator, 0, 0, &x1, &y1, &w, &h);
sWidth = w;
}
void DisplayN5110::clearScroll(uint16_t texttop, uint16_t textheight, uint16_t bg) {
fillRect(0, texttop, swidth, textheight, bg);
}
void DisplayN5110::centerText(const char* text, byte y, uint16_t fg, uint16_t bg) {
int16_t x1, y1;
uint16_t w, h;
const char* txt = text;
if(y==90) {
y=sheight-TFT_LINEHGHT*2;
}
if(y==110) {
y=sheight;
setFont(&TinyFont5);
}
getTextBounds(txt, 0, 0, &x1, &y1, &w, &h);
setTextColor(fg);
setCursor((swidth - w) / 2, y);
fillRect(0, y, swidth, h, bg);
print(utf8Rus(txt, true));
setFont();
}
void DisplayN5110::rightText(const char* text, byte y, uint16_t fg, uint16_t bg) {
int16_t x1, y1;
uint16_t w, h;
getTextBounds(text, 0, 0, &x1, &y1, &w, &h);
setTextColor(fg);
setCursor(swidth - w - TFT_FRAMEWDT, y+h+1);
fillRect(swidth - w - TFT_FRAMEWDT, y, w, h+1, bg);
print(text);
}
void DisplayN5110::displayHeapForDebug() {
}
void DisplayN5110::printClock(const char* timestr) {
int16_t x1, y1;
uint16_t w, h;
setTextSize(1);
setFont(&DS_DIGI15pt7b);
getTextBounds(timestr, 0, 0, &x1, &y1, &w, &h);
setTextColor(TFT_FG);
setCursor((swidth - w) / 2, 19+17);
fillRect(0, 18, swidth, h+2, TFT_BG);
print(timestr);
setFont();
}
void DisplayN5110::drawVolumeBar(bool withNumber) {
int16_t vTop = sheight - 3;
int16_t vWidth = swidth;
uint8_t ww = map(config.store.volume, 0, 254, 0, vWidth - 2);
fillRect(TFT_FRAMEWDT, vTop, vWidth, 3, TFT_BG);
drawRect(TFT_FRAMEWDT, vTop, vWidth, 3, TFT_LOGO);
fillRect(TFT_FRAMEWDT + 1, vTop + 1, ww, 1, TFT_LOGO);
if (withNumber) {
setTextSize(1);
setTextColor(TFT_FG);
char volstr[4];
uint16_t wv, hv;
int16_t x1, y1;
sprintf(volstr, "%d", config.store.volume);
setFont(&DS_DIGI15pt7b);
getTextBounds(volstr, 0, 0, &x1, &y1, &wv, &hv);
fillRect(TFT_FRAMEWDT, 24-10, swidth - TFT_FRAMEWDT / 2, hv + 3, TFT_BG);
setCursor((swidth - wv) / 2, 24+8);
print(volstr);
setFont();
}
}
void DisplayN5110::frameTitle(const char* str) {
setTextSize(1);
centerText(str, TFT_FRAMEWDT, TFT_LOGO, TFT_BG);
}
void DisplayN5110::rssi(const char* str) {
char buf[4];
strlcpy(buf, str, strlen(str)-2);
int16_t vTop = sheight - TFT_LINEHGHT - 2;
setTextSize(1);
setFont(&TinyFont5);
rightText(buf, vTop, SILVER, TFT_BG);
setFont();
}
void DisplayN5110::ip(const char* str) {
int16_t vTop = sheight - TFT_LINEHGHT - 2;
setTextSize(1);
setTextColor(SILVER, TFT_BG);
setCursor(0, vTop);
setFont(&TinyFont5);
print(str);
setFont();
}
void DisplayN5110::set_TextSize(uint8_t s) {
setTextSize(s);
}
void DisplayN5110::set_TextColor(uint16_t fg, uint16_t bg) {
setTextColor(fg, bg);
}
void DisplayN5110::set_Cursor(int16_t x, int16_t y) {
setCursor(x, y);
}
void DisplayN5110::printText(const char* txt) {
print(txt);
}
void DisplayN5110::loop() {
if (checkdelay(83, loopdelay)) {
display();
}
yield();
}
boolean DisplayN5110::checkdelay(int m, unsigned long &tstamp) {
if (millis() - tstamp > m) {
tstamp = millis();
return true;
} else {
return false;
}
}

View File

@@ -0,0 +1,64 @@
#ifndef displayN5110_h
#define displayN5110_h
#include "Arduino.h"
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include "fonts/TinyFont5.h"
#include "fonts/TinyFont6.h"
#include "fonts/DS_DIGI15pt7b.h"
#include "../../options.h"
#define TFT_ROTATE 0
#define TFT_LINEHGHT 8
#define TFT_FRAMEWDT 0
#define TFT_CONTRAST 55
#define PLMITEMS 7
#define PLMITEMLENGHT 40
#define PLMITEMHEIGHT 10
class DisplayN5110: public Adafruit_PCD8544 {
public:
DisplayN5110();
char plMenu[PLMITEMS][PLMITEMLENGHT];
uint16_t clockY;
void initD(uint16_t &screenwidth, uint16_t &screenheight);
void apScreen();
void drawLogo();
void clearDsp();
void centerText(const char* text, byte y, uint16_t fg, uint16_t bg);
void rightText(const char* text, byte y, uint16_t fg, uint16_t bg);
void set_TextSize(uint8_t s);
void set_TextColor(uint16_t fg, uint16_t bg);
void set_Cursor(int16_t x, int16_t y);
void printText(const char* txt);
void printClock(const char* timestr);
void displayHeapForDebug();
void drawVolumeBar(bool withNumber);
char* utf8Rus(const char* str, bool uppercase);
void drawScrollFrame(uint16_t texttop, uint16_t textheight, uint16_t bg);
void getScrolBbounds(const char* text, const char* separator, byte textsize, uint16_t &tWidth, uint16_t &tHeight, uint16_t &sWidth);
void clearScroll(uint16_t texttop, uint16_t textheight, uint16_t bg);
void frameTitle(const char* str);
void rssi(const char* str);
void ip(const char* str);
void drawPlaylist(uint16_t currentItem, char* currentItemText);
void loop();
private:
uint16_t swidth, sheight;
unsigned long loopdelay;
boolean checkdelay(int m, unsigned long &tstamp);
};
extern DisplayN5110 dsp;
/*
* TFT COLORS
*/
#define SILVER BLACK
#define TFT_BG WHITE
#define TFT_FG BLACK
#define TFT_LOGO BLACK
#endif

View File

@@ -248,9 +248,11 @@ void DisplaySSD1306::frameTitle(const char* str) {
} }
void DisplaySSD1306::rssi(const char* str) { void DisplaySSD1306::rssi(const char* str) {
char buf[4];
strlcpy(buf, str, strlen(str)-2);
int16_t vTop = sheight - TFT_LINEHGHT - 4; int16_t vTop = sheight - TFT_LINEHGHT - 4;
setTextSize(1); setTextSize(1);
rightText(str, vTop, SILVER, TFT_BG); rightText(buf, vTop, SILVER, TFT_BG);
} }
void DisplaySSD1306::ip(const char* str) { void DisplaySSD1306::ip(const char* str) {

View File

@@ -1,5 +1,5 @@
#ifndef displayST7735_h #ifndef displaySSD1306_h
#define displayST7735_h #define displaySSD1306_h
#include "Arduino.h" #include "Arduino.h"
#include <Adafruit_GFX.h> #include <Adafruit_GFX.h>

View File

@@ -0,0 +1,60 @@
const uint8_t DS_DIGI15pt7bBitmaps[] PROGMEM = {
0x7F, 0xFF, 0x47, 0xFF, 0xF4, 0xF0, 0x7F, 0xD7, 0xF7, 0x7D, 0xF0, 0x7E,
0x0F, 0xC1, 0xF8, 0x3E, 0x03, 0x80, 0x20, 0x02, 0x00, 0xE0, 0x3E, 0x0F,
0xC1, 0xF8, 0x3F, 0x07, 0xDF, 0x77, 0xF5, 0xFF, 0x00, 0x05, 0xFF, 0xFB,
0x20, 0xBF, 0xFF, 0x64, 0x00, 0x7F, 0xC7, 0xF4, 0x7D, 0x80, 0x70, 0x0E,
0x01, 0xC0, 0x38, 0x03, 0x3F, 0xAF, 0xFA, 0xFE, 0x60, 0x0E, 0x01, 0xC0,
0x38, 0x07, 0x00, 0xDF, 0x17, 0xF1, 0xFF, 0x00, 0x7F, 0xC7, 0xF4, 0x7D,
0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x03, 0x3F, 0xAF, 0xF8, 0xFE, 0x80,
0x30, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x1F, 0x67, 0xF5, 0xFF, 0x00, 0x00,
0x10, 0x07, 0x01, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3E, 0x03, 0xBF, 0xAF,
0xF8, 0xFE, 0x80, 0x30, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0x60, 0x04,
0x00, 0x00, 0x7F, 0xD7, 0xF3, 0x7C, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x06,
0x00, 0xBF, 0x8F, 0xF8, 0xFE, 0x80, 0x30, 0x0E, 0x01, 0xC0, 0x38, 0x07,
0x1F, 0x67, 0xF5, 0xFF, 0x00, 0x7F, 0xD7, 0xF3, 0x7C, 0x70, 0x0E, 0x01,
0xC0, 0x38, 0x06, 0x00, 0xBF, 0x8F, 0xFA, 0xFE, 0xE0, 0x3E, 0x0F, 0xC1,
0xF8, 0x3F, 0x07, 0xDF, 0x77, 0xF5, 0xFF, 0x00, 0x7F, 0xC7, 0xF4, 0x7D,
0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x03, 0x00, 0x20, 0x00, 0x00, 0x80,
0x30, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0x60, 0x04, 0x00, 0x00, 0x7F,
0xD7, 0xF7, 0x7D, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3E, 0x03, 0xBF, 0xAF,
0xFA, 0xFE, 0xE0, 0x3E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xCE, 0x77, 0xF5,
0xFF, 0x00, 0x7F, 0xD7, 0xF7, 0x7D, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3E,
0x03, 0xBF, 0xAF, 0xF8, 0xFE, 0x80, 0x30, 0x0E, 0x01, 0xC0, 0x38, 0x07,
0x1F, 0x67, 0xF5, 0xFF, 0x00, 0xFF, 0x80, 0x00, 0x1F, 0xF0, 0x00
};
const GFXglyph DS_DIGI15pt7bGlyphs[] PROGMEM = {
{ 0, 0, 0, 6, 0, 1 }, // 0x20 ' '
{ 0, 0, 0, 0, 0, 0 }, // 0x21 '!'
{ 0, 0, 0, 0, 0, 0 }, // 0x22 '"'
{ 0, 0, 0, 0, 0, 0 }, // 0x23 '#'
{ 0, 0, 0, 0, 0, 0 }, // 0x24 '$'
{ 0, 0, 0, 0, 0, 0 }, // 0x25 '%'
{ 0, 0, 0, 0, 0, 0 }, // 0x26 '&'
{ 0, 0, 0, 0, 0, 0 }, // 0x27 '''
{ 0, 0, 0, 0, 0, 0 }, // 0x28 '('
{ 0, 0, 0, 0, 0, 0 }, // 0x29 ')'
{ 0, 0, 0, 0, 0, 0 }, // 0x2A '*'
{ 0, 0, 0, 0, 0, 0 }, // 0x2B '+'
{ 0, 0, 0, 0, 0, 0 }, // 0x2C ','
{ 0, 0, 0, 0, 0, 0 }, // 0x2D '-'
{ 0, 0, 0, 0, 0, 0 }, // 0x2E '.'
{ 0, 0, 0, 0, 0, 0 }, // 0x2F '/'
{ 6, 11, 19, 14, 2, -18 }, // 0x30 '0'
{ 33, 3, 19, 6, 2, -18 }, // 0x31 '1'
{ 41, 11, 19, 14, 2, -18 }, // 0x32 '2'
{ 68, 11, 19, 14, 2, -18 }, // 0x33 '3'
{ 95, 11, 19, 14, 2, -18 }, // 0x34 '4'
{ 122, 11, 19, 14, 2, -18 }, // 0x35 '5'
{ 149, 11, 19, 14, 2, -18 }, // 0x36 '6'
{ 176, 11, 19, 14, 2, -18 }, // 0x37 '7'
{ 203, 11, 19, 14, 2, -18 }, // 0x38 '8'
{ 230, 11, 19, 14, 2, -18 }, // 0x39 '9'
{ 257, 3, 16, 6, 2, -15 } // 0x3A ':'
};
const GFXfont DS_DIGI15pt7b PROGMEM = {
(uint8_t *)DS_DIGI15pt7bBitmaps,
(GFXglyph *)DS_DIGI15pt7bGlyphs, 0x20, 0x3A, 29 };
// Approx. 664 bytes

View File

@@ -0,0 +1,195 @@
const uint8_t TinyFont5_Bitmaps[] PROGMEM = {
0x00, 0x00, 0x00, 0xE8, 0x00, 0xB4, 0x00, 0x57, 0xD5, 0xF5, 0x00, 0x7A,
0x65, 0xE0, 0xA5, 0x4A, 0x00, 0x33, 0xE9, 0x70, 0xC0, 0x6A, 0x40, 0x95,
0x80, 0xAA, 0x80, 0x5D, 0x00, 0x60, 0xE0, 0x80, 0x5E, 0x80, 0x69, 0x99,
0x60, 0x59, 0x2E, 0x00, 0x69, 0x24, 0xF0, 0x69, 0x29, 0x60, 0x99, 0xF1,
0x10, 0xF8, 0xE1, 0xE0, 0x68, 0xE9, 0x60, 0xF1, 0x24, 0x40, 0x69, 0x69,
0x60, 0x69, 0x71, 0x60, 0xA0, 0x46, 0x64, 0x00, 0xE3, 0x80, 0x98, 0x00,
0x69, 0x20, 0x20, 0x6B, 0xB8, 0x70, 0x69, 0x9F, 0x90, 0xE9, 0xE9, 0xE0,
0x69, 0x89, 0x60, 0xE9, 0x99, 0xE0, 0xF8, 0xC8, 0xF0, 0xF8, 0xC8, 0x80,
0x69, 0x8B, 0x60, 0x99, 0xF9, 0x90, 0xF8, 0x00, 0x11, 0x19, 0x60, 0x99,
0xE9, 0x90, 0x88, 0x88, 0xF0, 0x8C, 0x63, 0xBA, 0x80, 0x99, 0xDB, 0x90,
0x69, 0x99, 0x60, 0xE9, 0x9E, 0x80, 0x64, 0xA5, 0x26, 0x80, 0xE9, 0x9E,
0x90, 0x68, 0x61, 0xE0, 0xE9, 0x24, 0x00, 0x99, 0x99, 0x60, 0x8C, 0x54,
0xA2, 0x00, 0x8C, 0x6A, 0xE5, 0x00, 0x99, 0x69, 0x90, 0xB6, 0xA4, 0x00,
0xF1, 0x68, 0xF0, 0xEA, 0xC0, 0xAD, 0x40, 0xD5, 0xC0, 0x54, 0x00, 0xE0,
0x90, 0x17, 0x99, 0x70, 0x07, 0xEB, 0x5A, 0x80, 0x2B, 0x22, 0x00, 0xF0,
0x89, 0xA8, 0x00, 0x16, 0x80, 0xF9, 0x99, 0xF0, 0x69, 0x9F, 0x90, 0xE8,
0xF9, 0xE0, 0xE9, 0xE9, 0xE0, 0xF8, 0x88, 0x80, 0x32, 0x94, 0xAF, 0x80,
0xF8, 0xC8, 0xF0, 0xAD, 0x5D, 0x5A, 0x80, 0x69, 0x29, 0x60, 0x99, 0xBD,
0x90, 0xD1, 0xBD, 0x90, 0x99, 0xE9, 0x90, 0x79, 0x99, 0x90, 0x8C, 0x63,
0xBA, 0x80, 0x99, 0xF9, 0x90, 0x69, 0x99, 0x60, 0xF9, 0x99, 0x90, 0xE9,
0x9E, 0x80, 0x69, 0x89, 0x60, 0xE9, 0x24, 0x00, 0x99, 0x71, 0x60, 0x75,
0x6A, 0xE2, 0x00, 0x99, 0x69, 0x90, 0x94, 0xA5, 0x2F, 0x84, 0x00, 0x99,
0x9F, 0x10, 0x8C, 0x6B, 0x5F, 0x80, 0x8A, 0x2A, 0xAA, 0xFC, 0x10, 0xC3,
0x92, 0x97, 0x00, 0x87, 0x99, 0x65, 0xE4, 0x00, 0x8E, 0x99, 0xE0, 0x69,
0x39, 0x60, 0x95, 0x7B, 0x59, 0x00, 0x79, 0x97, 0x90, 0x80, 0x96, 0x9F,
0x86, 0x96, 0x9F, 0x86
};
const GFXglyph TinyFont5_Glyphs[] PROGMEM = {
{ 0, 3, 5, 3, 0, -5 }, // 0x20 ' '
{ 3, 1, 5, 2, 0, -5 }, // 0x21 '!'
{ 5, 3, 2, 4, 0, -5 }, // 0x22 '"'
{ 7, 5, 5, 6, 0, -4 }, // 0x23 '#'
{ 11, 4, 5, 5, 0, -5 }, // 0x24 '$'
{ 14, 3, 5, 4, 0, -5 }, // 0x25 '%'
{ 17, 4, 5, 5, 0, -5 }, // 0x26 '&'
{ 20, 1, 2, 2, 0, -5 }, // 0x27 '''
{ 21, 2, 5, 4, 0, -5 }, // 0x28 '('
{ 23, 2, 5, 4, 0, -5 }, // 0x29 ')'
{ 25, 3, 3, 4, 0, -4 }, // 0x2A '*'
{ 27, 3, 3, 4, 0, -4 }, // 0x2B '+'
{ 29, 2, 2, 3, 0, -1 }, // 0x2C ','
{ 30, 3, 1, 4, 0, -3 }, // 0x2D '-'
{ 31, 1, 1, 2, 0, -1 }, // 0x2E '.'
{ 32, 2, 5, 4, 0, -5 }, // 0x2F '/'
{ 34, 4, 5, 5, 0, -5 }, // 0x30 '0'
{ 37, 3, 5, 4, 0, -5 }, // 0x31 '1'
{ 40, 4, 5, 5, 0, -5 }, // 0x32 '2'
{ 43, 4, 5, 5, 0, -5 }, // 0x33 '3'
{ 46, 4, 5, 5, 0, -5 }, // 0x34 '4'
{ 49, 4, 5, 5, 0, -5 }, // 0x35 '5'
{ 52, 4, 5, 5, 0, -5 }, // 0x36 '6'
{ 55, 4, 5, 5, 0, -5 }, // 0x37 '7'
{ 58, 4, 5, 5, 0, -5 }, // 0x38 '8'
{ 61, 4, 5, 5, 0, -5 }, // 0x39 '9'
{ 64, 1, 3, 2, 0, -4 }, // 0x3A ':'
{ 65, 2, 4, 3, 0, -4 }, // 0x3B ';'
{ 66, 2, 3, 3, 0, -4 }, // 0x3C '<'
{ 68, 3, 3, 4, 0, -4 }, // 0x3D '='
{ 70, 2, 3, 3, 0, -4 }, // 0x3E '>'
{ 72, 4, 5, 5, 0, -5 }, // 0x3F '?'
{ 75, 4, 5, 5, 0, -5 }, // 0x40 '@'
{ 78, 4, 5, 5, 0, -5 }, // 0x41 'A'
{ 81, 4, 5, 5, 0, -5 }, // 0x42 'B'
{ 84, 4, 5, 5, 0, -5 }, // 0x43 'C'
{ 87, 4, 5, 5, 0, -5 }, // 0x44 'D'
{ 90, 4, 5, 5, 0, -5 }, // 0x45 'E'
{ 93, 4, 5, 5, 0, -5 }, // 0x46 'F'
{ 96, 4, 5, 5, 0, -5 }, // 0x47 'G'
{ 99, 4, 5, 5, 0, -5 }, // 0x48 'H'
{ 102, 1, 5, 2, 0, -5 }, // 0x49 'I'
{ 104, 4, 5, 5, 0, -5 }, // 0x4A 'J'
{ 107, 4, 5, 5, 0, -5 }, // 0x4B 'K'
{ 110, 4, 5, 5, 0, -5 }, // 0x4C 'L'
{ 113, 5, 5, 6, 0, -5 }, // 0x4D 'M'
{ 117, 4, 5, 5, 0, -5 }, // 0x4E 'N'
{ 120, 4, 5, 5, 0, -5 }, // 0x4F 'O'
{ 123, 4, 5, 5, 0, -5 }, // 0x50 'P'
{ 126, 5, 5, 6, 0, -5 }, // 0x51 'Q'
{ 130, 4, 5, 5, 0, -5 }, // 0x52 'R'
{ 133, 4, 5, 5, 0, -5 }, // 0x53 'S'
{ 136, 3, 5, 4, 0, -5 }, // 0x54 'T'
{ 139, 4, 5, 5, 0, -5 }, // 0x55 'U'
{ 142, 5, 5, 6, 0, -5 }, // 0x56 'V'
{ 146, 5, 5, 6, 0, -5 }, // 0x57 'W'
{ 150, 4, 5, 5, 0, -5 }, // 0x58 'X'
{ 153, 3, 5, 4, 0, -5 }, // 0x59 'Y'
{ 156, 4, 5, 5, 0, -5 }, // 0x5A 'Z'
{ 159, 2, 5, 3, 0, -5 }, // 0x5B '['
{ 161, 2, 5, 3, 0, -5 }, // 0x5C '\'
{ 163, 2, 5, 4, 0, -5 }, // 0x5D ']'
{ 165, 3, 2, 4, 0, -5 }, // 0x5E '^'
{ 167, 3, 1, 4, 0, -1 }, // 0x5F '_'
{ 168, 2, 2, 3, 0, -5 }, // 0x60 '`'
{ 0, 0, 0, 0, 0, 0 }, // 0x61 'a'
{ 0, 0, 0, 0, 0, 0 }, // 0x62 'b'
{ 0, 0, 0, 0, 0, 0 }, // 0x63 'c'
{ 169, 4, 5, 5, 0, -5 }, // 0x64 'd'
{ 0, 0, 0, 0, 0, 0 }, // 0x65 'e'
{ 0, 0, 0, 0, 0, 0 }, // 0x66 'f'
{ 0, 0, 0, 0, 0, 0 }, // 0x67 'g'
{ 0, 0, 0, 0, 0, 0 }, // 0x68 'h'
{ 0, 0, 0, 0, 0, 0 }, // 0x69 'i'
{ 0, 0, 0, 0, 0, 0 }, // 0x6A 'j'
{ 0, 0, 0, 0, 0, 0 }, // 0x6B 'k'
{ 0, 0, 0, 0, 0, 0 }, // 0x6C 'l'
{ 172, 5, 5, 6, 0, -5 }, // 0x6D 'm'
{ 0, 0, 0, 0, 0, 0 }, // 0x6E 'n'
{ 0, 0, 0, 0, 0, 0 }, // 0x6F 'o'
{ 0, 0, 0, 0, 0, 0 }, // 0x70 'p'
{ 0, 0, 0, 0, 0, 0 }, // 0x71 'q'
{ 0, 0, 0, 0, 0, 0 }, // 0x72 'r'
{ 0, 0, 0, 0, 0, 0 }, // 0x73 's'
{ 0, 0, 0, 0, 0, 0 }, // 0x74 't'
{ 0, 0, 0, 0, 0, 0 }, // 0x75 'u'
{ 0, 0, 0, 0, 0, 0 }, // 0x76 'v'
{ 0, 0, 0, 0, 0, 0 }, // 0x77 'w'
{ 0, 0, 0, 0, 0, 0 }, // 0x78 'x'
{ 0, 0, 0, 0, 0, 0 }, // 0x79 'y'
{ 0, 0, 0, 0, 0, 0 }, // 0x7A 'z'
{ 176, 3, 5, 4, 0, -5 }, // 0x7B '{'
{ 179, 1, 4, 4, 0, -4 }, // 0x7C '|'
{ 180, 3, 5, 4, 0, -5 }, // 0x7D '}'
{ 183, 4, 3, 5, 0, -4 }, // 0x7E '~'
{ 185, 4, 5, 5, 0, -5 }, // 0x7F 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x80 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x81 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x82 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x83 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x84 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x85 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x86 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x87 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x88 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x89 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x8A 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x8B 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x8C 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x8D 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x8E 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x8F 'non-printable'
{ 188, 4, 5, 5, 0, -5 }, // 0x90 'non-printable'
{ 191, 4, 5, 5, 0, -5 }, // 0x91 'non-printable'
{ 194, 4, 5, 5, 0, -5 }, // 0x92 'non-printable'
{ 197, 4, 5, 5, 0, -5 }, // 0x93 'non-printable'
{ 200, 5, 5, 6, 0, -5 }, // 0x94 'non-printable'
{ 204, 4, 5, 5, 0, -5 }, // 0x95 'non-printable'
{ 207, 5, 5, 6, 0, -5 }, // 0x96 'non-printable'
{ 211, 4, 5, 5, 0, -5 }, // 0x97 'non-printable'
{ 214, 4, 5, 5, 0, -5 }, // 0x98 'non-printable'
{ 217, 4, 5, 5, 0, -5 }, // 0x99 'non-printable'
{ 220, 4, 5, 4, 0, -5 }, // 0x9A 'non-printable'
{ 223, 4, 5, 4, 0, -5 }, // 0x9B 'non-printable'
{ 226, 5, 5, 6, 0, -5 }, // 0x9C 'non-printable'
{ 230, 4, 5, 5, 0, -5 }, // 0x9D 'non-printable'
{ 233, 4, 5, 5, 0, -5 }, // 0x9E 'non-printable'
{ 236, 4, 5, 5, 0, -5 }, // 0x9F 'non-printable'
{ 239, 4, 5, 5, 0, -5 }, // 0xA0 ' '
{ 242, 4, 5, 5, 0, -5 }, // 0xA1 '¡'
{ 245, 3, 5, 4, 0, -5 }, // 0xA2 '¢'
{ 248, 4, 5, 5, 0, -5 }, // 0xA3 '£'
{ 251, 5, 5, 6, 0, -5 }, // 0xA4 '¤'
{ 255, 4, 5, 5, 0, -5 }, // 0xA5 '¥'
{ 258, 5, 6, 6, 0, -5 }, // 0xA6 '¦'
{ 263, 4, 5, 5, 0, -5 }, // 0xA7 '§'
{ 266, 5, 5, 6, 0, -5 }, // 0xA8 '¨'
{ 270, 6, 6, 7, 0, -5 }, // 0xA9 '©'
{ 275, 5, 5, 6, 0, -5 }, // 0xAA 'ª'
{ 279, 6, 5, 7, 0, -5 }, // 0xAB '«'
{ 284, 4, 5, 5, 0, -5 }, // 0xAC '¬'
{ 287, 4, 5, 5, 0, -5 }, // 0xAD 'non-printable'
{ 290, 5, 5, 6, 0, -5 }, // 0xAE '®'
{ 294, 4, 5, 5, 0, -5 }, // 0xAF '¯'
{ 0, 0, 0, 0, 0, 0 }, // 0xB0 '°'
{ 0, 0, 0, 0, 0, 0 }, // 0xB1 '±'
{ 0, 0, 0, 0, 0, 0 }, // 0xB2 '²'
{ 0, 0, 0, 0, 0, 0 }, // 0xB3 '³'
{ 0, 0, 0, 0, 0, 0 }, // 0xB4 '´'
{ 0, 0, 0, 0, 0, 0 }, // 0xB5 'µ'
{ 0, 0, 0, 0, 0, 0 }, // 0xB6 '¶'
{ 297, 1, 1, 2, 0, -3 }, // 0xB7 '·'
{ 0, 0, 0, 0, 0, 0 }, // 0xB8 '¸'
{ 0, 0, 0, 0, 0, 0 }, // 0xB9 '¹'
{ 0, 0, 0, 0, 0, 0 }, // 0xBA 'º'
{ 0, 0, 0, 0, 0, 0 }, // 0xBB '»'
{ 0, 0, 0, 0, 0, 0 }, // 0xBC '¼'
{ 0, 0, 0, 0, 0, 0 }, // 0xBD '½'
{ 0, 0, 0, 0, 0, 0 }, // 0xBE '¾'
{ 0, 0, 0, 0, 0, 0 }, // 0xBF '¿'
{ 298, 4, 6, 5, 0, -5 }, // 0xC0 'À'
{ 301, 4, 6, 5, 0, -5 } // 0xC1 'Á'
};
const GFXfont TinyFont5 PROGMEM = {(uint8_t *) TinyFont5_Bitmaps, (GFXglyph *)TinyFont5_Glyphs, 0x20, 0xC1, 5};

View File

@@ -0,0 +1,198 @@
const uint8_t TinyFont6_Bitmaps[] PROGMEM = {
0xF4, 0x00, 0xF4, 0x00, 0xB4, 0x00, 0x57, 0xD5, 0xF5, 0x00, 0x75, 0x18,
0x6B, 0x30, 0x00, 0xA5, 0x29, 0x40, 0x66, 0x4A, 0x96, 0xC0, 0x6A, 0x90,
0x95, 0x60, 0xAA, 0x80, 0x5D, 0x00, 0x60, 0xC0, 0x80, 0x25, 0x29, 0x00,
0x69, 0x99, 0x96, 0x59, 0x25, 0xC0, 0x69, 0x12, 0x4F, 0x69, 0x21, 0x96,
0x99, 0x9F, 0x11, 0xF8, 0xE1, 0x96, 0x68, 0xE9, 0x96, 0xF1, 0x12, 0x44,
0x69, 0x69, 0x96, 0x69, 0x97, 0x16, 0xA0, 0x46, 0x2A, 0x22, 0x00, 0xE3,
0x80, 0x88, 0xA8, 0x00, 0x54, 0xA0, 0x80, 0x6B, 0xFA, 0x96, 0x69, 0x99,
0xF9, 0xE9, 0xE9, 0x9E, 0x69, 0x88, 0x96, 0xE9, 0x99, 0x9E, 0xF8, 0xE8,
0x8F, 0xF8, 0x8E, 0x88, 0x69, 0x8B, 0x97, 0x99, 0x9F, 0x99, 0xFC, 0x00,
0x11, 0x11, 0x96, 0x99, 0xE9, 0x99, 0x88, 0x88, 0x8F, 0x8C, 0x63, 0xBA,
0xD4, 0x00, 0x99, 0x9D, 0xB9, 0x69, 0x99, 0x96, 0xE9, 0x99, 0xE8, 0x64,
0xA5, 0x29, 0x34, 0x00, 0xE9, 0x99, 0xE9, 0x68, 0x61, 0x96, 0xE9, 0x24,
0x80, 0x99, 0x99, 0x96, 0x8C, 0x54, 0xA2, 0x10, 0x00, 0x8C, 0x6B, 0x55,
0x28, 0x00, 0x99, 0x66, 0x99, 0x8C, 0x62, 0xA2, 0x10, 0x00, 0xF1, 0x24,
0x8F, 0xEA, 0xB0, 0x91, 0x22, 0x40, 0xD5, 0x70, 0x54, 0x00, 0xE0, 0x90,
0x61, 0x79, 0x70, 0x11, 0x79, 0x97, 0x88, 0xE9, 0x99, 0xB8, 0x00, 0x05,
0x7F, 0x5A, 0xD4, 0x00, 0x69, 0x99, 0x60, 0xE9, 0x9E, 0x88, 0x4E, 0x44,
0x52, 0xB7, 0xA4, 0x00, 0x29, 0x64, 0x40, 0xF0, 0x89, 0x35, 0x00, 0x16,
0x80, 0xF9, 0x99, 0x9F, 0x69, 0x99, 0xF9, 0xF8, 0xE9, 0x9E, 0xE9, 0xE9,
0x9E, 0xF2, 0x49, 0x00, 0x35, 0x55, 0x5F, 0xF8, 0xE8, 0x8F, 0xAD, 0x5D,
0x5A, 0xD4, 0x00, 0x69, 0x21, 0x96, 0x99, 0x9B, 0xD9, 0xD1, 0x9B, 0xD9,
0x99, 0xE9, 0x99, 0x79, 0x99, 0x99, 0x8C, 0x63, 0xBA, 0xD4, 0x00, 0x99,
0x9F, 0x99, 0x69, 0x99, 0x96, 0xF9, 0x99, 0x99, 0xE9, 0x99, 0xE8, 0x69,
0x88, 0x96, 0xE9, 0x24, 0x80, 0x99, 0x97, 0x16, 0x75, 0x6B, 0x57, 0x10,
0x00, 0x99, 0x66, 0x99, 0x94, 0xA5, 0x29, 0x7C, 0x20, 0x99, 0x9F, 0x11,
0x8C, 0x63, 0x5A, 0xFC, 0x00, 0x8A, 0x28, 0xAA, 0xAB, 0xF0, 0x40, 0xC2,
0x1C, 0x94, 0xB8, 0x00, 0x86, 0x1E, 0x65, 0x97, 0x90, 0x88, 0xE9, 0x9E,
0x69, 0x13, 0x96, 0x95, 0x6B, 0xDA, 0xC8, 0x00, 0x79, 0x97, 0x99, 0xF0,
0x96, 0x9F, 0x86, 0x96, 0x9F, 0x86
};
const GFXglyph TinyFont6_Glyphs[] PROGMEM = {
{ 0, 3, 0, 3, 0, 0 }, // 0x20 ' '
{ 2, 1, 6, 2, 0, -5 }, // 0x21 '!'
{ 4, 3, 2, 4, 0, -5 }, // 0x22 '"'
{ 6, 5, 5, 6, 0, -5 }, // 0x23 '#'
{ 10, 5, 6, 6, 0, -5 }, // 0x24 '$'
{ 15, 3, 6, 4, 0, -5 }, // 0x25 '%'
{ 18, 4, 6, 5, 0, -5 }, // 0x26 '&'
{ 21, 1, 2, 2, 0, -5 }, // 0x27 '''
{ 22, 2, 6, 3, 0, -5 }, // 0x28 '('
{ 24, 2, 6, 3, 0, -5 }, // 0x29 ')'
{ 26, 3, 3, 4, 0, -3 }, // 0x2A '*'
{ 28, 3, 3, 4, 0, -3 }, // 0x2B '+'
{ 30, 2, 2, 3, 0, 0 }, // 0x2C ','
{ 31, 2, 1, 3, 0, -2 }, // 0x2D '-'
{ 32, 1, 1, 2, 0, 0 }, // 0x2E '.'
{ 33, 3, 6, 4, 0, -5 }, // 0x2F '/'
{ 36, 4, 6, 5, 0, -5 }, // 0x30 '0'
{ 39, 3, 6, 4, 0, -5 }, // 0x31 '1'
{ 42, 4, 6, 5, 0, -5 }, // 0x32 '2'
{ 45, 4, 6, 5, 0, -5 }, // 0x33 '3'
{ 48, 4, 6, 5, 0, -5 }, // 0x34 '4'
{ 51, 4, 6, 5, 0, -5 }, // 0x35 '5'
{ 54, 4, 6, 5, 0, -5 }, // 0x36 '6'
{ 57, 4, 6, 5, 0, -5 }, // 0x37 '7'
{ 60, 4, 6, 5, 0, -5 }, // 0x38 '8'
{ 63, 4, 6, 5, 0, -5 }, // 0x39 '9'
{ 66, 1, 3, 2, 0, -3 }, // 0x3A ':'
{ 67, 2, 4, 3, 0, -3 }, // 0x3B ';'
{ 68, 3, 5, 4, 0, -4 }, // 0x3C '<'
{ 71, 3, 3, 4, 0, -3 }, // 0x3D '='
{ 73, 3, 5, 4, 0, -4 }, // 0x3E '>'
{ 76, 3, 6, 4, 0, -5 }, // 0x3F '?'
{ 79, 4, 6, 5, 0, -5 }, // 0x40 '@'
{ 82, 4, 6, 5, 0, -5 }, // 0x41 'A'
{ 85, 4, 6, 5, 0, -5 }, // 0x42 'B'
{ 88, 4, 6, 5, 0, -5 }, // 0x43 'C'
{ 91, 4, 6, 5, 0, -5 }, // 0x44 'D'
{ 94, 4, 6, 5, 0, -5 }, // 0x45 'E'
{ 97, 4, 6, 5, 0, -5 }, // 0x46 'F'
{ 100, 4, 6, 5, 0, -5 }, // 0x47 'G'
{ 103, 4, 6, 5, 0, -5 }, // 0x48 'H'
{ 106, 1, 6, 2, 0, -5 }, // 0x49 'I'
{ 108, 4, 6, 5, 0, -5 }, // 0x4A 'J'
{ 111, 4, 6, 5, 0, -5 }, // 0x4B 'K'
{ 114, 4, 6, 5, 0, -5 }, // 0x4C 'L'
{ 117, 5, 6, 6, 0, -5 }, // 0x4D 'M'
{ 122, 4, 6, 5, 0, -5 }, // 0x4E 'N'
{ 125, 4, 6, 5, 0, -5 }, // 0x4F 'O'
{ 128, 4, 6, 5, 0, -5 }, // 0x50 'P'
{ 131, 5, 6, 6, 0, -5 }, // 0x51 'Q'
{ 136, 4, 6, 5, 0, -5 }, // 0x52 'R'
{ 139, 4, 6, 5, 0, -5 }, // 0x53 'S'
{ 142, 3, 6, 4, 0, -5 }, // 0x54 'T'
{ 145, 4, 6, 5, 0, -5 }, // 0x55 'U'
{ 148, 5, 6, 6, 0, -5 }, // 0x56 'V'
{ 153, 5, 6, 6, 0, -5 }, // 0x57 'W'
{ 158, 4, 6, 5, 0, -5 }, // 0x58 'X'
{ 161, 5, 6, 6, 0, -5 }, // 0x59 'Y'
{ 166, 4, 6, 5, 0, -5 }, // 0x5A 'Z'
{ 169, 2, 6, 3, 0, -5 }, // 0x5B '['
{ 171, 3, 6, 4, 0, -5 }, // 0x5C '\'
{ 174, 2, 6, 3, 0, -5 }, // 0x5D ']'
{ 176, 3, 2, 4, 0, -5 }, // 0x5E '^'
{ 178, 3, 1, 4, 0, 0 }, // 0x5F '_'
{ 179, 2, 2, 3, 0, -5 }, // 0x60 '`'
{ 180, 4, 5, 5, 0, -4 }, // 0x61 'a'
{ 0, 0, 0, 0, 0, 0 }, // 0x62 'b'
{ 0, 0, 0, 0, 0, 0 }, // 0x63 'c'
{ 183, 4, 6, 5, 0, -5 }, // 0x64 'd'
{ 0, 0, 0, 0, 0, 0 }, // 0x65 'e'
{ 0, 0, 0, 0, 0, 0 }, // 0x66 'f'
{ 0, 0, 0, 0, 0, 0 }, // 0x67 'g'
{ 186, 4, 6, 5, 0, -5 }, // 0x68 'h'
{ 189, 1, 5, 2, 0, -4 }, // 0x69 'i'
{ 0, 0, 0, 0, 0, 0 }, // 0x6A 'j'
{ 0, 0, 0, 0, 0, 0 }, // 0x6B 'k'
{ 0, 0, 0, 0, 0, 0 }, // 0x6C 'l'
{ 191, 5, 6, 6, 0, -5 }, // 0x6D 'm'
{ 0, 0, 0, 0, 0, 0 }, // 0x6E 'n'
{ 196, 4, 5, 5, 0, -4 }, // 0x6F 'o'
{ 199, 4, 6, 5, 0, -4 }, // 0x70 'p'
{ 0, 0, 0, 0, 0, 0 }, // 0x71 'q'
{ 0, 0, 0, 0, 0, 0 }, // 0x72 'r'
{ 0, 0, 0, 0, 0, 0 }, // 0x73 's'
{ 202, 4, 6, 4, 0, -5 }, // 0x74 't'
{ 0, 0, 0, 0, 0, 0 }, // 0x75 'u'
{ 0, 0, 0, 0, 0, 0 }, // 0x76 'v'
{ 0, 0, 0, 0, 0, 0 }, // 0x77 'w'
{ 0, 0, 0, 0, 0, 0 }, // 0x78 'x'
{ 205, 3, 5, 4, 0, -4 }, // 0x79 'y'
{ 0, 0, 0, 0, 0, 0 }, // 0x7A 'z'
{ 208, 3, 6, 4, 0, -5 }, // 0x7B '{'
{ 211, 1, 4, 2, 0, -4 }, // 0x7C '|'
{ 212, 3, 6, 4, 0, -5 }, // 0x7D '}'
{ 215, 4, 3, 5, 0, -3 }, // 0x7E '~'
{ 217, 4, 6, 5, 0, -5 }, // 0x7F 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x80 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x81 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x82 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x83 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x84 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x85 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x86 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x87 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x88 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x89 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x8A 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x8B 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x8C 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x8D 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x8E 'non-printable'
{ 0, 0, 0, 0, 0, 0 }, // 0x8F 'non-printable'
{ 220, 4, 6, 5, 0, -5 }, // 0x90 'non-printable'
{ 223, 4, 6, 5, 0, -5 }, // 0x91 'non-printable'
{ 226, 4, 6, 5, 0, -5 }, // 0x92 'non-printable'
{ 229, 3, 6, 4, 0, -5 }, // 0x93 'non-printable'
{ 232, 4, 6, 5, 0, -5 }, // 0x94 'non-printable'
{ 235, 4, 6, 5, 0, -5 }, // 0x95 'non-printable'
{ 238, 5, 6, 6, 0, -5 }, // 0x96 'non-printable'
{ 243, 4, 6, 5, 0, -5 }, // 0x97 'non-printable'
{ 246, 4, 6, 5, 0, -5 }, // 0x98 'non-printable'
{ 249, 4, 6, 5, 0, -5 }, // 0x99 'non-printable'
{ 252, 4, 6, 5, 0, -5 }, // 0x9A 'non-printable'
{ 255, 4, 6, 5, 0, -5 }, // 0x9B 'non-printable'
{ 258, 5, 6, 6, 0, -5 }, // 0x9C 'non-printable'
{ 263, 4, 6, 5, 0, -5 }, // 0x9D 'non-printable'
{ 266, 4, 6, 5, 0, -5 }, // 0x9E 'non-printable'
{ 269, 4, 6, 5, 0, -5 }, // 0x9F 'non-printable'
{ 272, 4, 6, 5, 0, -5 }, // 0xA0 ' '
{ 275, 4, 6, 5, 0, -5 }, // 0xA1 '¡'
{ 278, 3, 6, 4, 0, -5 }, // 0xA2 '¢'
{ 281, 4, 6, 5, 0, -5 }, // 0xA3 '£'
{ 284, 5, 6, 6, 0, -5 }, // 0xA4 '¤'
{ 289, 4, 6, 5, 0, -5 }, // 0xA5 '¥'
{ 292, 5, 7, 6, 0, -5 }, // 0xA6 '¦'
{ 297, 4, 6, 5, 0, -5 }, // 0xA7 '§'
{ 300, 5, 6, 6, 0, -5 }, // 0xA8 '¨'
{ 305, 6, 7, 7, 0, -5 }, // 0xA9 '©'
{ 311, 5, 6, 6, 0, -5 }, // 0xAA 'ª'
{ 316, 6, 6, 7, 0, -5 }, // 0xAB '«'
{ 321, 4, 6, 5, 0, -5 }, // 0xAC '¬'
{ 324, 4, 6, 5, 0, -5 }, // 0xAD 'non-printable'
{ 327, 5, 6, 6, 0, -5 }, // 0xAE '®'
{ 332, 4, 6, 5, 0, -5 }, // 0xAF '¯'
{ 0, 0, 0, 0, 0, 0 }, // 0xB0 '°'
{ 0, 0, 0, 0, 0, 0 }, // 0xB1 '±'
{ 0, 0, 0, 0, 0, 0 }, // 0xB2 '²'
{ 0, 0, 0, 0, 0, 0 }, // 0xB3 '³'
{ 0, 0, 0, 0, 0, 0 }, // 0xB4 '´'
{ 0, 0, 0, 0, 0, 0 }, // 0xB5 'µ'
{ 0, 0, 0, 0, 0, 0 }, // 0xB6 '¶'
{ 335, 2, 2, 3, 0, -3 }, // 0xB7 '·'
{ 0, 0, 0, 0, 0, 0 }, // 0xB8 '¸'
{ 0, 0, 0, 0, 0, 0 }, // 0xB9 '¹'
{ 0, 0, 0, 0, 0, 0 }, // 0xBA 'º'
{ 0, 0, 0, 0, 0, 0 }, // 0xBB '»'
{ 0, 0, 0, 0, 0, 0 }, // 0xBC '¼'
{ 0, 0, 0, 0, 0, 0 }, // 0xBD '½'
{ 0, 0, 0, 0, 0, 0 }, // 0xBE '¾'
{ 0, 0, 0, 0, 0, 0 }, // 0xBF '¿'
{ 336, 4, 6, 5, 0, -5 }, // 0xC0 'À'
{ 339, 4, 6, 5, 0, -5 } // 0xC1 'Á'
};
const GFXfont TinyFont6 PROGMEM = {(uint8_t *) TinyFont6_Bitmaps, (GFXglyph *)TinyFont6_Glyphs, 0x20, 0xC1, 5};