
/* Étude des méthodes de U8glib.
   Teste le calcul de l'interlignage et de l'affichage latéral automatiquement
   en fonction des caractéristiques de la police de caractère utilisée, de l'afficheur,
   et des options 2x2 et orientation PAYSAGE/PORTRAIT.
   Valider les "lignes commentaires" pour tester les variantes possibles.
   
   SDA est branché sur A4. SCL est branché sur A5
     
                                            PGM                 RAM dynamique
Compilateur v1.7.9 :                  6516 Octets (20%)          241 Octets (11%)   */

//--------------------- Définition des broches d'E/S ------------------------
// Pas d'E/S à initialiser, c'est U8glib qui s'en charge.

//------------------------ Constantes du programme --------------------------
#define Version "22/08/2024" // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

#include "U8glib.h"

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // Usage de la ligne I2C (Two Wire Interface)

//------------------------- Variables du programme --------------------------
byte  Nb_lignes_Max;

//-------------------------------------------------------------------------------------

void setup() { // Avec SpacingFactor(64) l'interlignage est en interlignage par défaut.
  //---------------- Ci-dessous les diverses options à tester -----------------
  // Coefficient d'interlignage :      0.5 / 0.8 /  1 / 1.2 / 1.5 /  2
  u8g.setFontLineSpacingFactor(64); //  32 /  51 / 64 /  77 /  96 / 128.
//  u8g.setScale2x2(); // Option double taille.
//  u8g.setRot90(); // Option PORTRAIT.
  //----------------- Ci-dessous choix de la police utilisée ------------------
  u8g.setFont(u8g_font_4x6); // Plus petite police.
//  u8g.setFont(u8g_font_6x10);
//  u8g.setFont(u8g_font_9x15);
//  u8g.setFont(u8g_font_osb18);
//  u8g.setFont(u8g_font_osb21); // Police tes grande.
  //----------------- Ci-dessus les diverses options à tester -----------------
  u8g.setFontPosTop(); u8g.firstPage();
  do { 
  Nb_lignes_Max = (u8g.getHeight() / u8g.getFontLineSpacing())-1;
  for(byte NB=0; NB < Nb_lignes_Max; NB++) {
  Aff_TEXTE(0, u8g.getFontLineSpacing()*NB,"Nb =");
  u8g.setPrintPos(u8g.getStrWidth("A")*5 , u8g.getFontLineSpacing()*NB);
  u8g.print(NB+1);}}
  while(u8g.nextPage());}
  
void loop() {} // la boucle de base ne fait rien.

//======================== Procédures de servitude =============================
void Aff_TEXTE(byte X, byte Y, char TEXTE[]) {// Choisir Y=9 pour tous les titres.
  char Caractere; byte I = 0;
  while (Caractere !=0)
        {Caractere = TEXTE[I];
        u8g.setPrintPos((I*u8g.getStrWidth("A"))+X, Y); I++; u8g.print(Caractere);}}
 
