AccelStepper

Répondre
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 1758
Enregistré le : 27 févr. 2021, 16:11
Prénom : Christian
LOCALISATION : Ile de France
Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
Echelle pratiquée : H0
Âge : 54
Pays :
France (fr)
France
oct. 2021 06 21:15

AccelStepper

Message par likikiFrance

Quelqu'un aurait-il des informations sur la librairie AccelStepper ?

Tout ce que je trouve est en anglais et moi, je ne baragouine pas deux mots a la suite en anglais. :mdr:
ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Avatar du membre
herwatFrance
Posteur parfait
Posteur parfait
Messages : 658
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 74
Pays :
France (fr)
France
oct. 2021 06 23:08

Re: AccelStepper

Message par herwatFrance

Oui ! C'est comme moi, si j'ai bien compris, qui parle anglais comme une vache espagnole ! :hhhaaaa: :hhhaaaa: :hhhaaaa:
alors voici ceci en anglais
et Cela traduit en français . ça devrait t'aider . Mais attention, tout est traduit, même les fonctions ! ça peut créer des surprises :hhhaaaa: . . . . et même une certaine incompréhension .

Bon courage .

Voilà une partie de mon programme de transbordeur où j'utilise quelques-unes des fonctions :

Code : Tout sélectionner

//                     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
//                     * * * * *    Commande NEMA 17 avec AccelStepper     * * * * *
//                     * * * * *     Moteur piloté par driver DRV8825      * * * * *
//                     * * * * *              et micro steps               * * * * *
//                     * * * * *        Pour transbodeur vertical          * * * * *
//                     * * * * *                                           * * * * *
//                     * * * * *           Programme opérationnel          * * * * *
//                     * * * * *   Avec commutateur mOm de sélection et    * * * * *
//                     * * * * *       affichage LCD  et suivi Leds        * * * * *
//                     * * * * *                sur Méga                   * * * * *
//                     * * * * *       Commande de deux moteurs PaP        * * * * *
//                     * * * * * avec deux drivers branchés en parallèle   * * * * *
//                     * * * * *    sur les même sorties de l'arduino      * * * * *
//                     * * * * *                                           * * * * *
//                     * * * * *   avec commande servo de verrouillage     * * * * *
//                     * * * * *          et témoin de position            * * * * *
//                     * * * * *                                           * * * * *
//                     * * * * *    Mise en mémoire des niveaux de voie    * * * * *
//                     * * * * *    et de la dernière sélection de voie    * * * * *
//                     * * * * *                                           * * * * *      
//                     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

#include <EEPROM.h>
#include <AccelStepper.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>  

LiquidCrystal_I2C lcd(0x27,16,2);    // Description de l'écran
    
  const byte PinBPplus  = 16;        // Pin d'entrée des boutons de commande
  const byte PinBPmoins = 15;
  const byte PinBPConf  = 14;
  const byte PinBPajustmem = 2;

  int Voie  = 0;
  int VoieInt = 0;
  int VoieSel = 0;
  int VoieAnc = 0;
  boolean act  = false;
  boolean Confirm = false ;
  boolean mem = false ;
  
      /* Affectation des sorties pour les LEDs témoins  */
  int pinLed [11] = {40,42,44,46,48,39,41,43,45,47,49};
  const byte pinAlimLed = 38 ;

  unsigned long TempsZero = 0 ;
  boolean Veille = true ;

// Définit comment sera piloté le moteur et les broches qu'il utilise .
   AccelStepper Moteur1(1, 11, 10); // 1=Driver, Pin 11 = pas, Pin 10 = direction
    
//  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *   
// 
//                   Définition des hauteur de voies en pas moteur
//                    microstep = 1/2  soit 400 pas pour 1.25 mm
//                    Hauteur entre voie de 80 mm soit 25600 pas

 unsigned long NiveauVoie [11] = {0,25600,51200,76800,102400,128000,153600,179200,204800,230400,256000};
 unsigned long Niveaumod ;
