Bouton poussoir Motor Shield

Bonjour Tout le monde.
Je suis debutant en arduino et j'ai à devoir realiser un moteur qui doit fonctionner de la façon suivante: Lorsqu'on appui sur un bouton, le moteur tourne dans un sens et lorsqu'on appui sur l'autre, ca tourne dans le sens inverse. Lorsqu'aucun bouton est pressé, rien ne se passe.

Il y'a deux boutons poussoirs chacune ayant deux broches. La premier est connecte sur D2 et sur le ground. Le second est connecte sur le D3 et le ground. J'utilise un motoshield qui est au dessus de l'Arduino. Je dispose d'une batte de 9v connecte sur le Vin et le ground. Le moteur est sur le M2 du motorshield. Je ne souhaite pas utiliser les résistances externes

Le dispositif fonctionne correctement pour le bouton D2 mais pas pour l'autre. Le moniteur série montre plutôt clairement que les boutons envoient les instructions souhaités. J'Ai tout éssayé mais rien. Pour le deuxième bouton, on vient que ca éssaye de partir mais on dirait que quelque chose bloque. Aidez moi s'il vous plait j'en peux plus tout seul

ci dessous le code

#include <AFMotor.h>


AF_DCMotor motor(2);

// Définition des broches pour les boutons
const int button1 = 3; 
const int button2 = 2; 

// Variables pour la gestion du rebond
bool etatButton1Precedent = HIGH;  
bool etatButton2Precedent = HIGH;  
unsigned long dernierTempsButton1 = 0;  
unsigned long dernierTempsButton2 = 0;  
const unsigned long debounceDelay = 50; 

void setup() {
  Serial.begin(9600);
  Serial.println("Contrôle du moteur avec deux boutons");

  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);

Bonjour franklinedjouma

Il est incomplèt :face_with_diagonal_mouth:

Cordialement
jpbbricole

quelle type de batterie 9V ?

Bonjour Tout le monde.
Je suis debutant en arduino et j'ai à devoir realiser un moteur qui doit fonctionner de la façon suivante: Lorsqu'on appui sur un bouton, le moteur tourne dans un sens et lorsqu'on appui sur l'autre, ca tourne dans le sens inverse. Lorsqu'aucun bouton est pressé, rien ne se passe.

Il y'a deux boutons poussoirs chacune ayant deux broches. La premier est connecte sur D2 et sur le ground. Le second est connecte sur le D3 et le ground. J'utilise un motoshield qui est au dessus de l'Arduino. Je dispose d'une batte de 9v connecte sur le Vin et le ground. Le moteur est sur le M2 du motorshield. Je ne souhaite pas utiliser les résistances externes

Le dispositif fonctionne correctement pour le bouton D2 mais pas pour l'autre. Le moniteur série montre plutôt clairement que les boutons envoient les instructions souhaités. J'Ai tout éssayé mais rien. Pour le deuxième bouton, on vient que ca éssaye de partir mais on dirait que quelque chose bloque. Aidez moi s'il vous plait j'en peux plus tout seul

ci dessous le code


#include <AFMotor.h>


AF_DCMotor motor(2);

// Définition des broches pour les boutons
const int button1 = 3; 
const int button2 = 2; 

// Variables pour la gestion du rebond
bool etatButton1Precedent = HIGH;  
bool etatButton2Precedent = HIGH;  
unsigned long dernierTempsButton1 = 0;  
unsigned long dernierTempsButton2 = 0;  
const unsigned long debounceDelay = 50; 

void setup() {
  Serial.begin(9600);
  Serial.println("Contrôle du moteur avec deux boutons");

  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);
  motor.setSpeed(200); // Vitesse initiale du moteur
  motor.run(RELEASE);
}

void loop() {
  bool etatButton1Actuel = digitalRead(button1);
  bool etatButton2Actuel = digitalRead(button2);
  if (etatButton1Actuel == LOW && etatButton1Precedent == HIGH && (millis() - dernierTempsButton1) > debounceDelay) {
    dernierTempsButton1 = millis(); 
    Serial.println("Bouton 1 (D3) pressé - Rotation dans le sens horaire");
    motor.run(FORWARD);   
    motor.setSpeed(200);
  }

 
  else if (etatButton2Actuel == LOW && etatButton2Precedent == HIGH && (millis() - dernierTempsButton2) > debounceDelay) {
    dernierTempsButton2 = millis(); 
    Serial.println("Bouton 2 (D2) pressé - Rotation dans le sens antihoraire");
    motor.run(BACKWARD); 
    motor.setSpeed(200);
  }


  else if (etatButton1Actuel == HIGH && etatButton2Actuel == HIGH) {
    Serial.println("Aucun bouton pressé - Moteur arrêté");
    motor.run(RELEASE);   // Arrête le moteur
  }

 
  etatButton1Precedent = etatButton1Actuel;
  etatButton2Precedent = etatButton2Actuel;

  
  delay(100);
}

