// Tableau représentant l'état des segments pour chaque chiffre
int numbers[][7] = {
{0, 0, 0, 0, 0, 0, 1}, // 0
{1, 0, 0, 1, 1, 1, 1}, // 1
{0, 0, 1, 0, 0, 1, 0}, // 2
{0, 0, 0, 0, 1, 1, 0}, // 3
{1, 0, 0, 1, 1, 0, 0}, // 4
{0, 1, 0, 0, 1, 0, 0}, // 5
{0, 1, 0, 0, 0, 0, 0}, // 6
{0, 0, 0, 1, 1, 1, 1}, // 7
{0, 0, 0, 0, 0, 0, 0}, // 8
{0, 0, 0, 0, 1, 0, 0} // 9
};
// Connexion des broches Arduino aux segments (a, b, c, d, e, f, g)
int segmentPins[] = {6, 7, 8, 9, 10, 11, 12};
// Broches pour contrôler les digits (communs)
int digitPins[] = {2, 3, 4};
// Pin de la photorésistance
const int ldrPin = A0;
// Pin du bouton pour activer/désactiver l'affichage
const int buttonPin = 5;
int buttonState; // Etat actuel du bouton
int lastButtonState = LOW; // Dernier état du bouton
bool displayEnabled = true; // Flag pour activer/désactiver l'affichage
// Variables pour le debounce
unsigned long lastDebounceTime = 0; // Dernière fois que l'état du bouton a changé
unsigned long debounceDelay = 50; // Délai de debounce (50 ms)
// Fonction pour initialiser les broches
void initializePins() {
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
for (int i = 0; i < 3; i++) {
pinMode(digitPins[i], OUTPUT);
}
pinMode(buttonPin, INPUT); // Bouton en entrée
}
// Fonction pour éteindre tous les segments
void turnOffSegments() {
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], HIGH); // Éteindre tous les segments (actif LOW)
}
}
// Fonction pour afficher un chiffre sur un digit spécifique
void displayNumber(int number, int digitPin) {
// Activer le digit
digitalWrite(digitPins[digitPin], HIGH);
// Configurer les segments pour le nombre donné
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], numbers[number][i]);
}
// Délai pour permettre à l'affichage de se stabiliser
delay(5);
// Désactiver le digit
digitalWrite(digitPins[digitPin], LOW);
}
// Fonction pour découper un nombre en trois chiffres et les afficher
void displayToThreeDigit(int num) {
int hundreds = num / 100; // Centaines
int tens = (num / 10) % 10; // Dizaines
int ones = num % 10; // Unités
displayNumber(hundreds, 0); // Afficher les centaines
displayNumber(tens, 1); // Afficher les dizaines
displayNumber(ones, 2); // Afficher les unités
}
// Fonction pour lire la valeur de la photorésistance
int readLDR() {
int ldrValue = analogRead(ldrPin); // Lire la valeur analogique (0-1023)
int displayValue = map(ldrValue, 0, 1023, 0, 999); // Mapper la valeur sur 0-999
return displayValue;
}
// Fonction de debounce pour le bouton
void handleButtonPress() {
int reading = digitalRead(buttonPin); // Lire l'état actuel du bouton
if (reading != lastButtonState) {
lastDebounceTime = millis(); // Réinitialiser le temps du debounce si l'état change
}
// Si le délai de debounce est dépassé et que l'état du bouton a changé
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
// Si le bouton est pressé, inverser l'état d'activation de l'affichage
if (buttonState == HIGH) {
displayEnabled = !displayEnabled; // Changer l'état d'affichage
}
}
}
lastButtonState = reading; // Mémoriser le dernier état du bouton
}
void setup() {
initializePins(); // Initialiser les broches
Serial.begin(9600); // Démarrer la communication série pour le débogage
}
void loop() {
handleButtonPress(); // Gérer l'appui sur le bouton
// Si l'affichage est activé
if (displayEnabled) {
int ldrValue = readLDR(); // Lire la valeur du capteur LDR
displayToThreeDigit(ldrValue); // Afficher la valeur sur le 7 segments
// Afficher la valeur sur le moniteur série pour le débogage
Serial.print("Valeur LDR : ");
Serial.println(ldrValue);
}
//delay(100); // Pause avant de rafraîchir l'affichage
}