motore passo passo

ciao a tutti.. ho un problema con questo codice.
il motore deve eseguire un ciclo in avanti se si trova nella posizione corretta ovvero se il finecorsa 7 che per mia comodita ho chiamato pulsante e impegnato altrimenti deve ruotare in senso contrario fino a impegnare il finecorsa e poi eseguire il ciclo in avanti. funziona pero ripete il ciclo e io ho la necessita di farlo eseguire una sola volta.Ho provato mettendolo nel void setup funziona in parte, diciamo se lui e in posizione quindi il pulsante e HIGH esegue il ciclo con il comando for se pero deve tornare in dietro esegue solamente uno stepp.
int motorPin2 = 11;
int motorPin3 = 12;
int motorPin4 = 13;
int delayTime = 20; // velocita motore
int pulsante; //finecorsa
int ciclo=40;
void setup()
{
pinMode(8,INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop()
{
pulsante=digitalRead( 8 );
if (pulsante==LOW)
{
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
}
pulsante=digitalRead ( 8 );
if (pulsante==HIGH)
{
for (int i=1; i <= ciclo; i++)
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
}
}
}

risolto XD XD mettendo un contatore,semplice no? comunque se qualcuno a idee in merito ben venga. Grazie e buona serata a tutti

int motorPin1 = 10;
int motorPin2 = 11;
int motorPin3 = 12;
int motorPin4 = 13;
int delayTime = 20; // velocita motore
int pulsante; //finecorsa
int ciclo=40;
int contatore=0;
void setup()
{
pinMode(8,INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop()

{
if (contatore <= 0 )
{
pulsante=digitalRead( 8 );
if (pulsante==HIGH)
{
for (int i=1; i <= ciclo; i++)
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
}
contatore=contatore+1;
}

else
{
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
}
}
}

Ciao scusami ma non ho risposta alla tua domanda :expressionless:
Ero comunque interessato perĂ² e ho deciso di rispondere, vorrei capire quello che stai facendo.
Tu stai controllando uno stepper motor come quelli che si trovano nelle stampanti con arduino senza alcun IC esterno?
Ciao :smiley:

ciao...sto facendo una torre di raffreddamento, ho messo un sistema di alette che si aprono quando avvio il sistema e di conseguenza si devono richiudere,spero!!!
ecco perche l'esigenza di arrestare gli steep del motore.
si sto usanto un motore di una stampante con un driver sn754410.
scusa ma cosa intendi ic esterno? :smiley:

Se usi la libreria stepper si semplifica molto il codice.

e schema di collegamneto:
http://arduino.cc/en/Reference/StepperBipolarCircuit circuito in basso a 4 pin.
Se vuoi risparmiare pin dia rduino puoi aggiungere 2 transitori e pilotare il sn754410 con 2 pin

Ciao Uwe

grazie per le dritte..sicuramte andro a utilizzare i due transistor perche non ho piu pin a disposizione, per la libreria provero a giocarci un po e vediamo cosa esce. ciai ciao

scusami intendevo senza nessun driver, ma mi hai risposto xDD

vi ho detto un ....... il driver del motore L 293 DNE pero il risultato non cambia!
ciao ciao