Moteur sur sabertooth // TX série + capteur de ligne

Bonjour,
Je ne parviens pas faire tourner mes 2 moteurs en utilisant des conditions de 3 capteurs HM SENSOR SERIES pour suivre une ligne noire.

La communication se fait bien, si je lance dans void loop la rotation simple des 2 moteurs aucun probleme donc le soucis ne semble pas provenir du SERIE. dès que je positionne les fonctions ST.motor(1).... suivant mon code ci dessous il ne se passe rien.

Pourtant je sais que mes sensors sont fonctionnels, car je les ai utilisé sur un autre montage précédement. quelqu'un aurait il une piste pour m'éclairer ? ma config : Arduino NANO, sabertooth 2x32, 3 sensors HM, une liaison série sur TX du nano. et 2 moteurs CC.
Merci d'avance !

#include <SabertoothSimplified.h>
SabertoothSimplified ST;

  //Variable suivi de ligne
int pinLineD = A0;
int pinLineC = A1;
int pinLineG = A2;
  
void setup() {
  // put your setup code here, to run once:
  pinMode(pinLineD, INPUT);
  pinMode(pinLineC, INPUT);
  pinMode(pinLineG, INPUT);

  SabertoothTXPinSerial.begin(9600); // This is the baud rate you chose with the DIP switches.


}

void loop() {
  suivre_ligne();
}

void suivre_ligne(){
  

  ST.motor(1,0);
  ST.motor(2,0);
  delay(1000);

  boolean lineG = digitalRead(pinLineG);
  boolean lineC = digitalRead(pinLineC);
  boolean lineD = digitalRead(pinLineD);

  //SEUL le capteur central voit la ligne
  if (!lineG && lineC && !lineD) {
  ST.motor(1,80);
  ST.motor(2,80);
  }
 //CAPTEUR DROIT VOIT LA LIGNE
  if (!lineG && lineC && lineD) {
  ST.motor(1,80);
  ST.motor(2,0);
}

  //CAPTEUR GAUCHE VOIT LA LIGNE
  if (lineG && lineC && !lineD) {
  ST.motor(1,0);
  ST.motor(2,80);
}

  //SEUL LE CAPTEUR DROIT VOIT LA LIGNE
  if (!lineG && !lineC && lineD) {
  ST.motor(1,80);
  ST.motor(2,-80);
}

  //SEUL LE CAPTEUR GAUCHE VOIT LA LIGNE
  if (lineG && !lineC && !lineD) {
  ST.motor(1,-80);
  ST.motor(2,80);

}
}

  
 

:warning:

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ je l'ai déplacé vers le forum francophone pour vous pour cette fois...

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

  • Tu coupes les moteurs
  • Tu attends une secondes
  • Tu testes les capteurs
  • Tu actives les moteurs pendant une fraction de seconde
  • Tu boucles.

Tes moteurs ne sont pour ainsi dire jamais allumés.

En fait, cela n'a aucun sens de couper les moteurs au début de la fonction. Cela va ralentir ton mobile.
Si c'est une sécurité, le plus simple serait de traiter les 2 cas que tu as pour l'instant ignorés: tous les capteurs à LOW ou tous les capteurs à HIGH. Et virer ces 2 lignes au début de suivre_ligne(). Et aussi virer le delay() qui va impacter la réactivité de ta plateforme mobile.

Merci pour ta réponse, en effet j'avais rajouté cela par sécurité car il est arrivé parfois au démarrage que l'une des 2 sorties du sabertooth restait active donc quand j'allumais le systeme, ca partait tout seul ... j'ai fait les corrections que tu m'a remonté et ca fonctionne parfaitement.

Dans ce cas là, c'est dans le setup() qu'il faut placer la mise à l'arrêt des moteurs.

1 Like

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