J'avais converti le font FreeSansBoldOblique9pt7b.h de Adafruit_GFX en FreeSansBoldOblique6pt7b.h
Mais j'ai complètement oublié comment j'y étais parvenu
Il y a un tuto ici :
Bon courage !
Ce n'était pas une création mais une conversion automatique
un changement de dimension des caracteres
Je n'ai jamais fait ça, mais il semble que l'outil fontconvert puisse faire ça.
If you want to create new font sizes not included with the library, or adapt entirely new fonts, we have a command-line tool (in the “fontconvert” folder) for this. It should work on many Linux- or UNIX-like systems (Raspberry Pi, Mac OS X, maybe Cygwin for Windows, among others).
Building this tool requires the gcc compiler and FreeType library. Most Linux distributions include both by default. For others, you may need to install developer tools and download and build FreeType from the source. Then edit the Makefile to match your setup before invoking “make”.
fontconvert expects at least two arguments: a font filename (such as a scalable TrueType vector font) and a size, in points (72 points = 1 inch; the code presumes a screen resolution similar to the Adafruit 2.8" TFT displays). The output should be redirected to a .h file…you can call this whatever you like but I try to be somewhat descriptive:
./fontconvert myfont.ttf 12 > myfont12pt7b.h
L'outil est ici : je ne sais pas s'il est utilisable sous un autre OS que Linux.
J'ai retrouvé!
- Il suffit de lancer cette application en ligne : truetype2gfx - Converting fonts from TrueType to Adafruit GFX
- choisir la police à convertir
- choisir sa dimension
- lancer sa conversion GFX
- supprimer le suffixe .html
- copier ce fichier dans le dossier fonts de Adafruit_GXF library
c'est tout et ça marche
Merci à toi Lesept de t'y être interressé
OK, merci de l'info. Bonne continuation.
Suggestion : tu peux faire un tuto sur ça dans la section idoine... Ca peut servir à d'autres !
Fait!
QUESTIONS :
1 - Pourquoi dans l' iDE y-a-t-il parfois des zones avec l'arrière fond rose?
2- Lorsque je sélectionne un mot , tous les autres mêmes mots sont surlignés .. comment supprimer cela??

En compilant ce sketch j'ai un arrêt de la compilation sans message d'erreur
Une idée?
// VERSION 6 octobre AVEC ANNIVERSAIRES
// --------------- besoins pour affichage anniversaires
#include <SD.h>
#include <SPI.h>
File fichierAniv;
static char buf[50];
int i;
int c;
int ligne = 0;
char *p1;
char *p2;
char *p3;
char *p4;
char *p5;
// --------------- besoins pour affichage horloge
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
int ledPin = 16;
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset de l'OLED partagé avec l'Arduino (d'où la valeur à -1, et non un numéro de pin)
#define Oled_ADDRESS 0x3C // Adresse de "mon" écran OLED sur le bus i2c (généralement égal à 0x3C ou 0x3D)
Adafruit_SSD1306 ecranOLED(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // initialisation de l'écran avec le nom ecranOLED (à choisir)
//---------------- choix des polices
// Fonts est le nom du dossier dans lequel se trouvent tous les fonts de la bibliotheque Adafruit_GFX
#include <Fonts/FreeSans6pt7b.h>
#include <Fonts/FreeSansBold9pt7b.h>
#include <Fonts/FreeSansBold12pt7b.h>
//---------------- besoins pour WIFI
#include <ESP8266WiFi.h>
const char *ssid = "WORKGROUP 2.4GHz";
const char *password = "arzene66";
int y;
String BUFFER_H;
//----------------- besoins pour internet
#include <EasyNTPClient.h>
#include <WiFiUdp.h>
#include <Timezone.h>
//------------------ besoins pour extraction données hors du WiFi
WiFiUDP Udp_G; // Objet UDP permettant d'envoyer et recevoir des trames Wi-Fi selon le protocole UDP
EasyNTPClient ClientNtp_G(Udp_G, "pool.ntp.org"); // Objet NTP synchronisé avec "pool.ntp.org"
TimeChangeRule RegleHeureEteFrance_G = { "RHEE", Last, Sun, Mar, 2, 120 }; // Règle de passage à l'heure d'été pour la France
TimeChangeRule RegleHeureHiverFrance_G = { "RHHE", Last, Sun, Oct, 3, 60 }; // Règle de passage à l'heure d'hiver la France
Timezone ConvertirHeureFrance_G(RegleHeureEteFrance_G, RegleHeureHiverFrance_G); // Objet de conversion d'heure avec les caractéristique de la métropole française
//------------------- matrice du logo Wifi
const unsigned char logoWIFI[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00,
0x3f, 0xff, 0xf0, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xf8,
0x00, 0x7f, 0xc0, 0x1f, 0xc0, 0x00, 0x0f, 0xe0, 0x3f, 0x00, 0x00, 0x03, 0xf0, 0x7e, 0x03, 0xff,
0x01, 0xf8, 0x78, 0x1f, 0xff, 0xe0, 0x78, 0x70, 0x7f, 0xff, 0xf8, 0x38, 0x00, 0xff, 0xff, 0xfc,
0x00, 0x01, 0xfc, 0x00, 0xfe, 0x00, 0x03, 0xf0, 0x00, 0x3f, 0x00, 0x03, 0xc0, 0x00, 0x0f, 0x00,
0x03, 0x80, 0x38, 0x07, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00,
0x1f, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0x87, 0xe0, 0x00, 0x00, 0x1e, 0x01, 0xe0, 0x00, 0x00, 0x08,
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0xfc,
0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
} ;
void setup() { // exécuté 1 fois
// =========== PARTIE NECESSAIRE POUR HORLOGE ==============
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.begin(115200);
Wire.begin(4, 5);
WiFi.begin(ssid, password);
ecranOLED.begin(SSD1306_SWITCHCAPVCC, Oled_ADDRESS); // initialize with the I2C addr 0x3C
ecranOLED.clearDisplay(); // Vidange du buffer de l'écran OLED
//---- attente signal WiFi
unsigned long chrono = millis(); // remplace la fonction delai
while (millis() - chrono < 3000) yield();
while (WiFi.status() != WL_CONNECTED) {
affichagelogoWifi(); // appel sous-programme affichage logowifi clignotant
}
digitalWrite(ledPin, HIGH);
}
void loop() { // executé à l'infini
time_t HeureLocale_L;
HeureLocale_L = ConvertirHeureFrance_G.toLocal(ClientNtp_G.getUnixTime());
AfficherHeureLocale(HeureLocale_L);
}
//================ SOUS-PROGRAMME affichage logoWiFi
void affichagelogoWifi(void) {
//------------------ affichage logo WIFI
//drawBitmap(x position, y position, bitmap data, bitmap width, bitmap height, color)
ecranOLED.drawBitmap(50, 20, logoWIFI, 38, 32, WHITE); // dessin et position du logo placés dans le buffer
ecranOLED.display(); // affichage sur l'écran du contenu du buffer
unsigned long chrono = millis();
// chrono = millis(); // remplace la fonction delai
while (millis() - chrono < 600) yield(); // durée logo visible
//------------------ Extinction logo WIFI
ecranOLED.clearDisplay(); // dessin et position du logo placés dans le buffer
ecranOLED.display(); // affichage sur l'écran du contenu du buffer
chrono = millis(); // remplace la fonction delai
while (millis() - chrono < 300) yield(); //durée logo éteint
}
//=================== SOUS PROGRAMME centrage textes
void oledDisplayCenter(String text, int Y) {
int16_t x1;
int16_t y1;
uint16_t width;
uint16_t height;
ecranOLED.getTextBounds(text, 0, 0, &x1, &y1, &width, &height); // extraction de la longueur width du texte
ecranOLED.setCursor((SCREEN_WIDTH - width) / 2, Y); // (largeur écran - longueur du texte) / 2 donne le point de départ du texte
}
//===================SOUS PROGRAMME positionnementà droite des textes
void oledDisplayDroit(String text, int Y) {
int16_t x1;
int16_t y1;
uint16_t longueur;
uint16_t height;
ecranOLED.getTextBounds(text, 0, 0, &x1, &y1, &longueur, &height);
ecranOLED.setCursor((102 - longueur), Y);
ecranOLED.print(text); // text to display
}
// =============== SOUS PROGRAMME AFFICHAGE SUR ECRAN
void AfficherHeureLocale(time_t Heure_P) {
char BUFFER_H[50];
char BUFFER_H1[50];
char BUFFER_H2[50];
char BUFFER_J[50];
char BUFFER_D[50];
char AbreviationMois_L[12][10] = { "Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre" };
char AbreviationJour_L[7][10] = { "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi" };
//----- effacement buffer écran
ecranOLED.clearDisplay();
//------création buufer Date = texte affiché
sprintf(BUFFER_D, "%s - %d", AbreviationMois_L[month(Heure_P) - 1], year(Heure_P));
ecranOLED.setFont(&FreeSans6pt7b); //mois, année = petits caractères
ecranOLED.setTextColor(WHITE);
oledDisplayCenter(BUFFER_D, 10);
ecranOLED.print(BUFFER_D);
//----- création buffer Jour = texte affiché
sprintf(BUFFER_J, "%s %.2d", AbreviationJour_L[weekday(Heure_P) - 1], day(Heure_P)); // %.2d affiche (01) et %.d affiche ( 1)
ecranOLED.setFont(&FreeSansBold9pt7b); //jour et date = moyens caractères
ecranOLED.setTextColor(WHITE);
oledDisplayCenter(BUFFER_J, 30);
ecranOLED.print(BUFFER_J);
//----- création buffer heure-minutes = texte affiché
sprintf(BUFFER_H1, "%d:%.2d", hour(Heure_P), minute(Heure_P)); // creation et remplissage de la variable "BUFFER_H"... %d
ecranOLED.setFont(&FreeSansBold12pt7b); //heure et minutes = gros caracteres
ecranOLED.setTextColor(WHITE);
oledDisplayCenter(BUFFER_H1, 62);
ecranOLED.print(BUFFER_H1);
//----- création buffer seconde
sprintf(BUFFER_H2, "%2d", second(Heure_P)); // creation et remplissage de la variable "BUFFER_H"
ecranOLED.setFont(&FreeSans6pt7b);
ecranOLED.setTextColor(WHITE);
ecranOLED.setCursor(108, 62);
ecranOLED.print(BUFFER_H2);
//-------affichage buffer sur écran
ecranOLED.display();
}
resultat compilation :
C'est qu'il n'y a pas d'erreur.
Maintenant, si tu copiais le contenu de la fenêtre de sortie de compilation au lieu de faire des copies d'écran on pourrait, peut-être, en dire plus.
Tu parles bien de compilation, pas de téléchargement?
Quel thème utilises-tu?
Cela fait partie du thème que tu utilises. Il n'y a pas, à ma connaissance, de moyen de modifier cela sans éditer le thème.
/Volumes/4T-LACIE/CALENDRIER ANNIVERSAIRE/HORLOGE_CALENDRIER_WIFI_AVEC_ANNIVERSAIRES_vers_6_oct/HORLOGE_CALENDRIER_WIFI_AVEC_ANNIVERSAIRES_vers_6_oct/HORLOGE_CALENDRIER_WIFI_AVEC_ANNIVERSAIRES_vers_6_oct.ino: In function 'void AfficherHeureLocale(time_t)':
/Volumes/4T-LACIE/CALENDRIER ANNIVERSAIRE/HORLOGE_CALENDRIER_WIFI_AVEC_ANNIVERSAIRES_vers_6_oct/HORLOGE_CALENDRIER_WIFI_AVEC_ANNIVERSAIRES_vers_6_oct/HORLOGE_CALENDRIER_WIFI_AVEC_ANNIVERSAIRES_vers_6_oct.ino:212:8: warning: unused variable 'BUFFER_H' [-Wunused-variable]
212 | char BUFFER_H[50];
| ^~~~~~~~
/Volumes/4T-LACIE/CALENDRIER ANNIVERSAIRE/HORLOGE_CALENDRIER_WIFI_AVEC_ANNIVERSAIRES_vers_6_oct/HORLOGE_CALENDRIER_WIFI_AVEC_ANNIVERSAIRES_vers_6_oct/HORLOGE_CALENDRIER_WIFI_AVEC_ANNIVERSAIRES_vers_6_oct.ino: At global scope:
/Volumes/4T-LACIE/CALENDRIER ANNIVERSAIRE/HORLOGE_CALENDRIER_WIFI_AVEC_ANNIVERSAIRES_vers_6_oct/HORLOGE_CALENDRIER_WIFI_AVEC_ANNIVERSAIRES_vers_6_oct/HORLOGE_CALENDRIER_WIFI_AVEC_ANNIVERSAIRES_vers_6_oct.ino:8:13: warning: 'buf' defined but not used [-Wunused-variable]
8 | static char buf[50];
| ^~~
. Variables and constants in RAM (global, static), used 29296 / 80192 bytes (36%)
║ SEGMENT BYTES DESCRIPTION
╠══ DATA 1548 initialized variables
╠══ RODATA 1196 constants
╚══ BSS 26552 zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 60931 / 65536 bytes (92%)
║ SEGMENT BYTES DESCRIPTION
╠══ ICACHE 32768 reserved space for flash instruction cache
╚══ IRAM 28163 code in IRAM
. Code in flash (default, ICACHE_FLASH_ATTR), used 264256 / 1048576 bytes (25%)
║ SEGMENT BYTES DESCRIPTION
╚══ IROM 264256 code in flash
Il n'y a aucune erreur.
Quel est ton problème?
Cela fait partie du thème que tu utilises. Il n'y a pas, à ma connaissance, de moyen de modifier cela sans éditer le thème.
Pareil sur tous les themes
Je ne lancais que la compilation et je n'avais pas le message habituel de compilation terminée, j'ai crû qu'il y avait un arrêt dans la compilation
En lançait la compil et le teléversement en même temps cela fonctionne
merci
Pareil sur tous les thèmes.
Si tu installes des thèmes autres que ceux proposés par défaut, tu as la possibilité de les éditer pour changer les couleurs, tu peux alors faire un peu ce que tu veux.
Ne pas négliger quand même l'avantage de la mise en surbrillance des occurrences d'une variable dans le code. Lorsqu'on sélectionne une variable l'éditeur met en surbrillance toutes les occurrences de cette variables mais la couleur est différente si la variable est utilisée ou si on lui affecte une valeur. Cela permet de voir assez vite si on modifie une variable accidentellement (typiquement lorsqu'on se trompe et que l'on utilise = au lieu de == dan un test)
Par exemple dans la copie d'écran on voit que mask est en bleu ou en gris suivant que c'est une utilisation ou une affectation de la variable.
Pour installer des thème tiers voir ici l'explication
Je ne te cacherais pas que la recherche d'un thème est plutôt laborieuse.
Mais une fois que tu en as un, tu peux le modifier assez simplement.
les fichiers .vsix sont des zip on peut donc les décompresser pour en éditer le contenu.
Ils ont cette forme
nom-du-theme/
├── [Content_Types].xml
├── extension/
| └──themes
| | └── le-nom-du-theme.json
| packages.json
└── extension.vsixmanifest
L'affectation des couleurs se trouve dans le-nom-du-theme.json
Le nom des champs est suffisamment explicite pour que l'on trouve sans trop tâtonner ce que l'on désire.
On peut laisser le thème décompressé dans plugins pour travailler dessus.
Il faut quitter l'IDE et le relancer pour que les modifications soient prises en compte.
Il faut penser à changer le nom du fichier de thème sinon on ne sait plus s'y retrouver dans la liste des thèmes dans les préférences.
Il faut aussi mettre à jour le contenu de:
- extension.vsixmanifest
- packages.json
Pour que le contenu des fichiers soit cohérent avec le nouveau nom du thème.
Cela parait complexe mais mérite qu'on s'y interesse et que l'on essaye de maitriser ces themes
Merci
Ce sont juste des messages pour t'indiquer que tu déclares des variables qui ne sont pas utilisées par la suite. Rien de grave, ce n'est pas une erreur.
Comme l'indique @lesept les messages d'avertissement que tu as, n'ont pas d'incidence mais ce n'est pas toujours le cas.
Je te conseillerais, surtout quand on n'est pas un programmeur expérimenté de ne pas laisser de "warning"
Un mystère pour moi
Pourquoi quand j'écris ceci :
Serial.print ( AbreviationMois_L[month(Heure_P) - 1]);
la compilation passe et j'obtiens dans le moniteur par exemple octobre
Mais quand plus loin j'écris ceci :
char charmois = AbreviationMois_L[month(Heure_P) - 1];
String stringOne = String(charmois);
stringOne.toInt(); // conversion CHAR en INT
if (stringOne = p4) { // P4 est un nombre
Serial.println("anniversaire de Joseph");
}
Serial.println("pas d'anniversaire");
char charmois = AbreviationMois_L[month(Heure_P) - 1];
La compil me donne cette erreur :
Compilation error: 'AbreviationMois_L' was not declared in this scope
Je vois plusieurs problèmes juste dans ce petit bout de code :
month est une fonction ?
Pour ce genre de problème, il nous faut connaitre le code entier pour pouvoir répondre.
Une comparaison c'est avec '==' !
Ici tu déclares un seul caractère / octet. Est-ce bien ce que tu veux ?
Enfin, tu le déclares deux fois de suite, le compilateur ne doit pas aimer trop...
Il faut aussi donner l'ensemble du message d'erreur : il contient d'autres informations utiles, comme par exemple le numéro de la ligne. Ici on ne sait pas s'il pointe sur le première ou la seconde définition.


