/* Pilote MOTEUR 2 sens de marche avec 2 relais et 3 bp Attention ce sketch est pour des relais chinois (logique inverse, HIGH éteint la sortie) Pour des relais "standart il faut inverser les états (LOW par HIGH) Les fin de course sont à cablés en "hard" */ #define PIN_BOUTON_STOP 7 //Bouton d'arrêt #define PIN_BOUTON_ANTIHORAIRE 6 //Bouton de marche arrière #define PIN_BOUTON_HORAIRE 5 //Bouton de marche avant #define PIN_RELAIS_ANTIHORAIRE 4 //Relais de marche arrière #define PIN_RELAIS_HORAIRE 3 //Relais de marche avant void setup() { 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); digitalWrite(PIN_RELAIS_HORAIRE,HIGH); // on initialise le relais marche avant au repos (logique inverse car relais chinois) digitalWrite(PIN_RELAIS_ANTIHORAIRE,HIGH); // on initialise le relais marche arrière au repos (logique inverse car relais chinois) } void loop() { if(digitalRead(PIN_BOUTON_STOP) == HIGH){ //Lecture état bouton arrêt stopMoteur(); //Si bouton arrêt appuyé saut vers sous programme (void) stopMoteur } if(digitalRead(PIN_BOUTON_HORAIRE) == HIGH){ //Lecture état bouton marche avant stopMoteur(); //Si bouton marche avantt appuyé saut vers sous programme (void) stopMoteur (on commence par arrèter le moteur) sensHoraire(); //Ensuite on fait un saut vers sous programme (void) sensHoraire pour la marche avant delay(500); //On attend une demi seconde } if(digitalRead(PIN_BOUTON_ANTIHORAIRE) == HIGH){ //Lecture état bouton marche arrière stopMoteur(); //Si bouton marche arrière appuyé saut vers sous programme (void) stopMoteur (on commence par arrèter le moteur) sensAntiHoraire(); //Ensuite on fait un saut vers sous programme (void) sensAntiHoraire pour la marche arrière delay(500); //On attend une demi seconde } } void sensHoraire(){ //Sous programme (void) sensHoraire digitalWrite(PIN_RELAIS_ANTIHORAIRE,HIGH); //On stoppe le moteur en marche arrière delay(500); //On attend une demi seconde digitalWrite(PIN_RELAIS_HORAIRE,LOW); //On met le moteur en marche avant } void sensAntiHoraire(){ //Sous programme (void) sensAntiHoraire digitalWrite(PIN_RELAIS_HORAIRE,HIGH); //On stoppe le moteur en marche avant delay(500); //On attend une demi seconde digitalWrite(PIN_RELAIS_ANTIHORAIRE,LOW); //On met le moteur en marche arrière } void stopMoteur(){ //Sous programme (void) stopMoteur digitalWrite(PIN_RELAIS_HORAIRE,HIGH); //On stoppe le moteur en marche avant digitalWrite(PIN_RELAIS_ANTIHORAIRE,HIGH); //On stoppe le moteur en marche arrière delay(1000); //On attend une seconde } |