Inversion moteur par bouton "crash"

Bonjour à tous,
Je voudrais inverser un moteur 12V qui fait aller et venir une navette sur un guide.
Il y a un contacteur à chaque bout du guide, et quand la navette arrive en bout du guide (à gauche par exemple) et touche ce contacteur, cela ferait inverser le moteur qui ferait repartir la navette vers la droite, et ensuite touchera le contacteur à droite, ce qui fera repartir dans l'autre sens, et ainsi de suite...
Voici mon programme :

#define moteurSens1 2
#define moteurSens2 3
#define capteurDPin 5
#define capteurGPin 6

boolean capteurG;
boolean capteurD;

void setup() {
  
  Serial.begin(9600);
  pinMode(moteurSens1, OUTPUT);
  pinMode(moteurSens2, OUTPUT);
  pinMode(capteurGPin, INPUT);
  pinMode(capteurDPin, INPUT);
  digitalWrite(moteurSens1, HIGH);
  digitalWrite(moteurSens2, LOW);
  }

void loop() {
  
  capteurG = digitalRead(capteurGPin);
  capteurD = digitalRead(capteurDPin);
   
  if(capteurG==1)
          
         {
          digitalWrite(moteurSens1, LOW); 
          digitalWrite(moteurSens2, HIGH);
         }
           
    if(capteurD==1)
       {
           digitalWrite(moteurSens2, LOW);
           digitalWrite(moteurSens1, HIGH);
       }
       
   delay(50);
}

J'emploie un L293D pour inverser le moteur

Mon problème :
quand la navette appuie sur un des contacteur en bout de course, cela inverse bien le moteur... mais vu que la navette repart dans l'autre sens et donc n'appuie plus sur ce contacteur, le moteur s'inverse à nouveau aussitôt que le contacteur est "lâché".
En clair, je voudrais que quand la navette touche un contacteur qui inverse le moteur, ce dernier garde le même sens de marche jusqu'à ce que cette navette touche l'autre contacteur à l'autre bout du guide, et ainsi de suite, pour faire des allers-retours complet en continue.
Pouvez-vous m'aider ?

c'est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

la machine ressemblerait à cela:

corrigez votre post ci dessus et rajoutez les code tags autour du code:

[code]

[color=blue]// votre code ici[/color]

[/code]

.

ça doit ressembler à cela:

// votre code ici

(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)

mais vu que la navette repart dans l'autre sens et donc n'appuie plus sur ce contacteur, le moteur s'inverse à nouveau aussitôt que le contacteur est "lâché".

Il n'y a rien dans ton code qui puisse causer ce problème, donc je pense à un problème matériel : pas de pull down sur les boutons, parasitage sur les câbles des boutons, boutons de mauvaise qualité, qui rebondissent trop, arduino qui reset...

Mets des Serial.print un peu partout, et mets un anti-rebond plus efficace que delay(50)

Oui, décrire le câblage serait important car le code devrait faire l’affaire et correspond presque au dessin de la machine à états.

Si vous n’avez pas de pull down externe et que vous avez câblé les fins de course
pin === bouton ==== GND
alors Essayez éventuellement avec

pinMode(capteurGPin, INPUT_PULLUP);
pinMode(capteurDPin, INPUT_PULLUP);

Et pour les tests

 if (capteurG == LOW) {
   digitalWrite(moteurSens1, LOW); 
   digitalWrite(moteurSens2, HIGH);
 }

 if (capteurD == LOW) {
   digitalWrite(moteurSens2, LOW);
   digitalWrite(moteurSens1, HIGH);
 }

Merci messieurs :)......... mais je suis un âne batté !!!
Avec mon code tout fonctionne normalement, mais je n'avais branché qu'un seul contacteur en pensant que cela suffirait pour l'essai !
Avec le deuxième branché, tout marche très bien, désolé pour le dérangement :frowning:
Encore merci
Excellente journée à tous

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