#define PIN_BOUTON_AUTO 7 #define PIN_BOUTON_STOP 6 #define PIN_BOUTON_HORAIRE 5 #define PIN_BOUTON_ANTIHORAIRE 4 #define PIN_RELAIS_HORAIRE 3 #define PIN_RELAIS_ANTIHORAIRE 2 #define PIN_POT A0 // potentiometre int val = 0; int tempsAdditionnel = 0; // fin potentiometre // variable qui gere le mode auto bool modeAuto = 0 ; int modeNumber = 0 ; long temps = 0 ; long tempsMax = 20000 ;// temps minimum en ms 20000 = 20secondes void setup() { pinMode(PIN_BOUTON_AUTO, INPUT); pinMode(PIN_BOUTON_STOP, INPUT); pinMode(PIN_BOUTON_HORAIRE, INPUT); pinMode(PIN_BOUTON_ANTIHORAIRE, INPUT); pinMode(PIN_RELAIS_HORAIRE, OUTPUT); pinMode(PIN_RELAIS_ANTIHORAIRE, OUTPUT); } void loop() { // potentiometre de temps val = analogRead(PIN_POT); tempsAdditionnel = ( map(val, 0, 1023, 0, 21) * 1000 ); if(digitalRead(PIN_BOUTON_AUTO) == HIGH){ automatic(); } if(digitalRead(PIN_BOUTON_STOP) == HIGH){ modeAuto = 0 ; modeNumber = 0 ; stopMoteur(); } if(digitalRead(PIN_BOUTON_HORAIRE) == HIGH){ modeAuto = 0 ; modeNumber = 0 ; stopMoteur(); sensHoraire(); delay(500); } if(digitalRead(PIN_BOUTON_ANTIHORAIRE) == HIGH){ modeAuto = 0 ; modeNumber = 0 ; stopMoteur(); sensAntiHoraire(); delay(500); } // dans le mode automatique on passe dans cette condition de temps et d'étape if(modeAuto == 1){ // controle du temps a l'etape 1 et 3 if(modeNumber == 1 || modeNumber == 3 ){ // si le temps est écoulé on appelle automatic qui va mettre un stop if(millis()>(temps + tempsMax + tempsAdditionnel)){ automatic(); } } } } void sensHoraire(){ digitalWrite(PIN_RELAIS_HORAIRE,HIGH); digitalWrite(PIN_RELAIS_ANTIHORAIRE,LOW); } void sensAntiHoraire(){ digitalWrite(PIN_RELAIS_HORAIRE,LOW); digitalWrite(PIN_RELAIS_ANTIHORAIRE,HIGH); } void automatic(){ modeAuto = 1 ; modeNumber++; switch (modeNumber) { case 4: stopMoteur(); modeNumber = 0; break; case 3: stopMoteur(); temps = millis(); sensAntiHoraire(); break; case 2: stopMoteur(); break; case 1: stopMoteur(); temps = millis(); sensHoraire(); break; default : stopMoteur(); break; } } void stopMoteur(){ digitalWrite(PIN_RELAIS_HORAIRE,LOW); digitalWrite(PIN_RELAIS_ANTIHORAIRE,LOW); delay(1000); }