Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define MINUTES 1
- const int buttonMarche = 2; // Bouton MARCHE
- const int buttonDet = 3; // Bouton DETERGENT
- const int buttonRinc = 4; // Bouton RINCAGE
- const int buttonAr = 5; // Bouton ARRET
- const int relayDetergent = 11;
- const int relayChauffage = 12;
- const int relayMarche = 13;
- int etatSysteme = 0; // 0=ARRET, 1=MARCHE, 2=DETERGENT, 3=RINCAGE
- bool relayDetergentState = false;
- bool relayChauffageState = false;
- bool relayMarcheState = false;
- unsigned long lastDebounceMarche = 0;
- unsigned long lastDebounceDet = 0;
- unsigned long lastDebounceRinc = 0;
- unsigned long lastDebounceAr = 0;
- const unsigned long debounceDelay = 200;
- unsigned long t0 = 0;
- unsigned long lastsec = t0; //dernier seconde
- bool tActive = false;
- void setup() {
- Serial.begin(9600);
- pinMode(buttonMarche, INPUT_PULLUP);
- pinMode(buttonDet, INPUT_PULLUP);
- pinMode(buttonRinc, INPUT_PULLUP);
- pinMode(buttonAr, INPUT_PULLUP);
- // Configuration des sorties D6 à D13
- pinMode(6, OUTPUT);
- pinMode(7, OUTPUT);
- pinMode(8, OUTPUT);
- pinMode(9, OUTPUT);
- pinMode(10, OUTPUT);
- pinMode(11, OUTPUT);
- pinMode(12, OUTPUT);
- pinMode(13, OUTPUT);
- eteindreTout();
- Serial.println("=== SYSTEME PRET ===");
- Serial.println("SEQUENCE OBLIGATOIRE : MARCHE -> DETERGENT -> RINCAGE -> ARRET");
- Serial.println("Etat actuel: ARRET - Appuyez sur MARCHE pour commencer");
- t0= millis(); //t0 Temps initial, pour calculer le temps écoulé
- lastsec = t0;
- tActive = true;
- }
- void loop() {
- //3 mins
- while (tActive && digitalRead(buttonMarche) ){//Bouton de mise en marche non appuyé
- //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
- if (tActive && (millis() - t0 >= 1000UL*60*MINUTES)) {//3 mins. 1000*60*3
- Serial.println ("Déconnectez et reconnectez l'alimentation");
- while (true){} ;//La boucle infinie reste bloquée jusqu'à ce que l'alimentation soit coupée.
- }
- if (millis() - lastsec >= 1000) {//Affiche le temps écoulé, les secondes
- lastsec += 1000; // +1 seconde
- //Serial.println((millis() - t0) / 1000);//sec
- for (int led=6;led<11;led++){
- digitalWrite (led,not digitalRead(led));
- }
- }
- }
- tActive = false;
- for (int led=6;led<11;led++){//RESET LED
- digitalWrite(led,LOW);
- }
- digitalWrite (relayMarche,true);//ON Relai Marche
- // MARCHE : Autorisé seulement depuis ARRET (état 0)
- if (!digitalRead(buttonMarche) && (millis() - lastDebounceMarche > debounceDelay)) {
- lastDebounceMarche = millis();
- if (etatSysteme == 0) {
- actionMarche();
- } else {
- Serial.println("ERREUR: MARCHE possible seulement depuis ARRET");
- }
- }
- // DETERGENT : Autorisé seulement depuis MARCHE (état 1)
- if (!digitalRead(buttonDet) && (millis() - lastDebounceDet > debounceDelay)) {;
- lastDebounceDet = millis();
- if (etatSysteme == 1) {
- actionDetergent();
- } else if (etatSysteme == 0) {
- Serial.println("ERREUR: Appuyez d'abord sur MARCHE");
- } else {
- Serial.println("ERREUR: DETERGENT déjà activé ou séquence avancée");
- }
- }
- // RINCAGE : Autorisé seulement depuis DETERGENT (état 2)
- if (!digitalRead(buttonRinc) && (millis() - lastDebounceRinc > debounceDelay)) {
- lastDebounceRinc = millis();
- if (etatSysteme == 2) {
- actionRincage();
- } else if (etatSysteme == 0) {
- Serial.println("ERREUR: Démarrez d'abord avec MARCHE");
- } else if (etatSysteme == 1) {
- Serial.println("ERREUR: Appuyez d'abord sur DETERGENT");
- } else {
- Serial.println("ERREUR: RINCAGE déjà activé");
- }
- }
- // ARRET : Autorisé depuis n'importe quel état
- if (!digitalRead(buttonAr) && (millis() - lastDebounceAr > debounceDelay)) {
- lastDebounceAr = millis();
- actionArret();
- }
- delay(50);
- }
- // 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
- void actionMarche() {
- Serial.println(">>> ETAPE 1: MARCHE ACTIVE");
- Serial.println("SORTIES D6 + D9 = HIGH");
- Serial.println("Prochaine étape: DETERGENT");
- // Activer seulement D6 et D9
- digitalWrite(6, HIGH); // D6 = HIGH
- digitalWrite(9, HIGH); // D9 = HIGH
- etatSysteme = 1;
- afficherEtat();
- }
- void actionDetergent() {
- Serial.println(">>> ETAPE 2: DETERGENT ACTIVE");
- Serial.println("AJOUT: D7 + D8 + D10 + D11 + D12 = HIGH");
- Serial.println("Prochaine étape: RINCAGE");
- // Garder D6 et D9 allumées + ajouter D7, D8, D10, D11 (détergent), D12 (chauffage)
- digitalWrite(6, HIGH); // D6 reste HIGH
- digitalWrite(9, HIGH); // D9 reste HIGH
- digitalWrite(7, HIGH); // D7 = HIGH
- digitalWrite(8, HIGH); // D8 = HIGH
- digitalWrite(10, HIGH); // D10 = HIGH
- digitalWrite(11, HIGH); // D11 = HIGH (relais détergent)
- digitalWrite(12, HIGH); // D12 = HIGH (relais chauffage)
- relayDetergentState = true;
- relayChauffageState = true;
- etatSysteme = 2;
- afficherEtat();
- }
- void actionRincage() {
- Serial.println(">>> ETAPE 3: RINCAGE ACTIVE");
- Serial.println("ARRET des LEDs détergent (D7+D8+D10+D11) et chauffage (D12)");
- Serial.println("MAINTIEN : D6 + D9 restent HIGH");
- // Garder seulement D6 et D9 allumées
- digitalWrite(6, HIGH); // D6 reste HIGH
- digitalWrite(9, HIGH); // D9 reste HIGH
- // Arrêter les LEDs détergent et chauffage
- digitalWrite(7, LOW); // D7 = LOW
- digitalWrite(8, LOW); // D8 = LOW
- digitalWrite(10, LOW); // D10 = LOW
- digitalWrite(11, LOW); // D11 = LOW (relais détergent OFF)
- digitalWrite(12, LOW); // D12 = LOW (relais chauffage OFF)
- relayDetergentState = false;
- relayChauffageState = false;
- Serial.println("Prochaine étape: ARRET");
- etatSysteme = 3;
- afficherEtat();
- }
- void actionArret() {
- Serial.println(">>> ARRET TOTAL - RETOUR A L'ETAT INITIAL");
- Serial.println("Toutes sorties OFF");
- eteindreTout();
- etatSysteme = 0;
- Serial.println("=== CYCLE TERMINE ===");
- Serial.println("Prochaine étape: MARCHE");
- }
- void eteindreTout() {
- // Eteindre toutes les sorties D6 à D13
- for(int i = 6; i <= 13; i++) {
- digitalWrite(i, LOW);
- }
- relayDetergentState = false;
- relayChauffageState = false;
- relayMarcheState = false;
- t0= millis(); //t0 Temps initial, pour calculer le temps écoulé
- lastsec = t0;
- tActive = true;
- }
- void afficherEtat() {
- Serial.print("ETAT CYCLE: ");
- switch(etatSysteme) {
- case 0: Serial.print("ARRET"); break;
- case 1: Serial.print("MARCHE"); break;
- case 2: Serial.print("DETERGENT"); break;
- case 3: Serial.print("RINCAGE"); break;
- }
- Serial.print(" | SORTIES: D6=");
- Serial.print(digitalRead(6) ? "HIGH" : "LOW");
- Serial.print(" D7=");
- Serial.print(digitalRead(7) ? "HIGH" : "LOW");
- Serial.print(" D8=");
- Serial.print(digitalRead(8) ? "HIGH" : "LOW");
- Serial.print(" D9=");
- Serial.print(digitalRead(9) ? "HIGH" : "LOW");
- Serial.print(" D10=");
- Serial.print(digitalRead(10) ? "HIGH" : "LOW");
- Serial.print(" D11=");
- Serial.print(digitalRead(11) ? "HIGH" : "LOW");
- Serial.print(" D12=");
- Serial.print(digitalRead(12) ? "HIGH" : "LOW");
- Serial.print(" D13=");
- Serial.println(digitalRead(13) ? "HIGH" : "LOW");
- Serial.print("RELAIS: Detergent=");
- Serial.print(relayDetergentState ? "ON" : "OFF");
- Serial.print(" Chauffage=");
- Serial.println(relayChauffageState ? "ON" : "OFF");
- }
Add Comment
Please, Sign In to add comment