STEPPER MOTOR

Buonasera,

sono nuovo del forum, sono alle prime armi con arduino. Ho acquistato una scheda Itead Mstudio con a bordo arduino leonardo e a bordo il driver per un motore passo passo. Uso la libreria stepper.h Il mio problema è che non riesco a far eseguire al motore un numero definito di giri, ma gira in continuo. Ho provato ad usare il ciclo for, è corretto ? Grazie dell'aiuto.

   #include <Stepper.h>

// n° di passi per giro
//del proprio motore
const int stepsPerRevolution = 200;
const int lum = 10;
float Rsensor;
const int i=0;


// inizializzo la libreria stepper
// con il numero dei pin di Arduino
//cui ho collegato le bobine del motore:
Stepper myStepper(stepsPerRevolution, 7, 8, 12, 13);

void setup()
{
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);

  // setto la velocità di rotazione a n rpm:
  // 100<=n<=400
  myStepper.setSpeed(50);

  // inizializzo la porta seriale:
  Serial.begin(9600);
}

void loop()
{

  for (int i=0; i<=2; i++){
    myStepper.step(200);
    delay(100);
  break;
}
}

Grazie dell'aiuto.

#include <Stepper.h>

// n° di passi per giro
//del proprio motore
const int stepsPerRevolution = 200;
const int lum = 10;
float Rsensor;
const int i = 0;


// inizializzo la libreria stepper
// con il numero dei pin di Arduino
//cui ho collegato le bobine del motore:
Stepper myStepper(stepsPerRevolution, 7, 8, 12, 13);

void setup()
{
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);

  // setto la velocità di rotazione a n rpm:
  // 100<=n<=400
  myStepper.setSpeed(50);

  // inizializzo la porta seriale:
  Serial.begin(9600);
}

void loop()
{

  for (int i = 0; i <= 2; i++) {
    
    myStepper.step(200);
    delay(100);
  Serial.println("For loop running");
  }
}

can you send connection diagram & I have atatched code above try it once.

Il loop() viene eseguito di continuo. Quando finisce riparte. Percui il motore gira di continuo.

Metti un delay lungo oppure un while(1) per fermare lo sketch.

Ciao Uwe

emans77:
Buonasera, sono nuovo del forum,

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Buonasera, ho provato con while ma il problema persite: il ciclo non si ferma. Dove sbaglio? Di seguito il codice. Grazie

#include <Stepper.h>

// n° di passi per giro
//del proprio motore
const int stepsPerRevolution = 200;
const int lum = 10;
float Rsensor;
int i = 0;



// inizializzo la libreria stepper
// con il numero dei pin di Arduino
//cui ho collegato le bobine del motore:
Stepper myStepper(stepsPerRevolution, 7, 8, 12, 13);

void setup()
{
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);

  // setto la velocità di rotazione a n rpm:
  // 100<=n<=400
  myStepper.setSpeed(50);

  // inizializzo la porta seriale:
  Serial.begin(9600);
}

void loop()
{
  while(i=5)
  {
    
    myStepper.step(200);
    delay(100);
  Serial.println("For loop running");
  i=i+1;
    }
  myStepper.step(0);
  
}

while ( i <= 5 )

void loop()
{

  for (int i = 0; i <= 2; i++) {
   
    myStepper.step(200);
    delay(100);
  Serial.println("For loop running");
  }
// while(1);
// oppure delay(100000);
}

Ciao Uwe

Grazie Brunello con while ( i <= 5 ) tutto perfetto. L'evoluzione del mio programma è il segunete:

#include <Stepper.h>

// n° di passi per giro
//del proprio motore
const int stepsPerRevolution = 200;
const int lum = 100;
float Rsensor;
int i = 0;



// inizializzo la libreria stepper
// con il numero dei pin di Arduino
//cui ho collegato le bobine del motore:
Stepper myStepper(stepsPerRevolution, 7, 8, 12, 13);

void setup()
{
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);

  // setto la velocità di rotazione a n rpm:
  // 100<=n<=400
  myStepper.setSpeed(50);

  // inizializzo la porta seriale:
  Serial.begin(9600);
}

void loop()
{
  luce();
  Serial.println(Rsensor);
  
  if (Rsensor>lum)
  {
      avanti();
      delay(1000);
      }
  if (Rsensor<lum)
  {
    indietro();
    delay(1000);
    }

}


void avanti()
{
  while(i<=5)
  {
  myStepper.step(200);
  Serial.println("a");
  i=i+1;
  }
  }
void indietro()
{
  while(i>=0)
  {
    myStepper.step(-200);
    Serial.println("i");
    i=i-1;
  }
}  
void luce()
{
  int sensorValue = analogRead(0);
  Rsensor=(float) (1023-sensorValue)*10/sensorValue;
  delay(2000);
  }

Quello che faccio è andar a leggere il valore di una fotoresistenza ed in base alla luminosità faccio girare avanti o indietro il motore. Secondo voi, come è scritto, si possono creare movimenti del motore falsati? Cioè io devo far muovere il motore all'alba ed al tramonto e non vorrei che durante la giornata ci fossero dei movimenti che non ci dovrebbero essere.

Grazie