probleme boucle avec capteur

salut a tous !!!

je suis vraiment débutant dans le domaine de programmation .
Voilà mon souci je dois cree une petite boucle avec capteur pour démarrer celle-ci. Helas je n’arrive pas à boucler toutes les instructions quand le capteur detect . je sais pas si je suis clair dans mes explications je vous mets le code .

merci pour votre aide.

 // defines pins numbers
const int stepPin = 3;
const int dirPin = 2;
const int enPin = 8;
const int LimitSwitch_LEFT_Pin  = 7;
const int LimitSwitch_RIGHT_Pin = 4;
const int led=13;
const int sensor = 12;


void setup() {

  Serial.begin(9600);

  pinMode(LimitSwitch_LEFT_Pin , INPUT);
  pinMode(LimitSwitch_RIGHT_Pin , INPUT);
  pinMode(sensor,INPUT);
  
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);

  pinMode(enPin,OUTPUT);
  digitalWrite(enPin,LOW);
  pinMode(led,OUTPUT);

  // Set Dir to Home switch
  digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
 digitalWrite(LimitSwitch_LEFT_Pin,HIGH);
 digitalWrite(LimitSwitch_RIGHT_Pin,HIGH);
 digitalWrite(sensor,HIGH);

}
void loop() {


 while (digitalRead(sensor)== LOW) {
 
    

     int leftSw  = digitalRead( LimitSwitch_LEFT_Pin);
    int rightSw = digitalRead( LimitSwitch_RIGHT_Pin);

   
   
    if ( (leftSw  == HIGH && (digitalRead(dirPin) == HIGH)) ||
        (rightSw == HIGH && (digitalRead(dirPin) == LOW)) ){
   
       motorStep(1);

    }
 else if( leftSw == LOW && (digitalRead(dirPin) == HIGH) ){
          digitalWrite(dirPin,LOW);
          delay(2000);
          digitalWrite(led,HIGH);
          delay(2000);
          
    }
  else if( rightSw == LOW && (digitalRead(dirPin) == LOW ) ){
          digitalWrite(dirPin,HIGH);
          delay(2000);
          digitalWrite(led,LOW);
          delay(2000);
    }

}}
void motorStep( int MAX){

   for(int x = 0; x < MAX; x++) {
        digitalWrite(stepPin,HIGH);
        delayMicroseconds(900);
        digitalWrite(stepPin,LOW);
        delayMicroseconds(900);
      }
 
}

Non, pas très clair, en effet...

Désole, alors je voudrais faire un chariot pilote par un moteur PAP avec 2 cellules à chaque extrémité pour les fin de courses .

ce chariot doit faire un aller et un retour, il y a une 3e cellule qui donne le départ de la boucle quand il detect une pièce par exemple .

Mon problème c'est pour la boucle quand la 3e cellule detect un objet cela donne une impulsion au moteur mais il ne fait pas son cycle aller-retour .. dsl je suis novice c'est peut etre pas la boucle while qu'il faut utiliser ?

Je ne comprends toujours pas : le chariot démarre lorsque la cellule 3 lui donne le top.
Ensuite il fait un aller, et s'arrête lorsque la fin de course (disons côté droit) lui indique qu'il est au bout.
Ensuite il fait un retour et s'arrête lorsque l'autre fin de course lui indique qu'il est à l'autre bout.
Ensuite ? Est-ce que c'est tout, ou bien on revient à la position de départ (quelle est cette position) et on attend un nouveau top de la cellule 3 ?

deja merci pour ton aide c’est simpa.

un petit projet simple pour vous mais pour moi :confused:

alors l’idée : un moteur PAP qui bouge chariot , un verin , 1 cellule chariot droite (1) , 1 cellule chariot gauche (2) et 1 cellule detection de pieces(3).

  • quand cellule (3) detect passage pieces
  • verin descente et remonte
  • moteur PAP deplacement gauche
  • quand cellule (2) detect chariot alors arret
  • descente verin et remonte
  • moteur PAP deplacement droite
  • quand cellule (1) detect chariot alors arret

et on reboucle

j’ai refait une ebauche code qui fonctionne bien , mais je ne vois pas comment faire un homing a droite du stepper a la mise sous tension de l’arduino . voici le code

ps: dans le code il y a juste la cellule (3) detection pieces , si tu peux m’aider a faire la phase inialisation du stepper ( homing ) sur la droite et quand il detect la cellule (1) il s’arrete .

merci beaucoup .

const int steppin = 3;
const int dirpin = 2;
const int sensor = 4;


void setup() {
 pinMode(steppin,OUTPUT);
 pinMode(dirpin,OUTPUT);// put your setup code here, to run once:
 pinMode(sensor,INPUT);
 pinMode(verin,OUTPUT);
 pinMode(button,INPUT);


  digitalWrite(sensor,HIGH);
  digitalWrite(button,HIGH);


  
}

void loop() {

 

 

    
   if  (digitalRead(sensor)== LOW)

             
    

    {digitalWrite(verin,HIGH);     // verin descente
    delay(3000);

    digitalWrite(verin,LOW);      // verin monté
    delay(3000);
    
   digitalWrite(dirpin,HIGH);       // moteur gauche 

  for (int x = 0 ;x <900; x++){
    digitalWrite(steppin,HIGH);
    delayMicroseconds(700);
    digitalWrite(steppin,LOW);
    delayMicroseconds(700); }
    
    digitalWrite(verin,HIGH);       // verin descente
    delay(3000);
    digitalWrite(verin,LOW);        // verin monté
    delay(3000);

   digitalWrite(dirpin,LOW);      // moteur droite


for (int x = 0 ;x <900; x++){
    digitalWrite(steppin,HIGH);
    delayMicroseconds(700);
    digitalWrite(steppin,LOW);
    delayMicroseconds(700); }
    
    }
    


}

c’est peu etre pas conventionnel mais ca fonctionne c’est OK , j’ai bricolé le SETUP avec :

while (digitalRead(cellule1)==HIGH) {
  digitalWrite(dirpin,LOW);      // moteur arriere
for (int x = 0 ;x <10; x++){
    digitalWrite(steppin,HIGH);
    delayMicroseconds(700);
    digitalWrite(steppin,LOW);
    delayMicroseconds(700); }
    
  if (digitalRead(cellule1)==LOW) {

       digitalWrite(dirpin,LOW);      // moteur arriere
for (int x = 0 ;x <10; x++){
    digitalWrite(steppin,HIGH);
    delayMicroseconds(700);
    digitalWrite(steppin,LOW);
    delayMicroseconds(700); }