Problème avec mon code

Voici mon code :

#include <Stepper.h>
Stepper moteur(48, 2, 3, 4, 5);
int laser=13;


int A = 2;
int B = 3;
int C = 4;
int D = 5;

void setup() {
  
  moteur.setSpeed(55);
  pinMode (laser, OUTPUT);
  

}

  void loop ()

  {
    for (int f = 1; f < 9; f++)
    {
      digitalWrite(laser, HIGH);
      moteur.step(1);
      digitalWrite(laser, LOW);
      delay(5);                  
    }
    for (int f = 7; f > 0; f--)// 7 et non 8 car le 8 est fait pas la boucle "for" montante
    {
      digitalWrite(laser, HIGH);
      moteur.step(-1);
      digitalWrite(laser, LOW);
      delay(5);
    }
    
  }

J'aimerai donc que mon moteur fasse 8 pas dans un sens puis 8 pas dans le sens contraire. Ce qu'une personne de ce forum m'a aidé à faire. Seulement lorsque j'envoi le programme, le moteur fait bien 8 pas dans le sens horaire puis antihoraire, seulement il fait également des tours complets, des rotations complètes. Or ce n'est pas ce que je veux. Quelqu'un saurait ou se situe le problème ?

personne ?

C'est à dire que s'il n'y a vraiment que ça dans ton programme il devrait fonctionner correctement il me semble.

J'ai l'impression qu'à chaque tour de boucle il y a un décalage de 1 pas par rapport à la boucle précédente. Ce qui entraîne à terme une rotation complète. Or je ne recherche pas une rotation complète mais seulement l'équivalent en degré de 7 pas.

Bonjour,
Bien sur qu'il y a un décalage de 1 pas, c'est ce que tu demandes de faire à ton programme.

Dans le premier for, tu balayes avec ta variable f les valeurs 1, 2, 3, 4, 5, 6, 7 et 8 soit 8 pas
Dans le second for, tu balayes avec ta variable f les valeurs 7, 6, 5, 4, 3, 2 et 1 soit 7 pas

Tu remplaces

    for (int f = 7; f > 0; f--)// 7 et non 8 car le 8 est fait pas la boucle "for" montante

par

    for (int f = 1; f < 9; f++)

Mais oui mais ce que je veux c'est :

1 2 3 4 5 6 7 6 5 4 3 2 1 2 3 4 5 6 7 etc

Avec le for que tu m'as donné les deux boucles serait les memes, je comprend pas trop

Re,

Lucasppe:
Mais oui mais ce que je veux c'est :

1 2 3 4 5 6 7 6 5 4 3 2 1 2 3 4 5 6 7 etc

Avec le for que tu m'as donné les deux boucles serait les memes, je comprend pas trop

Si tu veux 8 pas dans un sens puis 8 pas dans l'autre il te faut

1 2 3 4 5 6 7 8 puis 1 2 3 4 5 6 7 8 etc...
<-   step(1) ->      <-  step(-1) ->

Le code suivant fonctionne :

#include <Stepper.h>
Stepper moteur(48, 2, 3, 4, 5);
int laser=13;


int A = 2;
int B = 3;
int C = 4;
int D = 5;

void setup() {
  
  moteur.setSpeed(155);
  pinMode (laser, OUTPUT);
  

}

  void loop ()

  {
    for (int f = 1; f < 9; f++)
    {
      digitalWrite(laser, HIGH);
      moteur.step(1);
      digitalWrite(laser, LOW);
      delay(5);                  
    }
    for (int f = 1; f < 9; f++)
    {
      digitalWrite(laser, HIGH);
      moteur.step(-1);
      digitalWrite(laser, LOW);
      delay(5);
    }
    
  }

Cependant je ne le comprend pas, pourrais-tu le commenter point par point stp ? Ce serait gentil

Re,
Il n'y a pas grand chose à comprendre.

#include <Stepper.h>
Stepper moteur(48, 2, 3, 4, 5);
int laser=13;


//int A = 2;  //ne sert à rien car pas utilisé
//int B = 3;  //ne sert à rien car pas utilisé
//int C = 4;  //ne sert à rien car pas utilisé
//int D = 5;  //ne sert à rien car pas utilisé

void setup() {
  moteur.setSpeed(155);
  pinMode (laser, OUTPUT);
}

void loop () {
//point départ
/* Pour chaque valeur de f (1<=f<=8) tu parcours le code entre {} cad
   sortie laser = HIGH, puis 1 pas sur le PAP, puis sortie laser = LOW, puis attente 5 ms
*/
    for (int f = 1; f < 9; f++)
    {
      digitalWrite(laser, HIGH);
      moteur.step(1);
      digitalWrite(laser, LOW);
      delay(5);                  
    }
/* Pour chaque valeur de f (1<=f<=8) tu parcours le code entre {} cad
   sortie laser = HIGH, puis -1 pas sur le PAP, puis sortie laser = LOW, puis attente 5 ms
*/
    for (int f = 1; f < 9; f++)
    {
      digitalWrite(laser, HIGH);
      moteur.step(-1);
      digitalWrite(laser, LOW);
      delay(5);
    }
/*A partir de là, on recommence cad point départ
*/  }

Oui mais dans la première boucle le compteur se retrouve à 8 et donc logiquement la deuxième boucle (f=9 et non pas f=1) ne devrait s'initialiser ou bien ?

Re,

Lucasppe:
Oui mais dans la première boucle le compteur se retrouve à 8 et donc logiquement la deuxième boucle (f=9 et non pas f=1) ne devrait s'initialiser ou bien ?

Non non et non, il faut consulter la page du for

for(int f = 1; f < 9; f++)
      ^           ^    ^
      |           |    |
valeur de     valeur  f=f+1
  départ       fin
   = 1         = 8

pourquoi ouvrir un 2ème post ????
je t'ai répondu dans le 1er.

Oui pardon pour le double post mais je ne retrouvais plus du tout mon premier post jusqu'à hier soir, et j'avais besoin d'aide très vite. Désolé et merci à vous deux