Controlar vueltas de motor cabestrante

Antes que nada disculpad mis post anteriores, la ofuscación me pudo y ayer arrojé la toalla.

Hoy me he despertado bien temprano con la idea de sacar esto adelante. Pensando en no fallarme a mi mismo y no fallaros a vosotros que aunque no sea capaz de explicarlo, me sentía en deuda con la ayuda recibida de vuestra parte.

Como os digo, estaba ofuscado con tanta información que no llegaba a comprender del todo y por eso no podía manipular. Pero hoy, me he limitado a usar sólo todos los consejos que me habíais dado y que funcionaban. Por eso, he estado haciendo una mezcla entre el código de @PeterKantTropus (post #25) y uno muy básico que encontré para comprender el uso del driver que me recomendó @surbyte.

El código es el siguiente:

int sensor = 2; //sensor infrarrojos o electromagnético para contar vueltas del motor
int conta = 0;
int estadoCero = 0;
int dir=1;
unsigned long REPOSO = 5000;

int S00=0;//serie de pasos
int S01=0;
int S10=0;
int S20=0;
int S21=0;
int S30=0;
int plactual;

void setup() {

   for(int j=4;j<=9;j++){ //declarar Pines del 4 al 9
  pinMode(j,OUTPUT);    // declarar pines anteriores como SALIDA
   }

  digitalWrite(4,0);
  digitalWrite(7,0);
  digitalWrite(8,0);
  digitalWrite(9,0);
  
  Serial.begin(9600);   //iniciar puerto serie
  pinMode(sensor, INPUT);  //definir pin como entrada


   plactual = digitalRead(sensor);
   S00=1; // inicia el siguiente paso
}
 
void loop() {
  if (digitalRead(sensor)!=plactual) { //contador de cambios del estado de sensor
       conta=conta +dir; 
       plactual=digitalRead(sensor);
        }
  if (S00==1) {  //soltar y dir+1, desactivar S00 activar S02
           dir=+1; 
             delay(REPOSO);
             digitalWrite(7,1);
    
             //digitalWrite(4,0); //motor 2
             digitalWrite(8,0);
  
             //digitalWrite(9,0); //motor 2
  
             analogWrite(5, 100);  //motor 1 // Manejarme entre valores del 30 al 255
             //analogWrite(6, 100);  //motor 2 // Manejarme entre valores del 30 al 255
             S00=0; //detiene este paso
             S01=1; //activa el siguiente paso
              }
  if (S01==1) {  // parar cuando llegue conta >=3,desactivar S01 y activar S1        
            if (conta>=8) {
             digitalWrite(7,0);
    
             //digitalWrite(4,0); //motor 2
             digitalWrite(8,0);
  
             //digitalWrite(9,0); //motor 2
  
             analogWrite(5, 100);  //motor 1 // Manejarme entre valores del 30 al 255
             //analogWrite(6, 100);  //motor 2 // Manejarme entre valores del 30 al 255
                   S01=0;//detiene este paso
                   S10=1;//activa el siguiente paso
                      }
              }
   if (S10==1) { //esperar1, y cuando se cumpla desactivar S10 y  activar S2
              delay (10000); //despues es conveniente cambiarlo por milis 
              S10=0;//detiene este paso
              S20=1;//activa el siguiente paso
              }
 
  if (S20==1) {  //dir= -1, recoger ,desactivar S20 y activar S21
           dir=-1; 
             digitalWrite(7,0);
    
             //digitalWrite(4,0); //motor 2
             digitalWrite(8,1);
  
             //digitalWrite(9,0); //motor 2
  
             analogWrite(5, 100);  //motor 1 // Manejarme entre valores del 30 al 255
             //analogWrite(6, 100);  //motor 2 // Manejarme entre valores del 30 al 255
           S20=0; //detiene este paso
           S21=1; //activa el siguiente paso            
                 }
 if (S21==1) {  //  parar cuando llegue conta =0, desactivar S21 y  activar S3
            if (conta<=0) {
             digitalWrite(7,0);
    
             //digitalWrite(4,0); //motor 2
             digitalWrite(8,0);
  
            //digitalWrite(9,0); //motor 2
  
             analogWrite(5, 100);  //motor 1 // Manejarme entre valores del 30 al 255
             //analogWrite(6, 100);  //motor 2 // Manejarme entre valores del 30 al 255
              S21=0; //detiene este paso
              S30=1; //activa el siguiente paso 
            }
             }
 if (S30==1) {  //esperar2, y cuando se cumpla desactivar S30 y  activar S0
              delay (10000); //despues es conveniente cambiarlo por milis 
              S30=0;//detiene este paso
              S00=1;//activa el siguiente paso
              }
}

En el, como veréis, no hago uso de la rampa y por lo tanto no aprovecho al máximo las posibilidades que me brinda este driver. Lo siento @surbyte, no he logrado implementar la lectura del sensor en el código de rampa que me pasaste. Eso me ha consumido mucha energía y de ahí mi ofuscación. (Me faltan muchísimos conocimientos de programación) Pero al menos, con esta mezcla, puedo modificar el pwm y hacer que el movimiento del motor, aunque constante, sea más o menos rápido y así su inicio y parada no sean tan bruscos.

Espero que no tengáis en cuenta mis bajadas puntuales de moral y os mando un fuerte abrazo a todos. Gracias.