// Professor Cristiano Teixeira.
// Mudanças do original Sob Licença Apache 2.0
// Stepper Motor A4988 Driver
// cada passo tem 1,8 Graus de rotação num total de 200 passos para uma volta completa

bool DIR = 1; // direção do movimento:  0 = anti-horário, 1 = horário 
bool controle = 0; // variável de controle para só permitir executar uma vez
                  // eu sei que era mais fácil fazer o setup, mas queria demonstrar o uso de uma lógica assim 
void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  digitalWrite(2, DIR); // Seta a direção para horário
}
void loop() {
  // instrução abaixo faz o motor mover 50 passos 90 Graus 
  // um passo a cada 100 milésimos de segundo, depois para
  if (controle == 0) {
    for (int x = 0; x < 50; x++){
      // para dar 1 passo, precisa intercalar um LIGADO e um DESLIGADO na sequência
      // Cada combinação equivale a 1 passo
      digitalWrite(3, HIGH);
      digitalWrite(3, LOW);
      delay(100);
    }
    delay (2000);
  }
  // agora vou fazer ele voltar
    DIR = 0; // mudo a direção para anti-horário
    digitalWrite(2, DIR); // Seta a direção
  if (controle == 0) {
    for (int x = 0; x < 50; x++){
      digitalWrite(3, HIGH);
      digitalWrite(3, LOW);
      delay(100);
      controle = 1; // Mudo o valor da variável de controle para não mais executar nenhum dos dois ifs
    }
  }
}
A4988