
/* Étude des méthodes de U8glib pour l'affichage du curseur.
   Démonstrateur qui émule un compteur et un décompteur simultanés.
   Voir en fin de programme les observations.
   SDA est branché sur A4.
   SCL est branché sur A5
     
                                            PGM                 RAM dynamique
Compilateur v1.7.9 :                  13414 Octets (41%)          242 Octets (11%)   */

//--------------------- Définition des broches d'E/S ------------------------
#define LED_Arduino 13

//------------------------ 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 I = 32;

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

void setup() {
  pinMode(LED_Arduino, OUTPUT);
  u8g.setFont(u8g_font_6x10); // Pocice de matrices de 6x10 pixels.
  u8g.setCursorFont(u8g_font_cursor);} // Si (u8g_font_cursorr) avec deux 'r'
  //                u8g_font_cursorr >>> fonte réduite à 12 empreintes. 

void loop() {
  PAGE1(); I++; if (I > 185) I = 32;
  Inverser_LED_Arduino();}

//======================== Procédures de servitude =============================
void PAGE1() {
  u8g.firstPage(); do {// Début de la boucle d'affichage de la page écran.
  //================ Définition des éléments à afficher ================
  CADRE(); u8g.drawStr(76, 12, "Style ="); u8g.setPrintPos(92, 25); u8g.print(I);
  u8g.drawVLine(32,1,62); u8g.drawHLine(1,31,62); u8g.drawVLine(63,1,62);
  u8g.drawBox(79,28,34,34); // Carré bleu en surface.
  //u8g.drawFrame(79,28,34,34); // Encadrement carré.
  //-----------------------------------
  u8g.setCursorStyle(I);
  u8g.setCursorPos(32,31);
  // u8g.enableCursor(); // N'affiche pas ?
  u8g.drawCursor();
  //-----------------------------------
  u8g.setCursorPos(96,45);
 // u8g.drawCursor();
  u8g.enableCursor();
  }
  //====================================================================
  while(u8g.nextPage());} // Fin de la boucle d'affichage de la page écran.
 
void CADRE() {u8g.drawFrame(0,0,128,64);}

void Inverser_LED_Arduino() {digitalWrite(LED_Arduino,!digitalRead(LED_Arduino)); delay(1000);}

/* Constats de comportements "étranges" :

1) L'affichage du curseur dans le carré blanc semble anticipe parfois sur celui dans le carré principal.
   Si on passe en commentaire la ligne 33 et que l'on valide la ligne 34, les deux curseurs
   sont identiques.

2) u8g.enableCursor(); en ligne 38 ne fonctionne pas.

3) u8g.disableCursor(); semble sans effet quel que soit son emplacement.   */
               






