Aller au contenu


Photo
- - - - -

bonton marche arret pour moteur pas à pas


  • Veuillez vous connecter pour répondre
5 réponses à ce sujet

#1 cook

cook

    Membre occasionnel

  • Membres
  • Pip
  • 118 messages

Posté 16 mars 2024 - 04:44

Bonjour , 

pour tester la partie mécanique de mon projet , il me faut faire mettre en marche et arrêter   2 moteurs pas à pas simultanément avec l'aide d'un bouton . 

J'ai trouver la solution pour les faires démarrer  avec 1 bouton  , modifier leur vitesses et le nombre de pas en modifiant le code , mais cela ne marche qu'une fois après le téléchargement  . Si j' appuis à nouveau , il ne se passe plus rien . J'ai essayé avec 2 boutons , rien y fait . Mélangé plusieurs codes et fait des essais et liens à tout vas . J'ai lu que la fonction est bloquante  . je tourne en rond . 

Avez vous une idée de ce qu'il faut faire ? 

merci pour votre aide .


#include <AccelStepper.h>
#include <MultiStepper.h>
const int boutonmarche = 12;
const int boutonarret = 13;
int etatboutonmarche = 0;
int etatboutonarret = 0;
const int led = 8;
int etatboutonprecedent = 0;
int motors = 0;
//ccelStepper stepper2(AccelStepper::FULL4WIRE, 6, 7, 8, 9);
//AccelStepper stepper3(AccelStepper::FULL2WIRE, 10, 11);
AccelStepper stepper1(1, 2, 3);   // 1 pour dire je sais pas. 2 c'est le pul + sur l’arduino et 3 le dir +
AccelStepper stepper2(1, 5, 6);   // 1 pour dire je sais pas. 2 c'est le pul + sur l’arduino et 3 le dir +



void setup() {
  // Serial.begin(9600);
  pinMode(boutonmarche, INPUT_PULLUP);
  pinMode(boutonarret, INPUT_PULLUP);
  pinMode(8, OUTPUT);
}
void moteursMarche()  {

  stepper1.setMaxSpeed(1000);
  stepper1.setAcceleration(400);
  stepper1.moveTo(4000);

  stepper2.setMaxSpeed(2000);
  stepper2.setAcceleration(400);
  stepper2.moveTo(800);
  stepper1.run();
  stepper2.run();
  digitalWrite(8, HIGH);
}


void boutondecommande() {
  etatboutonmarche = digitalRead(boutonmarche);
  if ((etatboutonmarche == LOW) && (etatboutonprecedent == HIGH)) {
    motors = 1 - motors ;
  }
  etatboutonprecedent = etatboutonmarche ;
  if ( motors == 1) {
    moteursMarche();
  }
}

void loop() {
  boutondecommande();
}

//Serial.println("avant");
//Serial.print(motors);



#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 16 mars 2024 - 06:05

Et si tu essayes ça : 


 

#include <AccelStepper.h>

const int boutonmarche = 12;

AccelStepper stepper1(AccelStepper::DRIVER, 2, 3);
AccelStepper stepper2(AccelStepper::DRIVER, 5, 6);

void setup() {
  // Serial.begin(9600);
  pinMode(boutonmarche, INPUT_PULLUP);

  stepper1.setMaxSpeed(1000);
  stepper1.setAcceleration(400);
  stepper2.setMaxSpeed(2000);
  stepper2.setAcceleration(400);
}

void moteursMarche()  {
  stepper1.move(4000);
  stepper2.move(800);
}


void boutondecommande() {
  static bool etatboutonprecedent = HIGH;
  bool etatboutonmarche = digitalRead(boutonmarche);
  if ((etatboutonmarche == LOW) && (etatboutonprecedent == HIGH)) {
    moteursMarche();
  }
  etatboutonprecedent = etatboutonmarche ;
}

void loop() {
  boutondecommande();
  stepper1.run();
  stepper2.run();
}



Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#3 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 769 messages
  • Gender:Male

Posté 16 mars 2024 - 06:31

Voici un petit programme qui fait basculer une variable x entre 0 et 1, à chaque fois que l'on appuie sur un bouton poussoir.

Comme entrée, j'utilise A0. 

 

// putting a fugitive switch between GND and pin A0
// Each time the switch is pressed, the value of x toggles between 0 and 1.
int pb = A0;
bool x=0;
void setup() {
  Serial.begin(9600);
  pinMode(pb,INPUT_PULLUP);
}
 
void loop() {
  Serial.print("            x = "); Serial.println(x);
  if( ! digitalRead(pb)) x = x ^ 1;
  delay(300);
}
 


#4 cook

cook

    Membre occasionnel

  • Membres
  • Pip
  • 118 messages

Posté 16 mars 2024 - 08:14

Merci pour ces réponses , chui bluffé depuis que je cherche !  c'est peu de le dire .

 

J'ai  modifié une ligne :

void boutondecommande() {
  static bool motors = LOW;    // faut changer( LOW en HIGH ) pour créer la différence (!= )  à motors . Je l'ai compris comme cela .

Les moteurs vibrent plus !!!!!!!  ; Avec les exemples accelstepper les moteur vibrent trop . Bizarre . je vais rajouter des bouton en parallèle pour me faciliter la tache . Pour savoir si mécaniquement je suis dans le coup , ca va m'aider .

merci beaucoup .

Sur mon projet, j'ai deux moteurs , et plus , j 'y reviendra parce que là , c'est un test de plus . Mais es ce que je peux compter  faire fonctionner ces 2 moteurs ensemble de façon précise ( avec moteurs boucle fermé ), où il est préférable de les relier mécaniquement ? 



#5 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 17 mars 2024 - 01:13

J'avais fait une petite faute de frappe dans le code je suis repassé dessus et j'en ai profité pour simplifier encore un petit peu le code. 

Pour ce qui est de faire fonctionner plusieurs moteurs ensemble oui on peut le faire sans soucis... mais il y a mieux que juste accelstepper après ça dépend le besoin.


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#6 cook

cook

    Membre occasionnel

  • Membres
  • Pip
  • 118 messages

Posté 17 mars 2024 - 11:13

Si il y a plus sûr comme code , c'est une certitude , il le faudra . C'est une bonne nouvelle  . Là , le standard du code me sera profitable en fait ,  j'attends presque un décalage pour connaitre la limite mécanique, quoique je peux le créer le décalage de pas  !  . Cinq , six mouvements sur 150 cm , c'est plus compliqué que je pensais  .

C'est toujours la même tricoteuse , la suite en fait . Je vois pas la simplification du code . Par curiosité surtout , mais on sait jamais, cela pourrai me donner une indication pour savoir en combien de parties je vais scinder les futurs codes .






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users