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 : Sélectionner tout - Visualiser dans une fenêtre à part
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();
}