Go Down

Topic: Branchement de deux microswitch fin de course et LED 13 (Read 1 time) previous topic - next topic

Jean-François

#5
Jul 19, 2013, 09:56 pm Last Edit: Jul 19, 2013, 10:03 pm by Jean-François Reason: 1
Là on voit bien que les switchs sont en série :




Le code pour trouver la position milieu de la roue avant, le moteur de la direction part dans un sens jusqu'à la première touche, puis repart dans l'autre sens en comptant les pas du moteur jusqu'à la deuxième touche. On repart dans l'autre sens de la moitié des pas comptés... et on la roue avant est alignée avec l'axe du mobile

Code: [Select]

void mise_a_zero(){
  delay (200);
  ////////////////////////////////touche a gauche
  while (digitalRead(pin_stop)==HIGH){
 
    delai_entre_pas= micros()-Old_time;
  if (delai_entre_pas >= 10000){         //delayMicroseconds(8000);
    Old_time=micros();
   
  digitalWrite(pinA, etatPinA[pas_suivant]);
  digitalWrite(pinB, etatPinB[pas_suivant]);
  pas_suivant--;
  if(pas_suivant <0){pas_suivant=3;}
  }
  }
 
  while (stepper_return<=15){
     delai_entre_pas= micros()-Old_time;
  if (delai_entre_pas >= 10000){         //delayMicroseconds(8000);
    Old_time=micros();
   
  digitalWrite(pinA, etatPinA[pas_suivant]);
  digitalWrite(pinB, etatPinB[pas_suivant]);
  pas_suivant++;
  stepper_return++;
  if(pas_suivant >=4){pas_suivant=0;}
  }}
  stepper_return=0;
  /////////////////////// fin de touche a gauche
  ///// touche a droite
  while (digitalRead(pin_stop)==HIGH){
 
  delai_entre_pas= micros()-Old_time;
  if (delai_entre_pas >= 10000){         //delayMicroseconds(8000);
    Old_time=micros();
   
  digitalWrite(pinA, etatPinA[pas_suivant]);
  digitalWrite(pinB, etatPinB[pas_suivant]);
  pas_suivant++;
  stepper_count++;
  if(pas_suivant >=4){pas_suivant=0;}
}}
///// fin de touche a droite

/// positionnement a zero
stepper_count= stepper_count/2;
pos_stepper=stepper_count;
while (stepper_count>=-4){
     delai_entre_pas= micros()-Old_time;
  if (delai_entre_pas >= 10000){         //delayMicroseconds(8000);
    Old_time=micros();
   
  digitalWrite(pinA, etatPinA[pas_suivant]);
  digitalWrite(pinB, etatPinB[pas_suivant]);
  pas_suivant--;
 
  stepper_count--;
  pos_stepper--;
  if(pas_suivant <0){pas_suivant=3;}
}
}
/// fin de positionnement a zero

}

MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Christian_R

#6
Jul 19, 2013, 10:21 pm Last Edit: Jul 19, 2013, 10:23 pm by Christian_R Reason: 1
Ton fil gris côté gauche est flottant (décalé d'une rangée).
Il n'y a pas besoin de 4 pins sur l'Arduino.
Christian

FlorL

#7
Jul 19, 2013, 10:33 pm Last Edit: Jul 24, 2013, 11:18 pm by FlorL Reason: 1
@Christian : exact, du coup j'ai modifié le schéma !
@Jean-François : merci pour les précisions, vu comme ça, on comprends mieux comment fonctionne tes fins de course!


Bon, j'avance un peu dans mon exploration : pour la LED TX, ça vient du "Serial.begin(115200);" qui envoie des données vers le moniteur série, notamment les valeurs des switch, donc il est normal qu'elle s'allume quand j'appuie. Une info tout de même si ça vous arrive : si vous televersez le code tel quel et que vous n'ouvrez pas le moniteur, TX reste constamment allumé. Voilà pour la précision.

Je continue de jeter un oeil à tout ça!   ]:D

Après vérification et application sur les moteurs, je voulais signaler que tout fonctionne à merveille :)
Un grand merci à vous tous pour votre intérêt et votre rapidité, j'ai gagné un temps fou grâce à vous!

A bientôt sur le forum!

Go Up