Problemas de novato con la función "for"

Buenas a todos,

Soy extremadamente novato en arduino y estoy intentando aprender a controlar motores paso a paso.

He hecho este programa:

#define xstep 2   // Step pin  
#define xdir 5    // Direction pin  
#define xhab 8    // Enable pin  
#define pul1 12    // Input pin 1  
#define pul2 13    // Input pin 2

int retardo = 10;

void setup() {
    pinMode(xstep, OUTPUT); 
    pinMode(xdir, OUTPUT); 
    pinMode(xhab, OUTPUT);
    pinMode(pul1, INPUT); 
    pinMode(pul2, INPUT);
}

void loop() {
    digitalWrite(xhab, LOW);  // Habilita el driver
    digitalWrite(xdir, LOW);   // Define la dirección 
    for (int i = 0; i < 20; i++) { // limita la rotación a 20 pasos
        digitalWrite(xstep, HIGH);
        delay(retardo);
        digitalWrite(xstep, LOW);
        delay(retardo);
    }
    digitalWrite(xhab, HIGH); // deshabilita el driver
}

La idea es que el motor de 20 pasos y se pare, pero no para nunca, no se que hago mal, he buscado en foros y he hecho muchas pruebas, no cambia nada, nunca se para.

Alguien me puede ayudar?
Gracias de antemano

Tu motor no se detiene porque el loop() se repite continuamente. Si solo quieres hacer algo una vez al inicio del programa, pon ese código en el setup().

PS: 40 ms es mucho para marcar el pulso.

perdona mi ignorancia, pero te refieres a asi? :


#define xstep 2   // Step pin 2 
#define xdir 5    // Direction pin 5  
#define xhab 8    // Enable pin 8 
#define pul1 12    // Input pin 1  
#define pul2 13    // Input pin 2

int retardo = 10;

void setup() {
    pinMode(xstep, OUTPUT); 
    pinMode(xdir, OUTPUT); 
    pinMode(xhab, OUTPUT);
    pinMode(pul1, INPUT); 
    pinMode(pul2, INPUT);

  
  for (int i = 0; i < 20; i++) { // Limita la rotacion a 20 pasos
  }
    
       
}

void loop(){
   digitalWrite(xhab, LOW);  // Activa el driver 
    digitalWrite(xdir, LOW);   // Sdefine direccion (A)      
        digitalWrite(xstep, HIGH);
        delay(retardo);
        digitalWrite(xstep, LOW);
        delay(retardo);        
  digitalWrite(xhab, HIGH); // desactiva el driver
}
      

Lo he probado y no funciona.
Estoy un poco perdido, la verdad.
Gracias por tu ayuda!!

No, así.

#define xstep 2   // Step pin  
#define xdir 5    // Direction pin  
#define xhab 8    // Enable pin  

const unsigned long retardo = 10;

void setup() {
    pinMode(xstep, OUTPUT); 
    pinMode(xdir, OUTPUT); 
    pinMode(xhab, OUTPUT);
    pinMode(pul1, INPUT); 
    pinMode(pul2, INPUT);

    digitalWrite(xhab, LOW);  // Habilita el driver
    digitalWrite(xdir, LOW);   // Define la dirección 
    for (int i = 0; i < 20; i++) { // limita la rotación a 20 pasos
        digitalWrite(xstep, HIGH);
        delay(retardo);
        digitalWrite(xstep, LOW);
        delay(retardo);
    }
    digitalWrite(xhab, HIGH); // deshabilita el driver
}

void loop() {}

La función loop() está vacía; una vez que se ha ejecutado el setup y se han completado los 20 pasos, el programa no hace nada más.

Ah, ya entiendo, genial, muchisimas gracias por tu ayuda!!