le code test " chrono"
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_GC9A01A.h"
#include <Wire.h>
///////////////////////// ECRAN ROND 1,28 " //////////////////
#define BLACK 0x0000
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define CYAN 0xFFE0
#define WHITE 0xFFFF
#define Maroon 0x7800
#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 oldSec, oldMi, T;
#include <OneButton.h>
const int boutonPin = 2; // Broche du bouton
unsigned long tempsDebut = 0; // Stocke le temps auquel le chronomètre est démarré
unsigned long tempsPasse = 0; // Stocke le temps écoulé depuis le démarrage du chronomètre
bool chronometreEnMarche = false; // Indique si le chronomètre est en cours d'exécution
OneButton bouton(boutonPin, true); // Créez un objet OneButton en spécifiant la broche du bouton et si elle est en mode pull-up
void setup() {
Serial.begin(9600); // Initialise la communication série
////////////////// TFT ////////////////////
tft.begin();
tft.fillScreen(GC9A01A_BLACK);
bouton.attachClick(toggleChronometre); // Attachez la fonction toggleChronometre() à l'événement de clic sur le bouton
bouton.attachLongPressStart(startResetChronometre); // Attachez la fonction startResetChronometre() à l'événement de début d'appui long sur le bouton
bouton.attachDuringLongPress(resetChronometre); // Attachez la fonction resetChronometre() à l'événement de maintien d'appui long sur le bouton
}
void loop() {
bouton.tick(); // Appel de la méthode tick() de la bibliothèque OneButton dans la boucle loop()
if (T == 0) {
tft.setTextSize(8);
tft.setCursor(65, 90);
tft.print(00);
tft.setCursor(15, 90);
tft.print(00);
tft.setCursor(180, 90);
tft.print(00);
tft.setCursor(130, 90);
tft.print(00);
tft.setCursor(96, 104);
tft.print(":");
T = 1;
}
if (chronometreEnMarche) {
unsigned long tempsActuel = millis();
tempsPasse = tempsActuel - tempsDebut;
}
afficherTemps(tempsPasse);
delay(10); // Légère pause pour la stabilité
}
void toggleChronometre() {
if (chronometreEnMarche) { // Si le chronomètre est en marche, arrêtez-le
tempsPasse = millis() - tempsDebut;
chronometreEnMarche = false;
} else { // Sinon, démarrez ou redémarrez le chronomètre
tempsDebut = millis() - tempsPasse;
chronometreEnMarche = true;
}
}
void startResetChronometre() {
// Si l'appui long débute alors que le chronomètre est arrêté, remettez-le à zéro
if (!chronometreEnMarche) {
resetChronometre();
}
}
void resetChronometre() {
// Réinitialise le chronomètre en remettant à zéro les variables
tempsDebut = 0;
tempsPasse = 0;
chronometreEnMarche = false;
Serial.println("Chronomètre réinitialisé !");
}
void afficherTemps(unsigned long temps) {
unsigned long secondes = temps / 1000;
unsigned long minutes = secondes / 60;
secondes %= 60;
tft.setTextSize(8);
tft.setTextColor(WHITE);
if (oldMi != minutes) {
tft.fillRect(5, 78, 120, 86, tft.color565(0, 0, 0)); // carré pour effacer les minutes
tft.setCursor(65, 90);
tft.print(minutes % 10, DEC);
tft.setCursor(15, 90);
tft.print(minutes / 10, DEC);
oldMi = minutes;
}
if (oldSec != secondes) {
tft.fillRect(116, 78, 120, 86, tft.color565(0, 0, 0)); // carré pour effacer les secondes
// tft.fillRect(98, 90, 6, 22, tft.color565(0, 0, 0)); // // carré pour effacer les : des minutes
tft.setCursor(180, 90);
tft.print(secondes % 10, DEC);
tft.setCursor(130, 90);
tft.print(secondes / 10, DEC);
tft.setCursor(96, 104);
tft.print(":");
oldSec = secondes;
}
}