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));
}
}