/*

    M_MOTOR_PAP_UNIPO_EXPER_2_FORO v2


*/

//  ==================================  ENGRAL JUL 2023  =================================

const int LIMITE_CICLOS = 145;
int contadorCiclos;
const int LIMITE_PASOS = 4;
int contadorPasos;

const unsigned long INTERVALO_PASOS = 3;
const unsigned long INTERVALO_CICLOS = 2000;

unsigned long TiempoInicial;
// *****************************************
boolean estadoLED7 = true;
boolean estadoLED12 = true;

const int INTERVALO_LED_7 = 513 ;  //tiempo de INTERVALO LED 7
const int INTERVALO_LED_12 = 200 ; //tiempo de INTERVALO LED 12

unsigned long tiempoLED7;
unsigned long tiempoLED12;

boolean ejecutarPaso = true;
boolean ejecutarDescanso = true;

const byte CONF_DESCANSO = 0B0000;
const byte CONF_PASO[LIMITE_PASOS + 1] = {0B0110, 0B0101, 0B1001, 0B1010, CONF_DESCANSO};



//  ===================================  FUNCIONES " contadorPasos" DEL MOTOR PAP  ===================================

void darPaso(int numPaso) {
  byte tmpB = PORTB;  // copia el estado del port B 
  tmpB &= 0B11110000; // enmascara los pines 8 a 11
  PORTB = tmpB | CONF_PASO[numPaso]; // cambia los 4 pines en una sola operación
/*
  Serial.print(contadorCiclos);
  Serial.print("\t\t");
  Serial.println(numPaso);
*/

}

void setup() {
  Serial.begin(115200);
  Serial.println(" ======== TITULO: M_MOTOR_PAP_UNIPO_EXPER_2_copia_FORO =============");
  Serial.println("");

  pinMode(7, OUTPUT);  // pin digital 7 de Arduino a intermitente
  pinMode(8, OUTPUT);  // pin digital 8 de Arduino a IN1 de modulo controlador
  pinMode(9, OUTPUT);  // pin digital 9 de Arduino a IN2 de modulo controlador
  pinMode(10, OUTPUT); // pin digital 10 de Arduino a IN3 de modulo controlador
  pinMode(11, OUTPUT); // pin digital 11 de Arduino a IN4 de modulo controlador
  pinMode(12, OUTPUT); // pin digital 12 de Arduino a intermitente

  contadorCiclos = 0;
  contadorPasos = 0;
  byte tmpB = PORTB; // copia el estado del port B 
  tmpB &= 0B11110000; // enmascara los pines 8 a 11
  PORTB = tmpB; // pone LOW en los pines 8 a 11 sin cambiar los otros 
  delay(50);
}

void loop() {

  // *****************************  SECCION: LEDS INTERMITENTES   *****************************

  if ((millis() - tiempoLED7) >= INTERVALO_LED_7) { // Tiempo 513
    estadoLED7 = !estadoLED7;
    digitalWrite (7, estadoLED7);
    tiempoLED7 = millis();
  }

  if ((millis() - tiempoLED12) >= INTERVALO_LED_12) { // Tiempo 200
    estadoLED12 = !estadoLED12;
    digitalWrite (12, estadoLED12);
    tiempoLED12 = millis();
  }

  // *******************************   SECCION: MOTOR PAP   ***********************
  if (contadorCiclos < LIMITE_CICLOS) {
    if (ejecutarPaso) {
      darPaso(contadorPasos);
      ejecutarPaso = false;
    }
    else {
      if (millis() - TiempoInicial > INTERVALO_PASOS ) {
        TiempoInicial = millis(); // ============== "TiempoInicial" toma el valor actual de "millis"
        if (contadorPasos == 3) {
          contadorPasos = 0;
          contadorCiclos++;
        } else {
          contadorPasos++;
        }
        ejecutarPaso = true;
      }
    }
  }
  else {
    if (ejecutarDescanso) {
      darPaso(LIMITE_PASOS);
      ejecutarDescanso = false;
    }
    else {
      if (millis() - TiempoInicial > INTERVALO_CICLOS) {
        TiempoInicial = millis(); // ============== "TiempoInicial" toma el valor actual de "millis"
        contadorPasos = 0;
        contadorCiclos = 0;
        ejecutarDescanso = true;
      }
    }
  }
//  delay(1); // para wokwi
}

// =============================================       FIN          ===============================