//  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
     
    const byte pinZero = 5 ;         // pin d'entrée du détecteur de fin de course niveau zéro
    const byte pinZeroApp = 4 ;      // pin d'entrée du détecteur d'approche de fin de course
    const byte pinAlim = 23 ;        // pin de sortie commendant le relai d'alimentation 12v des moteurs
    const byte pinDCC = 3 ;          // pin de sortie commendant le relai d'alimentation DCC de la rampe
    const byte pinServo = 25 ;       // pin de commande du servo de verrouillage "Pont-voie"
    const byte pinVerrou = 27 ;      // pin témoin de verroillage - déverrouilage du servo
    const byte pinDriverHT = 13;     // vrai = driver désactivé
    const byte pinM0 = 8 ;           //  Gestion des micro Steps
    const byte pinM1 = 7 ;           //  Gestion des micro Steps
    const byte pinM2 = 6 ;           //  Gestion des micro Steps
    boolean Approch = false ;
    long Ralenti = 0 ;
    boolean ini = true ;        //  Initialisation pour définir le zéro de référence (et autre)
    boolean Mvt ;                //  vrai si le moteur tourne
    boolean Alim12v = false ;    //  Définit l'alimentation en 12v des moteurs PaP
    boolean AlimLED = false ;    //  Commande l'alimentation des Leds
    boolean Verrouille = false;  //  Témoin de verrouillage
    boolean Attente = false ;
    unsigned long Clignot = 0 ;
    byte y ;                      //  variables d'incrémentation
    
    
void setup()
   {  
      lcd.init();
      lcd.backlight();
      lcd.setCursor(0,0);
      
      for (y=0 ; y <= 10 ; y++){ pinMode(pinLed [y], OUTPUT); }
      for (y=0 ; y <= 10 ; y++){ digitalWrite(pinLed [y], LOW); }
      pinMode(pinAlimLed,OUTPUT);
      pinMode(PinBPplus,INPUT);
      pinMode(PinBPmoins,INPUT);
      pinMode(PinBPConf,INPUT);
      pinMode(PinBPajustmem,INPUT);
    
      pinMode (pinZero, INPUT) ;
      pinMode (pinZeroApp, INPUT) ;
      pinMode(pinDriverHT, OUTPUT);
      pinMode(pinM0, OUTPUT) ;
      pinMode(pinM1, OUTPUT) ;
      pinMode(pinM2, OUTPUT) ;
      pinMode(pinAlim, OUTPUT) ;
      pinMode(pinDCC, OUTPUT) ;
      pinMode(pinServo, OUTPUT) ;
      pinMode (pinVerrou, INPUT) ;
    
// * * * * Réglage microsteps  * * * *         M0     M1     M2   
                                      //       LOW    LOW    LOW      Full step 
      digitalWrite(pinM0,HIGH);       //       HIGH   LOW    LOW      1/2  pas
      digitalWrite(pinM1,LOW);        //       LOW    HIGH   LOW      1/4  pas
      digitalWrite(pinM2,LOW);        //       HIGH   HIGH   LOW      1/8  pas
                                      //       LOW    LOW    HIGH     1/16 pas
// * * * * * * * * * * * * * * * * * *         LOW    HIGH   HIGH     1/32 pas

      digitalWrite(pinDriverHT,HIGH);
      digitalWrite(pinDCC,HIGH);
      digitalWrite(pinServo,LOW);
      digitalWrite( pinAlim,LOW );
      delay (3000) ;                   // Attend que l'initialisation du Nano Servo soit faite
      
      premierefois () ;
      lectureEP () ;
      Initialisation() ;
    }  

void loop()
    {
     affichage(5) ;
     if (!Mvt){ SelecVoie() ; }
     if (Mvt){ Deplacement () ; }
    }

void Deplacement ()

      {
        affichage(2) ;
        digitalWrite(pinDCC,HIGH);
        Verrouillage( false ) ;
        Moteur1.moveTo(NiveauVoie [VoieSel]);
        digitalWrite(pinDriverHT,LOW);
        ini = true ; 
        while (ini) {
                   Moteur1.run();
                   if ( !Moteur1.run() ){ ini = false ; }
                   Alim_Led () ;
                   if(digitalRead(PinBPConf)){ ArretUrg (); }     // Arret d'urgence
                    }
 
        digitalWrite(pinDriverHT,HIGH);
        affichage(4) ;
        Verrouillage( true ) ;
        EEPROM.put(50, VoieSel);
        digitalWrite(pinDCC,LOW);
        Mvt = false ;  Alim_Led () ;
      }

