Switch case et moteur pas a pas
Bonjour à tous ,
cela fait quelques mois que je cherche à faire fonctionner un moteur pas à pas avec plusieurs boutons .
Mes recherches m'ont mener au switch case et la librairie one button ou j'ai pu trouver quelques explications et exemples remarquables .
Pour commencer j'ai battis mon code en remplaçant simplement le moteur par une led en essayant de l'allumer et l’éteindre de différente façon avec plein de boutons . Et alléluia j'y arrive !
Mais voilà en remplaçant la led par le moteur nema 17 et bien je n'y arrive pasde cette façon et je ne comprends pas pourquoi .
Dans l'espoir que quelqu'un puisse m'éclairer je vais vous montrer le code simplifier c'est a dire avec un bouton marche et un arrêt qui me permettent d'allumer et éteindre la LED ainsi que le bout de code pour mettre en marche le moteur .
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| #include <OneButton.h>
#include <AccelStepper.h>
const int buttonPin0 = A0; // mon bouton est sur la pin A0
OneButton button0(buttonPin0, true); // true pour le mettre en INPUT_PULLUP
const int buttonPin4 = A4; // mon bouton est sur la pin A4
OneButton button4(buttonPin4, true); // true pour le mettre en INPUT_PULLUP
AccelStepper stepper (1, 8, 4);
// la pins utilisées pour la LED
const int PinLedVerte = 11;
// Etats possible du système ainsi qu'une variable EtatLedVerte prenant une de ces valeurs
enum {ETAT_STOP, ETAT_MAVPV} EtatLedVerte;
void Top () { // Ce qui me permet de faire bouger mon moteur
stepper.setMaxSpeed(4000);
stepper.setSpeed(1000);
stepper.runSpeed();
}
void arret()// Ce qui initialise ma variable sur ETAT_STOP;
{
digitalWrite(PinLedVerte, LOW);
EtatLedVerte = ETAT_STOP;
}
void simpleclick0()//marche avant petite vitesse
{
switch (EtatLedVerte) {
case ETAT_STOP: // on était a arret et on a un appui, on allume la verte
digitalWrite(PinLedVerte, HIGH); // LED verte alimentée
EtatLedVerte = ETAT_MAVPV; // on note le nouvel état de notre système
if (ETAT_MAVPV == 1) {
Top ();
}
break;
}
}
void simpleclick4() // Bouton arret
{
switch (EtatLedVerte) {
case ETAT_MAVPV:
arret();// retour a l'etat initial
Serial.println(EtatLedVerte);
break;
}
}
// On initialise notre système dans le setup
void setup() {
Serial.begin(9600);
pinMode (PinLedVerte, OUTPUT);
//conditions Initiales
arret();
// On attache la fonction simpleClick() comme callBack
button0.attachClick(simpleclick0);
button4.attachClick(simpleclick4);
}
void loop() {
// On vérifie l'état des boutons, ce qui déclenche l'appel de la fonction callBack si nécessaire
button0.tick();
button4.tick();
} |