Comment faire un menu avec plusieurs pages

et pour fini le code de l'affichage, la ou devrait se trouver la partie menu que je galère vraiment a faire.


/************************ ECRAN ******************/
//
// CG9A01    Arduino Nano
//  RS  -------- NC
//  CS  -------- 10
//  DC ---------  9
//  SDA -------- 11
//  SCL -------- 13
//
// GND  = 0v
// VCC  = 3,3v
//////////////////////
// Bouton Menu = 2
// Bouton Chrono = 3
//////////////////////

#include <Wire.h>

#define BLACK      0x0000
#define RED        0xF800
#define GREEN      0x07E0
#define CYAN       0x07FF
#define YELLOW     0xFFE0
#define WHITE      0xFFFF
#define Maroon     0x7800

/////////////////////////  ECRAN ROND 1,28 " //////////////////
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_GC9A01A.h"

#define TFT_DC  9
#define TFT_CS  10

Adafruit_GC9A01A tft(TFT_CS, TFT_DC);

#include <Fonts/FreeSansBold9pt7b.h>
#include <Fonts/FreeSansBold12pt7b.h>
#include <Fonts/FreeSansBold18pt7b.h>
#include <Fonts/FreeSansBold24pt7b.h>

int An, Mo, Jo, He, Mi, Se, impulsionsParLitre, AuraTH, AuraTM, Hrest, Mrest;
int oldAn, oldMo, oldJo, oldHe, oldMi, oldSe, oldcoef;
float NiveauCarburant, litresParHeure, totalLitres;
float oldLh, oldconso, oldtank, oldhRest, oldTvolM; // pour savoir si il y a changement pour l'affichage
int Al;

void MenuPrincipal() {
    ReceptionData();
  AFFICHAGE();
  HORLOGE();
}


void setup() {
  Serial.begin(9600); // Initialise la communication série à 9600 bits par seconde

  ////////////////// TFT ////////////////////
  tft.begin();
  tft.fillScreen(GC9A01A_BLACK);

  AfficheInfoFond ();
}


void loop() {
  MenuPrincipal();
}


