AntonioVillanueva

Projet Marco 2

Jun 3rd, 2025
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define MINUTES 1
  2. const int buttonMarche = 2;    // Bouton MARCHE
  3. const int buttonDet = 3;       // Bouton DETERGENT
  4. const int buttonRinc = 4;      // Bouton RINCAGE
  5. const int buttonAr = 5;        // Bouton ARRET
  6.  
  7. const int relayDetergent = 11;
  8. const int relayChauffage = 12;
  9. const int relayMarche = 13;
  10.  
  11. int etatSysteme = 0;  // 0=ARRET, 1=MARCHE, 2=DETERGENT, 3=RINCAGE
  12. bool relayDetergentState = false;
  13. bool relayChauffageState = false;
  14. bool relayMarcheState = false;
  15.  
  16. unsigned long lastDebounceMarche = 0;
  17. unsigned long lastDebounceDet = 0;
  18. unsigned long lastDebounceRinc = 0;
  19. unsigned long lastDebounceAr = 0;
  20. const unsigned long debounceDelay = 200;
  21.  
  22. unsigned long t0 = 0;
  23. unsigned long lastsec = t0;  //dernier seconde
  24. bool tActive = false;
  25.  
  26.  
  27. void setup() {
  28.   Serial.begin(9600);
  29.  
  30.   pinMode(buttonMarche, INPUT_PULLUP);
  31.   pinMode(buttonDet, INPUT_PULLUP);
  32.   pinMode(buttonRinc, INPUT_PULLUP);
  33.   pinMode(buttonAr, INPUT_PULLUP);
  34.  
  35.   // Configuration des sorties D6 à D13
  36.   pinMode(6, OUTPUT);
  37.   pinMode(7, OUTPUT);
  38.   pinMode(8, OUTPUT);
  39.   pinMode(9, OUTPUT);
  40.   pinMode(10, OUTPUT);
  41.   pinMode(11, OUTPUT);
  42.   pinMode(12, OUTPUT);
  43.   pinMode(13, OUTPUT);
  44.  
  45.   eteindreTout();
  46.  
  47.   Serial.println("=== SYSTEME PRET ===");
  48.   Serial.println("SEQUENCE OBLIGATOIRE : MARCHE -> DETERGENT -> RINCAGE -> ARRET");
  49.   Serial.println("Etat actuel: ARRET - Appuyez sur MARCHE pour commencer");
  50.  
  51.      t0= millis(); //t0 Temps initial, pour calculer le temps écoulé
  52.     lastsec = t0;
  53.     tActive = true;
  54.  
  55. }
  56.  
  57. void loop() {
  58.  
  59.   //3 mins
  60.   while (tActive && digitalRead(buttonMarche) ){//Bouton de mise en marche non appuyé
  61.     //Timer qui dit que , des la mise sous tension , utilisant ou pas les poussoirs , 3 minutes plus tard tout est inactif ... pour remettre en route , deconnecter  reconnecter l'alim  
  62.       if (tActive && (millis() - t0 >= 1000UL*60*MINUTES)) {//3 mins. 1000*60*3
  63.         Serial.println ("Déconnectez et reconnectez l'alimentation");
  64.         while (true){} ;//La boucle infinie reste bloquée jusqu'à ce que l'alimentation soit coupée.
  65.       }
  66.  
  67.     if (millis() - lastsec >= 1000) {//Affiche le temps écoulé, les secondes
  68.         lastsec += 1000; // +1 seconde
  69.          //Serial.println((millis() - t0) / 1000);//sec
  70.         for (int led=6;led<11;led++){
  71.           digitalWrite (led,not digitalRead(led));
  72.          
  73.          }      
  74.     }
  75.      
  76.   }
  77.  
  78.     tActive = false;
  79.     for (int led=6;led<11;led++){//RESET LED
  80.           digitalWrite(led,LOW);
  81.      }
  82.  
  83.  digitalWrite (relayMarche,true);//ON Relai Marche
  84.  
  85.   // MARCHE : Autorisé seulement depuis ARRET (état 0)
  86.   if (!digitalRead(buttonMarche) && (millis() - lastDebounceMarche > debounceDelay)) {
  87.     lastDebounceMarche = millis();
  88.     if (etatSysteme == 0) {
  89.       actionMarche();
  90.     } else {
  91.       Serial.println("ERREUR: MARCHE possible seulement depuis ARRET");
  92.     }
  93.   }
  94.  
  95.   // DETERGENT : Autorisé seulement depuis MARCHE (état 1)
  96.   if (!digitalRead(buttonDet) && (millis() - lastDebounceDet > debounceDelay)) {;
  97.     lastDebounceDet = millis();
  98.     if (etatSysteme == 1) {
  99.       actionDetergent();
  100.     } else if (etatSysteme == 0) {
  101.       Serial.println("ERREUR: Appuyez d'abord sur MARCHE");
  102.     } else {
  103.       Serial.println("ERREUR: DETERGENT déjà activé ou séquence avancée");
  104.     }
  105.   }
  106.  
  107.   // RINCAGE : Autorisé seulement depuis DETERGENT (état 2)
  108.   if (!digitalRead(buttonRinc) && (millis() - lastDebounceRinc > debounceDelay)) {
  109.     lastDebounceRinc = millis();
  110.     if (etatSysteme == 2) {
  111.       actionRincage();
  112.     } else if (etatSysteme == 0) {
  113.       Serial.println("ERREUR: Démarrez d'abord avec MARCHE");
  114.     } else if (etatSysteme == 1) {
  115.       Serial.println("ERREUR: Appuyez d'abord sur DETERGENT");
  116.     } else {
  117.       Serial.println("ERREUR: RINCAGE déjà activé");
  118.     }
  119.   }
  120.  
  121.   // ARRET : Autorisé depuis n'importe quel état
  122.   if (!digitalRead(buttonAr) && (millis() - lastDebounceAr > debounceDelay)) {
  123.     lastDebounceAr = millis();
  124.     actionArret();
  125.   }
  126.  
  127.   delay(50);
  128. }
  129. // timer qui dit que , des la mise sous tension , utilisant ou pas les poussoirs , 3 minutes plus tard tout est inactif ... pour remettre en route , deconnecter  reconnecter l'alim
  130.  
  131. void actionMarche() {
  132.   Serial.println(">>> ETAPE 1: MARCHE ACTIVE");
  133.   Serial.println("SORTIES D6 + D9 = HIGH");
  134.   Serial.println("Prochaine étape: DETERGENT");
  135.  
  136.   // Activer seulement D6 et D9
  137.   digitalWrite(6, HIGH);   // D6 = HIGH
  138.   digitalWrite(9, HIGH);   // D9 = HIGH
  139.  
  140.   etatSysteme = 1;
  141.   afficherEtat();
  142. }
  143.  
  144. void actionDetergent() {
  145.   Serial.println(">>> ETAPE 2: DETERGENT ACTIVE");
  146.   Serial.println("AJOUT: D7 + D8 + D10 + D11 + D12 = HIGH");
  147.   Serial.println("Prochaine étape: RINCAGE");
  148.  
  149.   // Garder D6 et D9 allumées + ajouter D7, D8, D10, D11 (détergent), D12 (chauffage)
  150.   digitalWrite(6, HIGH);   // D6 reste HIGH
  151.   digitalWrite(9, HIGH);   // D9 reste HIGH
  152.   digitalWrite(7, HIGH);   // D7 = HIGH
  153.   digitalWrite(8, HIGH);   // D8 = HIGH
  154.   digitalWrite(10, HIGH);  // D10 = HIGH
  155.   digitalWrite(11, HIGH);  // D11 = HIGH (relais détergent)
  156.   digitalWrite(12, HIGH);  // D12 = HIGH (relais chauffage)
  157.  
  158.   relayDetergentState = true;
  159.   relayChauffageState = true;
  160.  
  161.   etatSysteme = 2;
  162.   afficherEtat();
  163. }
  164.  
  165. void actionRincage() {
  166.   Serial.println(">>> ETAPE 3: RINCAGE ACTIVE");
  167.   Serial.println("ARRET des LEDs détergent (D7+D8+D10+D11) et chauffage (D12)");
  168.   Serial.println("MAINTIEN : D6 + D9 restent HIGH");
  169.  
  170.   // Garder seulement D6 et D9 allumées
  171.   digitalWrite(6, HIGH);   // D6 reste HIGH
  172.   digitalWrite(9, HIGH);   // D9 reste HIGH
  173.  
  174.   // Arrêter les LEDs détergent et chauffage
  175.   digitalWrite(7, LOW);    // D7 = LOW
  176.   digitalWrite(8, LOW);    // D8 = LOW
  177.   digitalWrite(10, LOW);   // D10 = LOW
  178.   digitalWrite(11, LOW);   // D11 = LOW (relais détergent OFF)
  179.   digitalWrite(12, LOW);   // D12 = LOW (relais chauffage OFF)
  180.  
  181.   relayDetergentState = false;
  182.   relayChauffageState = false;
  183.  
  184.   Serial.println("Prochaine étape: ARRET");
  185.  
  186.   etatSysteme = 3;
  187.   afficherEtat();
  188. }
  189.  
  190. void actionArret() {
  191.   Serial.println(">>> ARRET TOTAL - RETOUR A L'ETAT INITIAL");
  192.   Serial.println("Toutes sorties OFF");
  193.  
  194.   eteindreTout();
  195.   etatSysteme = 0;
  196.  
  197.   Serial.println("=== CYCLE TERMINE ===");
  198.   Serial.println("Prochaine étape: MARCHE");
  199. }
  200.  
  201. void eteindreTout() {
  202.   // Eteindre toutes les sorties D6 à D13
  203.   for(int i = 6; i <= 13; i++) {
  204.     digitalWrite(i, LOW);
  205.   }
  206.  
  207.  
  208.   relayDetergentState = false;
  209.   relayChauffageState = false;
  210.   relayMarcheState = false;
  211.  
  212.     t0= millis(); //t0 Temps initial, pour calculer le temps écoulé
  213.     lastsec = t0;
  214.     tActive = true;  
  215.  
  216. }
  217.  
  218. void afficherEtat() {
  219.   Serial.print("ETAT CYCLE: ");
  220.   switch(etatSysteme) {
  221.     case 0: Serial.print("ARRET"); break;
  222.     case 1: Serial.print("MARCHE"); break;
  223.     case 2: Serial.print("DETERGENT"); break;
  224.     case 3: Serial.print("RINCAGE"); break;
  225.   }
  226.  
  227.   Serial.print(" | SORTIES: D6=");
  228.   Serial.print(digitalRead(6) ? "HIGH" : "LOW");
  229.   Serial.print(" D7=");
  230.   Serial.print(digitalRead(7) ? "HIGH" : "LOW");
  231.   Serial.print(" D8=");
  232.   Serial.print(digitalRead(8) ? "HIGH" : "LOW");
  233.   Serial.print(" D9=");
  234.   Serial.print(digitalRead(9) ? "HIGH" : "LOW");
  235.   Serial.print(" D10=");
  236.   Serial.print(digitalRead(10) ? "HIGH" : "LOW");
  237.   Serial.print(" D11=");
  238.   Serial.print(digitalRead(11) ? "HIGH" : "LOW");
  239.   Serial.print(" D12=");
  240.   Serial.print(digitalRead(12) ? "HIGH" : "LOW");
  241.   Serial.print(" D13=");
  242.   Serial.println(digitalRead(13) ? "HIGH" : "LOW");
  243.  
  244.   Serial.print("RELAIS: Detergent=");
  245.   Serial.print(relayDetergentState ? "ON" : "OFF");
  246.   Serial.print(" Chauffage=");
  247.   Serial.println(relayChauffageState ? "ON" : "OFF");
  248. }
  249.  
Add Comment
Please, Sign In to add comment