// Déclaration des broches pour le 3-Digit 7 Segment
const int segments[7] = {2, 3, 4, 5, 6, 7, 8}; // Broches pour les segments A-G
const int digits[3] = {9, 10, 11}; // Broches pour les 3 digits

// Tableau pour chaque chiffre de 0 à 9 (segments A-G)
const byte numbers[10] = {
  0b11111100,  // 0
  0b01100000,  // 1
  0b11011010,  // 2
  0b11110010,  // 3
  0b01100110,  // 4
  0b10110110,  // 5
  0b10111110,  // 6
  0b11100000,  // 7
  0b11111110,  // 8
  0b11110110   // 9
};

// Variables
int sensorPin = A1;    // Capteur de lumière sur la broche A1
int sensorValue = 0;   // Valeur lue (0-1023)
int percentage = 0;    // Valeur calculée (0-100)

// Fonction pour afficher un chiffre sur un digit spécifique
void displayNumber(int digit, int number) {
  // Activer le digit
  for (int i = 0; i < 3; i++) {
    digitalWrite(digits[i], HIGH);  // Désactiver les digits
  }
  digitalWrite(digits[digit], LOW);  // Activer le digit spécifié

  // Afficher le chiffre sur les segments
  for (int i = 0; i < 7; i++) {
    digitalWrite(segments[i], bitRead(numbers[number], 7 - i)); // Allumer les segments
  }
}

// Fonction de configuration initiale
void setup() {
  // Configurer les broches de segments comme sortie
  for (int i = 0; i < 7; i++) {
    pinMode(segments[i], OUTPUT);
    digitalWrite(segments[i], LOW);
  }

  // Configurer les broches des digits comme sortie
  for (int i = 0; i < 3; i++) {
    pinMode(digits[i], OUTPUT);
    digitalWrite(digits[i], HIGH);  // Désactiver les digits
  }

  // Initialisation du port série (facultatif)
  Serial.begin(9600);
}

// Boucle principale
void loop() {
  // Lire la valeur du capteur (entre 0 et 1023)
  sensorValue = analogRead(sensorPin);

  // Convertir la valeur en pourcentage (0 à 100)
  percentage = map(sensorValue, 0, 1023, 0, 100);

  // Afficher le pourcentage sur les 3 digits
  int hundreds = percentage / 100;
  int tens = (percentage / 10) % 10;
  int ones = percentage % 10;

  // Afficher les chiffres avec multiplexage
  displayNumber(0, hundreds);  // Centaines
  delay(5);
  displayNumber(1, tens);      // Dizaines
  delay(5);
  displayNumber(2, ones);      // Unités
  delay(5);

  // Afficher la valeur sur le moniteur série (facultatif)
  Serial.print("Luminosité: ");
  Serial.print(sensorValue);
  Serial.print(" / 1023, Pourcentage: ");
  Serial.println(percentage);
}