#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <SPI.h>
#define TFT_CS 5
#define TFT_DC 2
#define TFT_RST 4
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
// Kolory (jeśli nie zdefiniowane)
#define BLACK 0x0000
#define WHITE 0xFFFF
#define GREEN 0x07E0
// Czcionki do testowania
#include <Fonts/FreeMono9pt7b.h>
#include <Fonts/FreeMono12pt7b.h>
#include <Fonts/FreeMono18pt7b.h>
#include <Fonts/FreeMono24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBoldOblique9pt7b.h>
#include <Fonts/FreeMonoBoldOblique12pt7b.h>
#include <Fonts/FreeMonoBoldOblique18pt7b.h>
#include <Fonts/FreeMonoBoldOblique24pt7b.h>
#include <Fonts/FreeMonoOblique9pt7b.h>
#include <Fonts/FreeMonoOblique12pt7b.h>
#include <Fonts/FreeMonoOblique18pt7b.h>
#include <Fonts/FreeMonoOblique24pt7b.h>
#include <Fonts/FreeSans9pt7b.h>
#include <Fonts/FreeSans12pt7b.h>
#include <Fonts/FreeSans18pt7b.h>
#include <Fonts/FreeSans24pt7b.h>
#include <Fonts/FreeSansBold9pt7b.h>
#include <Fonts/FreeSansBold12pt7b.h>
#include <Fonts/FreeSansBold18pt7b.h>
#include <Fonts/FreeSansBold24pt7b.h>
#include <Fonts/FreeSansBoldOblique9pt7b.h>
#include <Fonts/FreeSansBoldOblique12pt7b.h>
#include <Fonts/FreeSansBoldOblique18pt7b.h>
#include <Fonts/FreeSansBoldOblique24pt7b.h>
#include <Fonts/FreeSansOblique9pt7b.h>
#include <Fonts/FreeSansOblique12pt7b.h>
#include <Fonts/FreeSansOblique18pt7b.h>
#include <Fonts/FreeSansOblique24pt7b.h>
#include <Fonts/FreeSerif9pt7b.h>
#include <Fonts/FreeSerif12pt7b.h>
#include <Fonts/FreeSerif18pt7b.h>
#include <Fonts/FreeSerif24pt7b.h>
#include <Fonts/FreeSerifBold9pt7b.h>
#include <Fonts/FreeSerifBold12pt7b.h>
#include <Fonts/FreeSerifBold18pt7b.h>
#include <Fonts/FreeSerifBold24pt7b.h>
#include <Fonts/FreeSerifBoldItalic9pt7b.h>
#include <Fonts/FreeSerifBoldItalic12pt7b.h>
#include <Fonts/FreeSerifBoldItalic18pt7b.h>
#include <Fonts/FreeSerifBoldItalic24pt7b.h>
#include <Fonts/FreeSerifItalic9pt7b.h>
#include <Fonts/FreeSerifItalic12pt7b.h>
#include <Fonts/FreeSerifItalic18pt7b.h>
#include <Fonts/FreeSerifItalic24pt7b.h>
// Lista czcionek
const GFXfont* fonts[] = {
&FreeMono9pt7b,
&FreeMono12pt7b,
&FreeMono18pt7b,
&FreeMono24pt7b,
&FreeMonoBold9pt7b,
&FreeMonoBold12pt7b,
&FreeMonoBold18pt7b,
&FreeMonoBold24pt7b,
&FreeMonoBoldOblique9pt7b,
&FreeMonoBoldOblique12pt7b,
&FreeMonoBoldOblique18pt7b,
&FreeMonoBoldOblique24pt7b,
&FreeMonoOblique9pt7b,
&FreeMonoOblique12pt7b,
&FreeMonoOblique18pt7b,
&FreeMonoOblique24pt7b,
&FreeSans9pt7b,
&FreeSans12pt7b,
&FreeSans18pt7b,
&FreeSans24pt7b,
&FreeSansBold9pt7b,
&FreeSansBold12pt7b,
&FreeSansBold18pt7b,
&FreeSansBold24pt7b,
&FreeSansBoldOblique9pt7b,
&FreeSansBoldOblique12pt7b,
&FreeSansBoldOblique18pt7b,
&FreeSansBoldOblique24pt7b,
&FreeSansOblique9pt7b,
&FreeSansOblique12pt7b,
&FreeSansOblique18pt7b,
&FreeSansOblique24pt7b,
&FreeSerif9pt7b,
&FreeSerif12pt7b,
&FreeSerif18pt7b,
&FreeSerif24pt7b,
&FreeSerifBold9pt7b,
&FreeSerifBold12pt7b,
&FreeSerifBold18pt7b,
&FreeSerifBold24pt7b,
&FreeSerifBoldItalic9pt7b,
&FreeSerifBoldItalic12pt7b,
&FreeSerifBoldItalic18pt7b,
&FreeSerifBoldItalic24pt7b,
&FreeSerifItalic9pt7b,
&FreeSerifItalic12pt7b,
&FreeSerifItalic18pt7b,
&FreeSerifItalic24pt7b
};
// Nazwy czcionek (bez .h)
const char* fontNames[] = {
"FreeMono9pt7b",
"FreeMono12pt7b",
"FreeMono18pt7b",
"FreeMono24pt7b",
"FreeMonoBold9pt7b",
"FreeMonoBold12pt7b",
"FreeMonoBold18pt7b",
"FreeMonoBold24pt7b",
"FreeMonoBoldOblique9pt7b",
"FreeMonoBoldOblique12pt7b",
"FreeMonoBoldOblique18pt7b",
"FreeMonoBoldOblique24pt7b",
"FreeMonoOblique9pt7b",
"FreeMonoOblique12pt7b",
"FreeMonoOblique18pt7b",
"FreeMonoOblique24pt7b",
"FreeSans9pt7b",
"FreeSans12pt7b",
"FreeSans18pt7b",
"FreeSans24pt7b",
"FreeSansBold9pt7b",
"FreeSansBold12pt7b",
"FreeSansBold18pt7b",
"FreeSansBold24pt7b",
"FreeSansBoldOblique9pt7b",
"FreeSansBoldOblique12pt7b",
"FreeSansBoldOblique18pt7b",
"FreeSansBoldOblique24pt7b",
"FreeSansOblique9pt7b",
"FreeSansOblique12pt7b",
"FreeSansOblique18pt7b",
"FreeSansOblique24pt7b",
"FreeSerif9pt7b",
"FreeSerif12pt7b",
"FreeSerif18pt7b",
"FreeSerif24pt7b",
"FreeSerifBold9pt7b",
"FreeSerifBold12pt7b",
"FreeSerifBold18pt7b",
"FreeSerifBold24pt7b",
"FreeSerifBoldItalic9pt7b",
"FreeSerifBoldItalic12pt7b",
"FreeSerifBoldItalic18pt7b",
"FreeSerifBoldItalic24pt7b",
"FreeSerifItalic9pt7b",
"FreeSerifItalic12pt7b",
"FreeSerifItalic18pt7b",
"FreeSerifItalic24pt7b"
};
const int fontCount = sizeof(fonts) / sizeof(fonts[0]);
const int familySize = 4;
int currentFamily = 0;
unsigned long lastFontChange = 0;
const int yStarts[4] = {0, 11, 30, 49};
void displayFamily(int startIndex) {
tft.fillScreen(BLACK);
tft.setFont(nullptr);
tft.setTextSize(1);
tft.setTextColor(WHITE);
tft.setCursor(50, 5);
tft.print("FONT FAMILY TEST");
int16_t current_y = 20;
for (int i = 0; i < familySize; i++) {
int idx = startIndex + i;
if (idx >= fontCount)
break;
tft.setFont(fonts[idx]);
tft.setTextColor(GREEN);
int16_t x1, y1;
uint16_t w, h;
const char *textToDisplay = fontNames[idx];
tft.getTextBounds(textToDisplay, 0, 0, &x1, &y1, &w, &h);
int16_t baseline_pos = current_y + (-y1);
tft.setCursor(0, baseline_pos);
tft.print(textToDisplay);
current_y += h + 2;
}
}
void setup() {
Serial.begin(9600);
tft.begin();
tft.setRotation(1);
tft.fillScreen(BLACK);
Serial.println("=== FONT TEST ===");
}
void loop() {
if (millis() - lastFontChange > 4000) {
lastFontChange = millis();
displayFamily(currentFamily * familySize);
currentFamily = (currentFamily + 1) % (fontCount / familySize);
}
}