/********************************************  VOID AFFICHAGE ************************************/
void AFFICHAGE() {

  //////////////////////// Litre / heure  ( L/H )  /////////////////////////
  tft.setFont(&FreeSansBold18pt7b);
  tft.setTextColor(WHITE);

  if (litresParHeure != oldLh) {
    tft.fillRect(40, 33, 78, 32, tft.color565(0, 0, 0)); // carré noir pour effacer L/h
    if ( litresParHeure < 10.00 ) {
      tft.setCursor(60, 60); // Horizontal, Vertical
      tft.print(litresParHeure, 1);
    } else {
      tft.setCursor(41, 60); // Horizontal, Vertical
      tft.print(litresParHeure, 1);
    }
    oldLh = litresParHeure;
  }

  //////////////////////////////  totalLitres consomés pendant le vol  ( conso )  /////////////////////////

  if (totalLitres != oldconso ) {
    tft.fillRect(40, 68, 70, 32, tft.color565(0, 0, 00)); // dizaine efface L.totalLitres

    if ( totalLitres <= 9.90) {
      tft.setCursor(60, 95);
      tft.print(totalLitres, 1 ); // Unitées totalLitres
    } else {
      tft.setCursor(41, 95);
      tft.print(totalLitres, 1 ); // Unitées totalLitres
    }
    oldconso = totalLitres;
  }

  //////////////////////////////  NiveauCarburant  ( tank )  /////////////////////////

  if (NiveauCarburant != oldtank) {

    if (NiveauCarburant <= 20) {
      tft.setTextColor(RED);
    }

    tft.fillRect(40, 103, 78, 32, tft.color565(0, 0, 0)); // carré noir pour effacer

    if (NiveauCarburant < 10.00) {
      tft.setCursor(60, 130); // Horizontal, Vertical
      tft.print(NiveauCarburant, 1);
    } else {
      tft.setCursor(41, 130);
      tft.print(NiveauCarburant, 1);
    }
    oldtank = NiveauCarburant;
    Al = 1;
  }
  tft.setTextColor(WHITE);

  ////////////////////////  Autonomie  ( H rest )  /////////////////////////

  if (Mrest != oldhRest) {
    tft.fillRect(10, 138, 45, 32, tft.color565(0, 0, 0)); // carré pour effacer He
    tft.fillRect(68, 138, 50, 32, tft.color565(0, 0, 0)); // carré pour effacer Mi
    if (Mrest <= 0.00) {
      Hrest = 0;
      Mrest = 0;
    }

    if (Hrest < 10.00) {
      tft.setCursor(32, 165); // Horizontal, Vertical
      tft.print(Hrest);
    } else {
      tft.setCursor(14, 165);
      tft.print(Hrest);
    }
    if (Mrest < 10.00) {
      tft.setCursor(88, 165);
      tft.print(Mrest);
    } else {
      tft.setCursor(70, 165);
      tft.print(Mrest);
    }
    oldhRest = Mrest;
  }

  ////////////////////////  Temps de vol  ( T de vol )  /////////////////////////

  tft.setFont(&FreeSansBold12pt7b);
  tft.setTextColor(CYAN);

  if (AuraTM != oldTvolM) {
    tft.fillRect(114, 182, 32, 22, tft.color565(60, 60, 60));       // fond Gris M
    tft.fillRect(164, 182, 32, 22, tft.color565(60, 60, 60));       // fond Gris H

    tft.setCursor(118, 200);
    tft.print(AuraTH);
    tft.setCursor(166, 200);
    tft.print(AuraTM);
    oldTvolM = AuraTM;
  }

  /////////////////////////////// Coeffisiant  ////////////////////////////////
  
  int coef;
  if (impulsionsParLitre == 1420) {
    coef = 0;
  }
  if (impulsionsParLitre == 17000) {
    coef = 1;
  }
  if (impulsionsParLitre == 7000) {
    coef = 2;
  }
  if (impulsionsParLitre == 3500) {
    coef = 3;
  }
  if (impulsionsParLitre == 2100) {
    coef = 4;
  }
  tft.setFont(&FreeSansBold9pt7b);
  if (impulsionsParLitre != oldcoef) {
    tft.fillRect(188, 33, 20, 32, tft.color565(0, 0, 0)); // carré noir pour effacer L/h
    tft.setTextColor(Maroon);
    tft.setCursor(190, 60); // Horizontal, Vertical

    tft.print(coef, 1);
    oldcoef = impulsionsParLitre;
  }
}


/******************************************** VOID HORLOGE ************************************/
void HORLOGE() {

  tft.setFont(&FreeSansBold12pt7b);
  tft.setTextColor(BLACK);

  tft.setCursor(132, 226);
  tft.print(':');
  tft.setCursor(98, 226);
  tft.print(':');

  if (oldHe != He) {
    tft.fillRect(68, 210, 33, 22, tft.color565(60, 160, 60)); // carré pour effacer les heures
    tft.setCursor(83, 228);            // place le curseur pour les unitées d'heures
    tft.print(He % 10, DEC);    // garde uniquement les unitées d'heures
    tft.setCursor(70, 228);        // place le curseur pour les dizaines d'heures
    tft.print(He / 10, DEC);    // garde uniquement les dizaines d'heures
    oldHe = He;
  }

  if (oldMi != Mi) {
    tft.fillRect(104, 210, 34, 22, tft.color565(60, 160, 60)); // carré pour effacer les minutes
    tft.setCursor(117, 228);
    tft.print(Mi % 10, DEC);
    tft.setCursor(104, 228);
    tft.print(Mi / 10, DEC);
    oldMi = Mi;
  }

  if (oldSe != Se) {
    tft.fillRect(132, 210, 34, 22, tft.color565(60, 160, 60)); // carré pour effacer les secondes
    tft.fillRect(98, 210, 6, 22, tft.color565(60, 160, 60)); // // carré pour effacer les : des minutes
    tft.setCursor(151, 228);
    tft.print(Se % 10, DEC);
    tft.setCursor(138, 228);
    tft.print(Se / 10, DEC);
    oldSe = Se;
  }

}


