Accelstepper commande mpap par poussoirs

bonjour la communauté,
en ce début d'année tous mes vœux de réussite et d'épanouissements.

étant complètement novice ici,
je sollicite votre aide, j'essaie depuis quelques mois de comprendre et d'apprendre la programmation arduino mais....il arrive de vite être bloqué par manque de logique ou d'inexpériences malgré des heures passées a essayer de comprendre certain tuto ou réponses sur ce forum. je n'arrive pas a faire ce que je voudrai.

voila je souhaiterais déclencher un mouvement aller/retour continue d' un mpap (nema17 avec
A4988 ou TMC2208) grâce a un poussoir (bouton 1) configuré en ON/OFF et pouvoir aussi, stopper la rotation à tous moments par un autre poussoir(bouton 2 ou bouton 3), ses deux boutons étant des commandes manuelles aux mouvements du moteur (bouton 2) pour tourner horaire, (bouton 3) pour tourner antihoraire.

j'ai donc suivi les divers programmes existants avec ou sans LED pour les poussoirs ON/OFF,
les programmes de mise en rotation d'un mpap pour la rotation en continue en aller/retour, mais ne sont jamais commander par des boutons .

Pourriez vous m'aider?

#include <AccelStepper.h>

AccelStepper stepper(AccelStepper::DRIVER, 3, 2);

#define  ENABLE_PIN 4
#define  RIGHT_PIN 6
#define  LEFT_PIN  5
#define  LED_PIN 11 

#define  MS2_PIN 8
#define  BALAYAGE_PIN 10
#define  ROTATIF_PIN 9
#define  LED2_PIN 7

#define  SPEED_PIN A0
#define  MAX_SPEED 2000
#define  MIN_SPEED 60


const byte distancePin = A1;
int angle_balayage_pot = A3;

int BALAYAGEState = LOW;
int ROTATIFState = LOW;
int ledState = LOW;
int led2State = LOW;
int OnOrOffState = LOW;

byte lastLEFTState = digitalRead(LEFT_PIN);
byte lastRIGHTState = digitalRead(RIGHT_PIN);
byte lastROTATIFState = digitalRead(ROTATIF_PIN);
byte lastBALAYAGEState = digitalRead(BALAYAGE_PIN);

  static float current_speed = 0.0;         // Holds current motor speed in steps/second
  static int analog_read_counter = 300;    // Counts down to 0 to fire analog read
  static char direction = 0;                    // Holds -1, 1 or 0 to turn the motor on/off and control direction  
  static int analog_value = 0;

void setup() {

  Serial.begin(115200);

  stepper.setMaxSpeed (2000);  
  stepper.setSpeed(2000);
  stepper.setAcceleration(10000);   

  pinMode(LEFT_PIN, INPUT_PULLUP);
  pinMode(BALAYAGE_PIN, INPUT_PULLUP);
  pinMode(RIGHT_PIN, INPUT_PULLUP);  
  pinMode(ROTATIF_PIN, INPUT_PULLUP);

  pinMode(LED_PIN, OUTPUT);
  pinMode(LED2_PIN, OUTPUT);
  pinMode(ENABLE_PIN, OUTPUT);
  pinMode(MS2_PIN, OUTPUT);
}

void loop() {

  digitalWrite(ENABLE_PIN, LOW) ;
  digitalWrite(MS2_PIN, HIGH) ;

  if (analog_read_counter > 0) {
    analog_read_counter--;
  }
  else {
    analog_read_counter = 300;
    analog_value = analogRead(SPEED_PIN);
    stepper.runSpeed();
    current_speed = direction * (((analog_value/1023.0) * (MAX_SPEED - MIN_SPEED)) + MIN_SPEED);
    stepper.setSpeed(current_speed);
  }
 stepper.runSpeed();  

  gauche_droite();
  balayage();
  //rotatif();
}

void gauche_droite()
{

  if (digitalRead(LEFT_PIN) == 0) {  
    direction = 1;
  }
  else if(digitalRead(RIGHT_PIN) == 0)  {    
    direction = -1;
  }
  else {
    direction = 0;
  }
}

void balayage()
{   

    stepper.runToNewPosition(0);

  bool BALAYAGEState = !BALAYAGEState;
  if (digitalRead(BALAYAGE_PIN) == 0 && !BALAYAGEState){
    BALAYAGEState = !BALAYAGEState;  
      if(ledState == 0) { // Si la led est éteinte on l’allume
            digitalWrite(LED_PIN, HIGH);
            Serial.println("allume") ;
            ledState = 1; 
            stepper.run();          
        }
        else { // Si la led est allumée on l’éteint
            digitalWrite(LED_PIN, LOW);
            ledState = 0;
            Serial.println("eteint");

    while (digitalRead(BALAYAGE_PIN) == 0 && !BALAYAGEState){
    stepper.moveTo(-5000);
    stepper.moveTo(5000);
    stepper.runSpeed();
	  stepper.run();   
    stepper.setCurrentPosition(0);
   }
  }
  if ((digitalRead(BALAYAGE_PIN) == 0 && BALAYAGEState) || (digitalRead(RIGHT_PIN) == 0) || (digitalRead(LEFT_PIN) ==0)){
    BALAYAGEState = !BALAYAGEState;
    stepper.stop();
  }
}
}

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