This repository has been archived on 2022-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
speedclock/Arduino_Libs/SSD1306Ascii-master/examples/cmp5x7Fonts/cmp5x7Fonts.ino
2018-07-07 19:17:51 +02:00

113 lines
3 KiB
C++

// Display differences in 5x7 fonts.
#include <SPI.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiSpi.h"
// pin definitions
#define CS_PIN 7
#define RST_PIN 8
#define DC_PIN 9
SSD1306AsciiSpi oled;
const char* fontName[] = {
"Adafruit5x7",
"font5x7",
"lcd5x7",
"System5x7"
};
const uint8_t* fontList[] = {
Adafruit5x7,
font5x7,
lcd5x7,
System5x7
};
const uint8_t nFont = sizeof(fontList)/sizeof(const char*);
//------------------------------------------------------------------------------
// Assume fonts start with ' ' and have 96 chars
void checkFont(const uint8_t* font, const char* name) {
if (pgm_read_byte(font++) ||
pgm_read_byte(font++) ||
pgm_read_byte(font++) != 5 ||
pgm_read_byte(font++) != 7 ||
pgm_read_byte(font++) != ' ' ||
pgm_read_byte(font++) < 96) {
oled.clear();
oled.print("Bad: ");
oled.print(name);
while(1);
}
}
//------------------------------------------------------------------------------
void cmp5x7Fonts(const uint8_t* font1, const char* name1,
const uint8_t* font2, const char* name2) {
uint8_t diff[96];
uint8_t nDiff = 0;
uint8_t w = 5;
for (uint8_t i = 0; i < 96; i++) {
const uint8_t* base1 = font1 + i*w + 6;
const uint8_t* base2 = font2 + i*w + 6;
for (uint8_t j = 0; j < w; j++) {
uint8_t b1 = pgm_read_byte(base1 + j);
uint8_t b2 = pgm_read_byte(base2 + j);
if (b1 != b2) {
diff[nDiff++] = ' ' + i;
break;
}
}
}
oled.clear();
delay(200);
oled.setFont(font1);
oled.print(name1);
oled.setCol(78);
oled.print("nDiff ");
oled.println(nDiff);
oled.setFont(font2);
oled.println(name2);
const uint8_t lineCount = 21;
if (nDiff > 3*lineCount) nDiff = 3*lineCount;
for (uint8_t i = 0; i < nDiff; i += lineCount) {
oled.setFont(font1);
for (uint8_t j = 0; j < lineCount && (j + i) < nDiff; j++) {
oled.write(diff[i + j]);
}
oled.println();
oled.setFont(font2);
uint8_t nc = (nDiff - i) > lineCount ? lineCount : nDiff - i;
for (uint8_t j = 0; j < nc; j++) {
oled.write(diff[i + j]);
}
oled.println();
}
delay(2000 + 500*nDiff);
}
//------------------------------------------------------------------------------
void setup() {
// Use next line if no RST_PIN or reset is not required.
// oled.begin(&Adafruit128x64, CS_PIN, DC_PIN);
oled.begin(&Adafruit128x64, CS_PIN, DC_PIN, RST_PIN);
oled.setFont(Adafruit5x7);
oled.clear();
oled.print("Start");
checkFont(Stang5x7, "Stang5x7");
for (uint8_t i = 0; i < nFont; i++) {
checkFont(fontList[i], fontName[i]);
}
for (uint8_t i = 0; i < nFont; i++) {
for (uint8_t j = i + 1; j < nFont; j++) {
cmp5x7Fonts(fontList[i], fontName[i], fontList[j], fontName[j]);
}
}
// System5x7 derived from Stang5x7?
cmp5x7Fonts(Stang5x7, "Stang5x7", System5x7, "System5x7");
oled.print("\nDone");
}
//------------------------------------------------------------------------------
void loop() {}