float COEFFICIEN_VOLTS = 231.3529; float TEMPS_CHARGE = 5; float TEMPS_PAUSE = 1; float TENSION_CONSIGNE = 1.60; float TENSION_PILE_HS = 1.25; int LED_ERREUR_PILE[] = {4,6,8,10}; int LED_CHARGE_PILE[] = {5,7,9,11}; int PIN_READ[]={3,2,1,0}; boolean CHARGE_OK[]={false,false,false,false}; boolean CHARGE_KO[]={false,false,false,false}; int PULSE_CHARGE = 13; void setup() { Serial.begin(9600); //Pin d'impulsion de Charge pinMode(13, OUTPUT); //Pins de Charge 4,6,8,10 //Pins de défaut 5,7,9,11 for (int i = 4; i <=11; i++) {pinMode(i, OUTPUT);} } //Fonction de lecture des Tensions float TENSION_PILE_CHARGEUR(int pin) {float value = 0.0; value = analogRead(pin); return value / COEFFICIEN_VOLTS;} void loop() { //------------ DEBUT DE TEST DES TENSIONS DES PILES ------------ for (int i = 0; i < 4; i++) { //Si la tension mesurée est inférieure à la limite PILE HS alors allumage des d'erreur. if (TENSION_PILE_CHARGEUR(PIN_READ[i]) < TENSION_PILE_HS) {CHARGE_KO[i]=true;} else {CHARGE_KO[i]=false;} //Si la tension mesurée est inférieure à la consigne alors allumage des voyants de charge sinon Arrêt voyant de charge. if (TENSION_PILE_CHARGEUR(PIN_READ[i]) < TENSION_CONSIGNE) {CHARGE_OK[i]=true;} else {CHARGE_OK[i]=false;} } for (int i = 0; i < 4; i++) { // Si il y a une erreur alors on allume la LED associée sinon on l'éteint. if (CHARGE_KO[i]==true) {digitalWrite(LED_ERREUR_PILE[i],HIGH);}else {digitalWrite(LED_ERREUR_PILE[i],LOW);} // Si pas d'erreur, allume le voyant de charge. if (CHARGE_OK[i]==true) {digitalWrite(LED_CHARGE_PILE[i], HIGH);} // Si pas d'erreur mais charge désactivée (Car pile chargée) on éteint les leds. if (CHARGE_OK[i]==false and CHARGE_KO[i]==false) {digitalWrite(LED_CHARGE_PILE[i], LOW);} } //---------------- MISE EN ROUTE DE LA CHARGE ---------------- //Ecriture Serial Début de charge Serial.println("Debut de charge de " + String(TEMPS_CHARGE) + " Secondes"); //Début de Charge digitalWrite(PULSE_CHARGE, HIGH); //Délai de charge delay(TEMPS_CHARGE * 1000 - 500); //Ecriture des tensions en fin de cycle charge: Serial.print("Tensions de fin de charge:\n"); for (int i=0;i<4;i++){Serial.print(String(TENSION_PILE_CHARGEUR(PIN_READ[i]), 3) + "v ");} Serial.print("\n"); //-------------------- ARRET DE LA CHARGE -------------------- //RESET des Leds for (int i = 3; i >= 0; i--) {digitalWrite(LED_CHARGE_PILE[i], LOW);} //Arrêt de la charge digitalWrite(PULSE_CHARGE, LOW); //Ecriture Serial Début de pause Serial.println("Pause de " + String(TEMPS_PAUSE) + " Secondes"); //Pause de charge delay(TEMPS_PAUSE * 1000 - 500); //Ecriture des tensions à vide Serial.print("Tensions a vide:\n"); for (int i=0;i<4;i++){Serial.print(String(TENSION_PILE_CHARGEUR(PIN_READ[i]), 3) + "v ");} Serial.print("\n\n"); }