ARRETER UN MOTEUR PAS A PAS

Bonjour,
Je voudrais savoir si il était possible d'arretez un moteur pas à pas.
J'utilise la library : Stepper.h, et mon je fais tournez mon moteur a l'aide de la commande stepsPerRevolution ! Y'a t-il une commande pour arretez le moteur ?
Car la il ne s'arrette jamais :confused:

Oui bien sur!

Que fais ton code actuellement? Il faut penser a le partager à chaque fois. On est pas devin, on ne sait pas ce qui est ecris.

hello
les programmes d'exemples donnés avec la librairie fonctionnent ils ?

dfgh:
hello
les programmes d’exemples donnés avec la librairie fonctionnent ils ?

oui mais le moteur ne s’arrete pas :confused:
mon code actuel :

#include <Stepper.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(13, 12, 3, 7, 6, 5);
const int stepsPerRevolution = 200;
Stepper myStepper (stepsPerRevolution, 8, 9, 10, 11);
const int bouton = 2;
const int bouton2 = 4;
unsigned int heure = 12;
static int etatprec=HIGH;
static int etatprec2=HIGH;
void setup() 
{
  pinMode (bouton, INPUT_PULLUP);
  pinMode (bouton2, INPUT_PULLUP);
  pinMode(12, OUTPUT); //Initiates Motor Channel A pin
  pinMode(9, OUTPUT); //Initiates Brake Channel A pin
  myStepper.setSpeed(60);
  Serial.begin(9600);
  lcd.begin(16, 2);
}

void loop() {
  int etat = digitalRead(bouton);
  int etat2 = digitalRead(bouton2);
  lcd.setCursor(0, 1);
  //lcd.print(millis() / 1000);
  if (etat == LOW && etatprec==HIGH)
    {
    heure++;    
    Serial.print("heure : ");
    Serial.print(heure);
  lcd.print("heure : ");
  lcd.print(heure);  
  delay(500);
  lcd.clear();
    }
   etatprec = etat;
   
  if (etat2 == LOW && etatprec2==HIGH)
    {
    heure--;    
    Serial.print("heure : ");
    Serial.print(heure); 
    lcd.print("heure : ");
    lcd.print(heure); 
    delay(500);
    lcd.clear();
    }
   etatprec2 = etat2;
   if (heure == 15){
   myStepper.step(stepsPerRevolution);
   delay(500);
   }
   if (heure == 10) {
    myStepper.step(-stepsPerRevolution);
    delay(500);
   }
       
}

Quelq'un a la solution ?

Il change de sens? tourne dans un seul?

Est ce que l’exemple essayé seul lui fait faire un tour puis un tour dans l’autre sens?

hello
dans ton code
LiquidCrystal lcd(13, 12, 3, 7, 6, 5);
Stepper myStepper (stepsPerRevolution, 8, 9, 10, 11);
pinMode(12, OUTPUT); //Initiates Motor Channel A pin
pinMode(9, OUTPUT); //Initiates Brake Channel A pin

les exemples de la librairie fontionnent, cherche du coté du hard

Jambe:
Il change de sens? tourne dans un seul?

Est ce que l’exemple essayé seul lui fait faire un tour puis un tour dans l’autre sens?

Il tourne dans un seul sens sans s’arreter :
mon code d’exemple est celui ci :

#include <Stepper.h>
const int stepsPerRevolution = 200;

Stepper myStepper (stepsPerRevolution, 8, 9, 10, 11);
void setup() {
  // put your setup code here, to run once:
 myStepper.setSpeed(60);
}

void loop() {
     myStepper.step(stepsPerRevolution);
   delay(500);// put your main code here, to run repeatedly:

}

vires tes

if (etat == LOW && etatprec==HIGH){
  }
   etatprec = etat;

 if (etat2 == LOW && etatprec2==HIGH)
    {
  }
   etatprec2 = etat2;

par

if (etat == LOW)
{
}
 if (etat2 == LOW)
    {
}

et mets un input_pullup pour tes boutons

hello
ton exemple fais ce qui est demandé:
tourner pour 200 pas ( et le moteur est un 200 pas par tour)
puis la loop recommence
donc ton moteur tourne indefiniment.

dans ton exemple, change
void loop() {
myStepper.step(stepsPerRevolution);
delay(500);// put your main code here, to run repeatedly:
}

par
void loop() {
myStepper.step(50);
delay(500);// put your main code here, to run repeatedly:
}

et tu verras ton moteur faire un quart de tour ( si ton moteur est bien un 200 pas par tour)

dfgh:
hello
ton exemple fais ce qui est demandé:
tourner pour 200 pas ( et le moteur est un 200 pas par tour)
puis la loop recommence
donc ton moteur tourne indefiniment.

dans ton exemple, change
void loop() {
myStepper.step(stepsPerRevolution);
delay(500);// put your main code here, to run repeatedly:
}

par
void loop() {
myStepper.step(50);
delay(500);// put your main code here, to run repeatedly:
}

et tu verras ton moteur faire un quart de tour ( si ton moteur est bien un 200 pas par tour)

mon moteur est un 24BYJ - 48 et il ne sarrette pas alors que j'ai mis ton code :

void loop() {
     myStepper.step([b]50[/b]);
   delay(500);// put your main code here, to run repeatedly:

c’est normal, la boucle loop redemande sans arrêt une rotation

que ce soit 50 pas ou 200 pas, la boucle fait son boulot

pour t’en convaincre, rajoute: un while(1){};

void loop() {
myStepper.step(50);
delay(500);// put your main code here, to run repeatedly:

while (1){};
}

Ca marche merci !

Oui mais tu comprend au moins ce qu'il se passe?