je suis vraiment débutant dans le domaine de programmation .
Voilà mon souci je dois cree une petite boucle avec capteur pour démarrer celle-ci. Helas je n'arrive pas à boucler toutes les instructions quand le capteur detect . je sais pas si je suis clair dans mes explications je vous mets le code .
merci pour votre aide.
// defines pins numbers
const int stepPin = 3;
const int dirPin = 2;
const int enPin = 8;
const int LimitSwitch_LEFT_Pin = 7;
const int LimitSwitch_RIGHT_Pin = 4;
const int led=13;
const int sensor = 12;
void setup() {
Serial.begin(9600);
pinMode(LimitSwitch_LEFT_Pin , INPUT);
pinMode(LimitSwitch_RIGHT_Pin , INPUT);
pinMode(sensor,INPUT);
// Sets the two pins as Outputs
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(enPin,OUTPUT);
digitalWrite(enPin,LOW);
pinMode(led,OUTPUT);
// Set Dir to Home switch
digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
digitalWrite(LimitSwitch_LEFT_Pin,HIGH);
digitalWrite(LimitSwitch_RIGHT_Pin,HIGH);
digitalWrite(sensor,HIGH);
}
void loop() {
while (digitalRead(sensor)== LOW) {
int leftSw = digitalRead( LimitSwitch_LEFT_Pin);
int rightSw = digitalRead( LimitSwitch_RIGHT_Pin);
if ( (leftSw == HIGH && (digitalRead(dirPin) == HIGH)) ||
(rightSw == HIGH && (digitalRead(dirPin) == LOW)) ){
motorStep(1);
}
else if( leftSw == LOW && (digitalRead(dirPin) == HIGH) ){
digitalWrite(dirPin,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
}
else if( rightSw == LOW && (digitalRead(dirPin) == LOW ) ){
digitalWrite(dirPin,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
}
}}
void motorStep( int MAX){
for(int x = 0; x < MAX; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(900);
digitalWrite(stepPin,LOW);
delayMicroseconds(900);
}
}
Désole, alors je voudrais faire un chariot pilote par un moteur PAP avec 2 cellules à chaque extrémité pour les fin de courses .
ce chariot doit faire un aller et un retour, il y a une 3e cellule qui donne le départ de la boucle quand il detect une pièce par exemple .
Mon problème c'est pour la boucle quand la 3e cellule detect un objet cela donne une impulsion au moteur mais il ne fait pas son cycle aller-retour .. dsl je suis novice c'est peut etre pas la boucle while qu'il faut utiliser ?
Je ne comprends toujours pas : le chariot démarre lorsque la cellule 3 lui donne le top.
Ensuite il fait un aller, et s'arrête lorsque la fin de course (disons côté droit) lui indique qu'il est au bout.
Ensuite il fait un retour et s'arrête lorsque l'autre fin de course lui indique qu'il est à l'autre bout.
Ensuite ? Est-ce que c'est tout, ou bien on revient à la position de départ (quelle est cette position) et on attend un nouveau top de la cellule 3 ?
un petit projet simple pour vous mais pour moi ....
alors l'idée : un moteur PAP qui bouge chariot , un verin , 1 cellule chariot droite (1) , 1 cellule chariot gauche (2) et 1 cellule detection de pieces(3).
quand cellule (3) detect passage pieces
verin descente et remonte
moteur PAP deplacement gauche
quand cellule (2) detect chariot alors arret
descente verin et remonte
moteur PAP deplacement droite
quand cellule (1) detect chariot alors arret
et on reboucle
j'ai refait une ebauche code qui fonctionne bien , mais je ne vois pas comment faire un homing a droite du stepper a la mise sous tension de l'arduino . voici le code
ps: dans le code il y a juste la cellule (3) detection pieces , si tu peux m'aider a faire la phase inialisation du stepper ( homing ) sur la droite et quand il detect la cellule (1) il s'arrete .
merci beaucoup .
const int steppin = 3;
const int dirpin = 2;
const int sensor = 4;
void setup() {
pinMode(steppin,OUTPUT);
pinMode(dirpin,OUTPUT);// put your setup code here, to run once:
pinMode(sensor,INPUT);
pinMode(verin,OUTPUT);
pinMode(button,INPUT);
digitalWrite(sensor,HIGH);
digitalWrite(button,HIGH);
}
void loop() {
if (digitalRead(sensor)== LOW)
{digitalWrite(verin,HIGH); // verin descente
delay(3000);
digitalWrite(verin,LOW); // verin monté
delay(3000);
digitalWrite(dirpin,HIGH); // moteur gauche
for (int x = 0 ;x <900; x++){
digitalWrite(steppin,HIGH);
delayMicroseconds(700);
digitalWrite(steppin,LOW);
delayMicroseconds(700); }
digitalWrite(verin,HIGH); // verin descente
delay(3000);
digitalWrite(verin,LOW); // verin monté
delay(3000);
digitalWrite(dirpin,LOW); // moteur droite
for (int x = 0 ;x <900; x++){
digitalWrite(steppin,HIGH);
delayMicroseconds(700);
digitalWrite(steppin,LOW);
delayMicroseconds(700); }
}
}