
/* Étude des méthodes de U8glib.
   Exemple de graphiques et de textes affichés rapidement.
   SDA est branché sur A4.
   SCL est branché sur A5
     
                                            PGM                 RAM dynamique
Compilateur v1.7.9 :                 10808 Octets (33%)          299 Octets (14%)   */

//--------------------- 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 Nature_Ecran = 0;

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

void setup() {
  u8g.setFont(u8g_font_6x10); u8g.setFontRefHeightExtendedText();
  u8g.setDefaultForegroundColor(); u8g.setFontPosTop();
  pinMode(LED_Arduino,OUTPUT);}

void loop() {
  Tracer(); Nature_Ecran++; if (Nature_Ecran > 6) Nature_Ecran = 0; delay(1000);
  digitalWrite(LED_Arduino,!digitalRead(LED_Arduino)); }

//======================== Procédures de servitude =============================
void Tracer_des_Rectangles() {u8g.drawBox(5,10,20,10); u8g.drawBox(20,15,30,7);
     u8g.drawFrame(5,40,20,10); u8g.drawFrame(20,45,30,7);}

void Tracer_des_Cercles() {u8g.drawDisc(20,10,6); u8g.drawDisc(40,15,6);
     u8g.drawCircle(50,40,6); u8g.drawCircle(80,45,6);}

void Rectangles_arrondis() {u8g.drawRFrame(5, 10,40,30, 5); u8g.drawRBox(50, 10,25,40, 5);}

void Tracer_des_Lignes() {u8g.drawLine(7, 10, 40, 55);
  u8g.drawLine(14, 10, 60, 55); u8g.drawLine(21, 10, 80, 55); u8g.drawLine(28, 10, 100, 55);}

void Tracer_des_Triangles() {u8g.drawTriangle(14,7, 45,30, 10,40); u8g.drawTriangle(24,-3, 55,20, 67,0);
  u8g.drawTriangle(77,10, 65,30, 106,53); u8g.drawTriangle(20,50, 55,30+10, 96,63);}

void Page_ASCII() {
  char Caractere[2] = " "; byte X, Y;
  for( Y = 0; Y < 5; Y++ ) {
    for( X = 0; X < 16; X++ ) {Caractere[0] = Y*16 + X + 32; u8g.drawStr(X*7, Y*10+10, Caractere);}}}
    
void Suite_Page_ASCII() {
  char Caractere[2] = " "; byte X, Y;
  for( Y = 0; Y < 5; Y++ ) {
    for( X = 0; X < 16; X++ ) {Caractere[0] = Y*16 + X + 161; u8g.drawStr(X*7, Y*10+10, Caractere);}}}

void Tracer() {
  u8g.firstPage();
  do {
  switch(Nature_Ecran) {
    case 0 : {Tracer_des_Rectangles(); break;}
    case 1 : {Tracer_des_Cercles(); break;}
    case 2 : {Rectangles_arrondis(); break;}
    case 3 : {Tracer_des_Lignes(); break;}
    case 4 : {Tracer_des_Triangles(); break;}
    case 5 : {Page_ASCII(); break;}
    case 6 : Suite_Page_ASCII(); break;}}
  while(u8g.nextPage());}
