Aide programmation

bonjour
j'aurai besoin de votre aide pour réaliser un projet qui est le suivant:
je veux que quand j'appuie sur un bouton poussoir un moteur tourne et dès que je le relache le moteur se mets a tourner en arrière pendant 1 seconde puis s'arrete.

J'utilise un driver L293D et j'aurai donc besoin d'aide pour le branchement et la programmation.

cdlt
BB74

Bonjour bb74

Tu as ce driver L293D sous forme de module?
Si oui donnes un lien sur le produit.

A+
Cordialement
jpbbricole

bonjour jpbbricole

Merci de votre réponse. Le driver est un compososant oui en voici le lien :

https://www.ebay.fr/itm/163185732248?chn=ps&norover=1&mkevt=1&mkrid=709-153316-544655-4&mkcid=2&mkscid=101&itemid=163185732248&targetid=4581664973068626&device=c&mktype=&googleloc=&poi=&campaignid=676422915&mkgroupid=1249046533446246&rlsatarget=pla-4581664973068626&abcId=9491072&merchantid=87893&msclkid=2d72b170b38815c185a2d66f54b67199

Bonsoir bb74

J'ai remis à jour un de mes montage:

C'est pas du testé 200% :wink:, mais essaies ça.

Bonne soirée
jpbbricole

trop cool merci je vais essayer.

Et sans trop vous demander avez vous la programmation qui va avec.
Et encore MERCI
BB74

Elle est accessible dans la simulation.

Oups j'avais pas vue mais merci beaucoup je vais tester rous cela d'ici 1 jour ou 2 et je vous donnerait un retour.

bon ben j'ai déja essayer ducoup et tout marche je voudrais savoir si il serait possible de rajouter un anti rebond car le moteur est un peu aléatoire défois je pense que c'est du à cela mais je ne sais pas non plus comment programmer un anti-rebond
cdlt
Bastien

et le pb que j'ai aussi est que le moteur ne s'arrete pas de tourner en arrière au lieu de tourner 1 seconde

Bonsoir bb74

Le plu simple est d'utiliser une bibliothèque comme Button.

J'ai contrôler la simulation, ça fonctionne mais ce bouton n'a pas de rebonds :wink:.
Peut-être que l'usage de Button pallierai à ce défaut?

oui peut etre mais en faite dès que je mets une contrainte de force sur l'axe de mon moteur le probleme s'arrete alors c ok

Petit "emplâtre" possible, mettre un delay(200), avant cette ligne:
while(digitalRead(boutonPin) == HIGH)

cela marche parfaitement maintenant merci infiniment

Super, bonne nuit!

1 Like

Salut jpbbricole
Je reviens vers toi pour te demander une modification si possible:
Il faudrait mettre un deuxième bouton pour que quand j'appuie dessus le moteur tourne pendant 1 seconde puis s'arrête (tout en gardant le premier bouton).

J'ai essayer mais je n'y arrive pas pourrait tu m'aider. Voici mon programme avec le bouton brancher sur la broche 4 de l'arduino :

`// Définition des broches
const int boutonPin1 = 2; // Broche du bouton 1
const int boutonPin2 = 4; // Broche du bouton 2
const int moteurPin1 = 9; // Broche pour Input 1 du L293D
const int moteurPin2 = 10; // Broche pour Input 2 du L293D

void setup() {
// Configuration des broches
pinMode(boutonPin1, INPUT_PULLUP); // Bouton en mode PULLUP
pinMode(boutonPin2, INPUT_PULLUP);
pinMode(moteurPin1, OUTPUT);
pinMode(moteurPin2, OUTPUT);

// Initialisation du moteur à l'arrêt
digitalWrite(moteurPin1, LOW);
digitalWrite(moteurPin2, LOW);
}

void loop() {
// Lecture de l'état du bouton
int etatBouton1 = digitalRead(boutonPin1);
int etatBouton2 = digitalRead(boutonPin2);

if (etatBouton1 == LOW) {
// Le bouton est pressé : faire tourner le moteur dans un sens
digitalWrite(moteurPin1, HIGH);
digitalWrite(moteurPin2, LOW);
} else {
// Le bouton est relâché : faire tourner le moteur dans l'autre sens pendant 1 seconde
digitalWrite(moteurPin1, LOW);
digitalWrite(moteurPin2, HIGH);
delay(1000); // Attendre 1 seconde

// Arrêter le moteur après la rotation en arrière
digitalWrite(moteurPin1, LOW);
digitalWrite(moteurPin2, LOW);

while(digitalRead(boutonPin1) == HIGH) // Attendre nouvelle pression du bouton
{}

if (etatBouton2 == LOW) {
// Le bouton est pressé : faire tourner le moteur dans un sens
digitalWrite(moteurPin1, HIGH);
digitalWrite(moteurPin2, LOW);
delay(1000); // Attendre 1 seconde
} else {

 // Arrêter le moteur après la rotation en arrière
digitalWrite(moteurPin1, LOW);
digitalWrite(moteurPin2, LOW);

while(digitalRead(boutonPin2) == HIGH) // Attendre nouvelle pression du bouton
{}

}
}
}`

Bastien

Pourrais tu appliquer les bonnes pratiques demander sur le forum, tu peux les lire dans le premier post épingler de la partie Francaise.
Car ton code est complétement illisible :frowning:

// Définition des broches
const int boutonPin1 = 2;     // Broche du bouton 1
const int boutonPin2 = 4;     // Broche du bouton 2
const int moteurPin1 = 9;     // Broche pour Input 1 du L293D
const int moteurPin2 = 10;    // Broche pour Input 2 du L293D

void setup() {
  // Configuration des broches
  pinMode(boutonPin1, INPUT_PULLUP);  // Bouton en mode PULLUP
  pinMode(boutonPin2, INPUT_PULLUP);
  pinMode(moteurPin1, OUTPUT);
  pinMode(moteurPin2, OUTPUT);

  // Initialisation du moteur à l'arrêt
  digitalWrite(moteurPin1, LOW);
  digitalWrite(moteurPin2, LOW);
}

void loop() {
  // Lecture de l'état des boutons
  int etatBouton1 = digitalRead(boutonPin1);
  int etatBouton2 = digitalRead(boutonPin2);

  if (etatBouton1 == LOW) {
    // Le bouton 1 est pressé : faire tourner le moteur dans un sens
    digitalWrite(moteurPin1, HIGH);
    digitalWrite(moteurPin2, LOW);
    } else {
    // Le bouton est relâché : faire tourner le moteur dans l'autre sens pendant 1 seconde
    digitalWrite(moteurPin1, LOW);
    digitalWrite(moteurPin2, HIGH);
    delay(1000); // Attendre 1 seconde
    
  } if  (etatBouton2 == LOW) {
    // Le bouton 2 est pressé : faire tourner le moteur dans le sens opposé
    digitalWrite(moteurPin1, LOW);
    digitalWrite(moteurPin2, HIGH);
    delay(1000); // Attendre 1 seconde

    // Arrêter le moteur après la rotation
    digitalWrite(moteurPin1, LOW);
    digitalWrite(moteurPin2, LOW);
    
    while(digitalRead(boutonPin2) == HIGH) {
      // Attendre nouvelle pression du bouton 2
    }
  } else {
    // Si aucun bouton n'est pressé, arrêter le moteur
    digitalWrite(moteurPin1, LOW);
    digitalWrite(moteurPin2, LOW);
  }
}