void Initialisation()
    {
      Moteur1.setMaxSpeed(3600);
      Moteur1.setAcceleration(1600);

      affichage(9) ;
      Attente = true ;
      Confirm = false ;
      TempsZero = millis() ;
      while (Attente) {
                       if ( digitalRead(PinBPConf)){ Confirm = true ; }
                       if ( millis() - TempsZero > 4000 ){ Attente = false ; }
                      }
      if(Confirm) { Misaniveau() ; }
      else { Misazero() ; }
      
    }  

           
void Misazero()
     {
      affichage(1) ;
      Verrouillage( false ) ;
      VoieSel = 0 ;
      digitalWrite(pinDriverHT,LOW);
      Mvt = true ;
      digitalWrite(pinLed [VoieSel], HIGH);

      if ( digitalRead(pinZero) == 0 )
          {  Moteur1.moveTo(10000);
             while (ini) {
                          Moteur1.run();
                          if ( !Moteur1.run() ){ ini = false ; }
                          Alim_Led () ;
                          if(digitalRead(PinBPConf)){ ArretUrg (); }
                         }
             ini = true ; 
          }
          
      Moteur1.moveTo(-300000);
      while (ini) {
                   if (Approch == false && digitalRead(pinZeroApp) == 0)
                               {
                                digitalWrite(pinM0,LOW);
                                digitalWrite(pinM1,HIGH);
                                Ralenti = -Moteur1.currentPosition() ;
                                Approch = true ;
                                }
                                
                   if (Approch == true && -Moteur1.currentPosition() > Ralenti + 6000 )
                                { digitalWrite(pinM0,HIGH);
                                  digitalWrite(pinM1,HIGH); }
                                 
                   if ( digitalRead(pinZero) == 0)
                               {
                                Moteur1.setMaxSpeed(0);
                                Moteur1.setCurrentPosition(0);
                                Moteur1.setMaxSpeed(3600);
                                digitalWrite(pinM0,HIGH);
                                digitalWrite(pinM1,LOW);
                                ini = false ;
                                }
                   Moteur1.run();
                   if(digitalRead(PinBPConf)){ ArretUrg (); }
                   Alim_Led () ;
                  }
      ini = true ;
      Moteur1.moveTo(NiveauVoie [0]);
      while (ini) {
                   Moteur1.run();
                   if ( !Moteur1.run() ){ ini = false ; }
                   Alim_Led () ;
                  }         

      digitalWrite(pinDriverHT,HIGH);
      Verrouillage( true ) ;
      digitalWrite(pinDCC,LOW);
      Mvt = false ;  Alim_Led () ;
      
    }

void Misaniveau()
    {
      Moteur1.setCurrentPosition(NiveauVoie [VoieSel]);
      Verrouillage( true ) ;
      digitalWrite(pinLed [VoieSel], HIGH);
      digitalWrite(pinDCC,LOW);
      Mvt = false ;  Alim_Led () ;
    }



   


Si ça peut t'aider . . .

à cette ligne : AccelStepper Moteur1(1, 11, 10); // 1=Driver, Pin 11 = pas, Pin 10 = direction
Pour toi, je pense qu'il faut mettre 4 pour le premier paramètre .

Si tu veux, je peux t'envoyer par mail la totalité du programme .
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 1758
Enregistré le : 27 févr. 2021, 16:11
Prénom : Christian
LOCALISATION : Ile de France
Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
Echelle pratiquée : H0
Âge : 54
Pays :
France (fr)
France
oct. 2021 07 04:59

Re: AccelStepper

Message par likikiFrance

Merci pour la traduction, une aubaine pour moi qui parle anglais comme un taureau basque.

Je vais lire cela a tête reposée ce soir.

:merciiii:
ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Répondre