/******************************************** VOID AFFICHAGE INFOS FOND ************************************/
void AfficheInfoFond () {

  tft.fillScreen(BLACK);

  //////////////// Affichage des infos valeurs ///////////////

  tft.fillRect(0, 176, 240, 100, tft.color565(60, 60, 60));    // fond Gris Haut
  tft.fillRect(0, 0, 240, 29, tft.color565(60, 60, 60));       // fond Gris Bas
  tft.fillRect(72, 210, 94, 22, tft.color565(60, 160, 60));  // Rectangle Vert Heure

  tft.setFont(&FreeSansBold9pt7b);
  tft.setTextColor(YELLOW);

  tft.setCursor(70, 24); 
  tft.print("Debit metre");

  tft.setCursor(38, 198); 
  tft.print("T de vol:");

  tft.setCursor(150, 200); // h pour T de Vol
  tft.print('h');

  tft.setCursor(57, 165); // h pour T REST
  tft.print("h");

  tft.setFont(&FreeSansBold12pt7b);
  tft.setTextColor(GREEN);

  tft.setCursor(125, 60);
  tft.print("L/h");

  tft.setCursor(125, 95);
  tft.print("conso");

  tft.setCursor(125, 130);
  tft.print("Tank");

  tft.setCursor(125, 165);
  tft.print("T Rest");

  tft.setTextColor(CYAN);

  tft.setCursor(118, 200);
  tft.print(0);
  tft.setCursor(166, 200);
  tft.print(0);

  ///////////////////////////////// RTC ///////////////////////
  tft.setFont(&FreeSansBold12pt7b);
  tft.setTextColor(BLACK);

  tft.setCursor(132, 226);
  tft.print(':');
  tft.setCursor(98, 226);
  tft.print(':');

  tft.setCursor(83, 228);             // place le curseur pour les unitées d'heures
  tft.print(He % 10, DEC);    // garde uniquement les unitées d'heures
  tft.setCursor(70, 228);             // place le curseur pour les dizaines d'heures
  tft.print(He / 10, DEC);    // garde uniquement les dizaines d'heures

  tft.setCursor(117, 228);
  tft.print(Mi % 10, DEC);
  tft.setCursor(104, 228);
  tft.print(Mi / 10, DEC);

  tft.fillRect(98, 210, 6, 22, tft.color565(60, 160, 60)); // // carré pour effacer les : des minutes
  tft.setCursor(151, 228);
  tft.print(Se % 10, DEC);
  tft.setCursor(138, 228);
  tft.print(Se / 10, DEC);

}

/********************************************************** VOID Menu Date Heure ***********************************************************/

void MenuDateHeure() { // MENU PRINCIPAL

  tft.fillScreen(BLACK);
  tft.setFont(&FreeSansBold18pt7b);

    tft.setTextColor(RED);

    tft.setCursor(90, 100);
    tft.print("Menu");
    tft.setCursor(20, 140);
    tft.print("Date Heure");
}

/********************************************************************** VOID MENU CHRONO **********************************************************/

void MenuChrono() {
  tft.fillScreen(BLACK);
  tft.setFont(&FreeSansBold18pt7b);
 
    tft.setTextColor(RED);

    tft.setCursor(90, 100);
    tft.print("Menu");
    tft.setCursor(98, 140);
    tft.print("Chrono");
}


void ReceptionData() {

  if (Serial.available() >= 14 * sizeof(int)  + 3 * sizeof(float)) {

    Serial.readBytes((byte*)&An, sizeof(An));
    Serial.readBytes((byte*)&Mo, sizeof(Mo));
    Serial.readBytes((byte*)&Jo, sizeof(Jo));
    Serial.readBytes((byte*)&He, sizeof(He));
    Serial.readBytes((byte*)&Mi, sizeof(Mi));
    Serial.readBytes((byte*)&Se, sizeof(Se));
    Serial.readBytes((byte*)&impulsionsParLitre, sizeof(impulsionsParLitre));
    Serial.readBytes((byte*)&AuraTH, sizeof(AuraTH));
    Serial.readBytes((byte*)&AuraTM, sizeof(AuraTM));
    Serial.readBytes((byte*)&Hrest, sizeof(Hrest));
    Serial.readBytes((byte*)&Mrest, sizeof(Mrest));
    Serial.readBytes((byte*)&NiveauCarburant, sizeof(NiveauCarburant));
    Serial.readBytes((byte*)&litresParHeure, sizeof(litresParHeure));
    Serial.readBytes((byte*)&totalLitres, sizeof(totalLitres));
  }
}