const int bouton1 = 6; //2
const int bouton2 = 7; //3
const int relai1  = 2; //8
const int relai2  = 4; //9
int fc1 = 4;
int fc2 = 5;

bool etatbouton1 = false;
bool etatbouton2 = false;
bool etatfc1 = false;
bool etatfc2 = false;

int temps = 0;


// Constantes pour le capteur ACS725 ±5A
const int pinCapteur = A0;          // Broche analogique du capteur
const float tensionRef = 5.0;       // Tension d'alimentation (Arduino 5V)
const float offset = 2.5;            // Tension au repos (0A)
const float sensibilite = 0.185;    // Sensibilité en V/A pour ±5A

// Fonction pour lire l'intensité moyenne sur 100 mesures
float lireIntensite() {
  float somme = 0;
  for (int i = 0; i < 100; i++) {
    int valADC = analogRead(pinCapteur);
    float tension = (valADC * tensionRef) / 1023.0;
    float intensite = (tension - offset) / sensibilite;
    somme += intensite;
    delay(1);
  }
  return somme / 100.0;
}

void setup() {
  pinMode(bouton1, INPUT);
  pinMode(bouton2, INPUT);
  pinMode(fc1, INPUT);
  pinMode(fc2, INPUT); 
  pinMode(relai1, OUTPUT);
  pinMode(relai2, OUTPUT);

  digitalWrite(relai1, LOW);
  digitalWrite(relai2, LOW);

  Serial.begin(9600);
  Serial.println("Lecture de l'intensité avec ACS725 ±5A");
}

void loop() {
  etatbouton1 = digitalRead(bouton1);
  etatbouton2 = digitalRead(bouton2);
  etatfc1 = digitalRead(fc1);
  etatfc2 = digitalRead(fc2);


  // Si les deux boutons sont appuyés, on éteint les deux relais
  if (etatbouton1 == HIGH && etatbouton2 == HIGH) {
    digitalWrite(relai1, LOW);
    digitalWrite(relai2, LOW);
    temps = 0;
  } else {
    // Sinon on contrôle chaque relais indépendamment
    if (etatbouton1 == HIGH && etatfc1 == HIGH) {
      digitalWrite(relai1, HIGH);
    } else {
      digitalWrite(relai1, LOW);
      temps = 0;
    }

    if (etatbouton2 == HIGH && etatfc2 == HIGH) {
      digitalWrite(relai2, HIGH);
    } else {
      digitalWrite(relai2, LOW);
      temps = 0;
    }
  }


  // Lecture de l'intensité
  float intensite = lireIntensite();
  const float seuil = 0.3;

  if (intensite > 0.2) {
    temps++;
  }

  if (intensite > seuil ) {
    // Coupure des relais en cas de dépassement du seuil trop long
    digitalWrite(relai1, LOW);
    digitalWrite(relai2, LOW);
  }

  // Affichage des informations
  Serial.print("Temps: ");
  Serial.print(temps);
  Serial.print(" - Intensité mesurée: ");
  Serial.print(intensite, 3);
  Serial.println(" A");

  delay(10);
}