Votre sujet a été déplacé vers la section française du forum.

Bonjour franklinedjouma

Donc il y a réaction.
Essaies de croiser les fils du moteur pour voir si le défaut change de bouton.
Essaies, également, de croiser les boutons pour voir si le défaut se déplace.
Fais aussi une photo en gros plan de ton montage.
En complément, regardes ce tuto et essaies le programme, le moteur doit changer de sens toutes les 2 secondes.

A+
Cordialement
jpbbricole

Bonjour,

Peux tu nous en dire plus sur ta batterie 9V (piles, accu, quelle puissance ?)
Et sur le moteur? (moto réducteur ? quelle puissance, quelle tension d'alim...?)

Ces 2 paramétres, moteur/batterie, sont'ils compatibles?

Tu peux aussi à titre d'essai réduire la vitesse pour voir ce qu'il se passe, ce n'est que du soft.

motor.setSpeed(200);

Baisse 200 à 50 ou 100 pour voir si le moteur démarre.

Vos deux sujets sur le même sujet ou un sujet similaire ont été fusionnés.

Le cross-posting est contraire aux règles du forum Arduino, car les doublons peuvent faire perdre du temps aux personnes qui essaient d’aider. Quelqu’un pourrait passer beaucoup de temps à enquêter et rédiger une réponse détaillée sur un sujet, sans savoir que quelqu’un d’autre l’a déjà fait dans l’autre sujet.

Merci de créer un seul sujet pour votre question et de choisir soigneusement la catégorie du forum. Si vous avez plusieurs questions sur le même projet, posez-les dans un seul sujet, car les réponses à une question apportent un contexte utile pour les autres, et vous n’aurez pas à expliquer votre projet plusieurs fois.

La répétition de doublons pourrait entraîner une interdiction temporaire ou permanente du forum.

Merci de prendre quelques instants pour apprendre à utiliser le forum. Cela vous aidera à en tirer le meilleur parti à l’avenir.

Merci.

Qui écrit dans le trinome ?
Franck ?
Line ?
Ou Djouma ?

Si vous formez un trinome scolaire dites le de suite ce sera plus sympathique.

Bonjour franklinedjouma

Cela vient du fait que la pin utilisée pour l'autre, D3:
const int button1 = 3;
est utilisée par le shield, c'est le signal PWM A, regardes le documentation
image
et choisi une autre pin pour ton bouton.

Cordialement
jpbbricole

NOn le defaut ne change pas de bouton
LE defaut reste sur le meme bouton apres avoir croise les boutons

le schema du montage

J'ai eu a baisser la vitesse mais c'est toujours pareil.
Merci

Bonjour franklinedjouma

Il ne faut pas croiser les boutons, il faut choisir une autre pin pour button1.

Cordialement
jpbbricole

Hello,

Comme cela t'as été expliqué déja, ce shield s'enfiche sur un UNO, donc il ne faut pas utiliser les broches qu'il utilise déja.

D3 est déja utilisé par le driver moteur

Donc le mieux est d'utiliser une autre broche pour le BP "button1"

Merci beaucoup, j'essaie ca et je reviens

Je l'ai fait en utilisant D4 ca marche mais ca souleve un autre probleme.
Je dois maintenir le doigt appuyé sur D4 pour declencher l'action de D2 et des que je lache D4, tout s'arrete.

Bonsoir franklinedjouma

C'est pourtant ce que tu as demandé?

PS: J'ai testé ton programme , sans le moteur je n'ai pas ce shield, et dans le moniteur tout se passe comme demandé.

Cordialement
jpbbricole

Dés qu'il lâche D4 avec D2 appuyé, tout s'arrête je présume.

Peut-être que le délais

debounceDelay

est trop court d'un chouia?

oui dans le serial monitor il n'ya aucun problemem. C'est au niveau du circuit reel.
En fait lorsque j'appuie sur D4 disons pour la rotation dans le sens horaire, tout se passe comme indique et lorsque je lache D4 tout s'arrete. Donc c'est okay pour D4.
Par contre, lorsque j'appuie sur D2, rien ne se passe. Il faut que j'appuie sur D4 et que je maintienne appuyé et appuyé ensuite sur D2 pour que le moteur tourne dans le sens antihoraire.

Ce que je veux c'est que , lorsque j'appuie sur D4 disons pour la rotation dans le sens horaire,