/*Programme de pilotage d'un moteur pap via arduino, 2 switchs et un driver A4998*/ /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ // Décalaration des variables /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ // PINS du moteur 1 #define enablePin1 8 // Activation du driver (0=> activé) #define dirPin1 4 // sens de rotation du moteur (0=> sens horaire) #define stepPin1 5 // commande de rotation // PINS des boutons poussoirs #define BP1 2 // bouton fin de course #define BP2 3 // bouton poussoir jaune => haut // Variables générales #define stepsPerRevolution 400 // nombre de pas du moteur (ici un JK42HM48-1684 => copie NEMA17) bool fin = false; bool sens; bool mvt = false; /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ // Fonctions secondaires ou interruptions /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ void fin_de_course () { // fin de course détecter on arrête le moteur fin = true; } void haut () { // appui sur le bouton poussoir de déplacement vers le haut, on arrête la rotation du moteur en relachant le bouton sens = true; mvt = !mvt; } /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ // Initialisation /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ void setup() { // Déclaration des pins en tant que sortie: pinMode(enablePin1, OUTPUT); pinMode(stepPin1, OUTPUT); pinMode(dirPin1, OUTPUT); // Initialisation de l'état des différents pins digitalWrite(enablePin1, HIGH); // Drivers non-activé // Déclaration de la fonction d'interruption du capteur de fin de course attachInterrupt(0, fin_de_course, RISING); attachInterrupt(1, haut, CHANGE); } /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ // Programme principal : on pilote le moteur grâce aux différents boutons poussoirs /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ void loop() { if (mvt == true && fin == false){ digitalWrite(enablePin1,LOW); digitalWrite(dirPin1,sens); // On avance d'un pas (! attention au réglage de MS1,MS2 et MS3 !) digitalWrite(stepPin1, HIGH); delayMicroseconds(1000); digitalWrite(stepPin1, LOW); delayMicroseconds(1000); } else { digitalWrite(enablePin1,HIGH); } }
Avec ce code je commande la mise en rotation du moteur par une pression sur un bouton poussoir, le moteur est à l'arrêt si le bouton poussoir n'est pas pressé ou si le capteur de fin de course est activé.