/*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é.