Commander un moteur pas a pas via serial monitor

Bonjour les amis ,
je débute avec mon Starter-Kit Arduino , j essaye de commander mon moteur pas a pas via Serial Monitor d Arduino .( CW CCW STOP )
J ai essayer avec ce code la :

//Include the Arduino Stepper Library
#include <Stepper.h>

// Number of steps per internal motor revolution
const float STEPS_PER_REV = 32;

//  Amount of Gear Reduction
const float GEAR_RED = 64;

// Number of steps per geared output rotation
const float STEPS_PER_OUT_REV = STEPS_PER_REV * GEAR_RED;

// Number of Steps Required
int StepsRequired;
// Create Instance of Stepper Class
// Specify Pins used for motor coils
// Connected to ULN2003 Motor Driver In1, In2, In3, In4
// Pins entered in sequence 1-3-2-4 for proper step sequencing

Stepper steppermotor(STEPS_PER_REV, 8, 10, 9, 11);


void setup()
{

  Serial.begin(9600);
}
void loop()
{
while (Serial.available())
 char Direction=Serial.read();
Serial.println(Direction);

 if (Direction=='R')
 {
  Serial.println(" CW");
  StepsRequired  =  STEPS_PER_OUT_REV ;
  steppermotor.setSpeed(700);   
  steppermotor.step(StepsRequired);
  }
if (Direction== 'V')
 {
 Serial.println("CCW");
  // Rotate CCW 1/2 turn quickly
  StepsRequired  =  - STEPS_PER_OUT_REV*2;
  steppermotor.setSpeed(700);
  steppermotor.step(StepsRequired);
 
}
 if (Direction== 'S')
 {
 Serial.println("Stop");
  StepsRequired  =  0; 
  steppermotor.setSpeed(700); 
  steppermotor.step(StepsRequired);

}
 }
 }

mais le problem c est que j arrive pas a stopper spontanément le moteur ! En tapant ' S ' ca ne sort pas de la boucle en stoppant le moteur !
Quelqu un aurait des suggestions et j aimerais bien definir la vitesse a chaque fois que je met la direction que je veux !

Merci ! :slight_smile: :slight_smile: :slight_smile: :slight_smile:

Bonjour

Quelqu un aurait des suggestions

deux pour commencer

  1. Editer le titre pour faire référence au sujet sur lequel l'aide est demandée.
    Le titre actuel est du genre 'titre à la con' selon les termes du modérateur et pourrait occasionner une mise à la poubelle du message :
    Prendre connaissance de Règles du Forum, y compris son message #1

  2. éliminer les balises color du code publié, tel quel il est illisible

Pour le titre voir le post #1 du message :

https://forum.arduino.cc/index.php?topic=546956.0

Sorry je n avais pas fait Attention :frowning:
je vous remercie :slight_smile:

Bonjour,

  • Direction est défini à l'intérieur du while et n'existe plus à l'extérieur
  • remplaces le while par un if si tu as une commande qui se termine par cr ou lf ça ne fonctionnera pas
  • il serait bon d'engloberle test de caractère reçu dans le if
    ça donne:
void loop()
{
  if (Serial.available())
  {
    char Direction = Serial.read();
    Serial.println(Direction);

    if (Direction == 'R')
    {
      Serial.println(" CW");
      StepsRequired  =  STEPS_PER_OUT_REV ;
      steppermotor.setSpeed(700);
      steppermotor.step(StepsRequired);
    }
    if (Direction == 'V')
    {
      Serial.println("CCW");
      // Rotate CCW 1/2 turn quickly
      StepsRequired  =  - STEPS_PER_OUT_REV * 2;
      steppermotor.setSpeed(700);
      steppermotor.step(StepsRequired);

    }
    if (Direction == 'S')
    {
      Serial.println("Stop");
      StepsRequired  =  0;
      steppermotor.setSpeed(700);
      steppermotor.step(StepsRequired);

    }
  }
}

Salut Kamil ,
j apprécie ton aide !
Mais le moteur ne s arrête toujours pas spontanément .
j aimerai bien controller le moteur comme ci j avais 3 buttons de commande (CW,STOP, CCW)mais dans mon cas via le Serial.Monitor. Le moteur s arrête seulement quand le moteur aurait fait le nombre donner des Steps ( StepsRequired ).
:frowning:

quands vous appelez steppermotor.step(StepsRequired);c'est un appel bloquant. Donc vous n'écoutez pas le port série pendant ce temps là.

==> il faut traiter le déplacement en asynchrone, soit vous écrivez votre petite machine à état et faites des pas de 1 de temps en temps jusqu'à avoir effectué le bon nombre de pas, soit vous prenez une bibliothèque qui sait faire cela -> AccelStepper pourrait vous aider

Ah oui, vous avez raison c'est à cause de l appel bloquant
J'ai changé ma bibliothèque et ça a marché
Merci infiniment :smiley:
c est gentil de votre part :slight_smile: :slight_smile:

cool !

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.