[Conseil] Contrôle de deux moteurs avec un Motor Shield

Bonjour,

Je tente de fabriquer un petit véhicule à chenilles piloté par un Arduino Mega2650 et un Motor Shield.

A l’heure actuelle je n’en suis qu’aux balbutiements, c’est mon premier projet; ainsi que la première fois que je tente de coder quelque chose, j’essaye de “prouver mon concept” et de comprendre exactement ce que je fais.

Les commandes sont envoyées par quatre boutons poussoirs situés sur une breadboard.
Respectivement: Avant, Arrière, Gauche, Droite.

Encore une fois, c’est la première fois que je tente de coder quelque chose, et je me suis inspiré d’un grand nombre de sources différentes, et ait tenté de faire preuve de logique, mais il n’y en a peut être aucune…

Mon problème est le suivant:
Lorsque j’appuie sur un BP, les moteurs réagissent a chaque fois d’une manière différente.

J’ai tenté de réassigner les pins, passer en “digitalwrite” plutot que “analogwrite” pour la lecture des états des boutons mais je n’y ai gagné que des parasites qui empirent les choses.

Si quelqu’un à la solution, j’aimerais comprendre ce que j’ai fait de travers.

Ci-joint le schéma Fritzig et le code.

D’avance merci.
Valentin.

EDIT:
-Je pense m’etre trompé de catégorie, je m’en excuse! Si un modo peu me déplacer dans le bon coin… Merci.
-Le schéma montre la Mega et le Motor Shield l’un a coté de l’autre, mais ils sont bien évidemment a cheval.
-Je n’ai pas précisé non plus que le tout était propulsé par une petite LiPo (11.1V, 1100mAh) que j’ai placé dans le chassis du bot, et connectée à l’alim de l’Arduino.

Kolobot.ino (3.52 KB)

Jodorowsky: ... Mon problème est le suivant: Lorsque j'appuie sur un BP, les moteurs réagissent a chaque fois d'une manière différente. ...

bonjour oui OK mais concretement ça se traduit de quelles façons ? :grin:

Bonjour Artouste,

Cela se traduit par:

J'appuie sur n'importe lequel des BP, et j'ai une des quatres actions qui est effectuée (avant, arriere gauche ou droite) de maniere aléatoire.

En somme, mes BP à qui j'ai attribué des fonctions spécifiques déclenchent une action non spécifique.

Si on appuie par exemple une premiere fois sur le BP "Gauche", le robot ira tout droit, si on relache il s'arrete. Mais si on ré-appuie sur ce meme bouton quelques instants plus tard, le rebot partira en arrière, ou n'importe quelle autre commande, mais rarement "Gauche"... Et cela vaut pour tous les boutons.

J'ai pourtant cherché s'il n'y avait pas d'erreur dans les déclaration des boutons au début, je n'ai rien trouvé d'anormal.

Merci.

bonjour, pourquoi t'emm...der a mettre sur les analogiques les boutons au lieu des digitales?

si tu laisse en analogique dans ce cas, tu peux mettre

 if(FORWARD > 0)

j'ai plus en tete le pull_up pour l'antirebond, mais ca pourrait servir au lieu de la résistance.

Bonjour Infobarquee,

J'ai branché les boutons sur les analogiques par ce que mon motor shield utilise les digitales?

J'ai essayé de comprendre les attributions des pins du Motor Shield, et justement pour eviter tout probleme, j'ai preféré les brancher sur les analogs restantes, mauvaise idée?

Je n'ai pas saisi l'histoire du Pull-up pour l'antirebond?

Merci en tout cas pour ce debut de réponse!

Valentin

Les allocations des boutons semblent correctes dans le code.
Par contre la logique de la gestion des boutons semblent passablement alambiquée.
Les tests s’empilent les uns sur les autres ce qui rend le code incompréhensible.
Je pense que tu devrais réécrire sur le papier la gestion de tes boutons avant de la recoder.
Il faut partir du principe que loop s’exécute en boucle:

  • au début de loop tu lis l’état de tous les boutons
  • tu interprètes l’état des boutons pour en déduire une combinaison valide. Normalement il ne devrait rester que Av, Av+G, Av+D, Ar, Ar+G, Ar+D (les autres combinaisons sont invalides)
  • en fonction de cette combinaison tu exécutes UNE action sur les 2 moteurs