#define DUREE_MVT_TRANSLATEUR_MS 1000
enum translateur_action_t{
  TRANSLATEUR_INIT,
  TRANSLATEUR_AVANCE,
  TRANSLATEUR_RECULE,
}translateur_action = TRANSLATEUR_INIT;

unsigned long temps_debut_action = 0;

void Translateur_init(void){
// Moteur
  /*ledcAttach(3, 500, 8);
  ledcWrite(3, 0);
  ledcAttach(4, 500, 8);
  ledcWrite(4, 0);*/
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  // Etat des contacteurs de fin de course
  // relecture de 3 sur 2 (Avant)
  // relecture de 4 sur 10 (Arrière)
  pinMode(2, INPUT);
  pinMode(10, INPUT);
}


enum etat_action_t Translateur_etat(void){
  if(temps_debut_action + DUREE_MVT_TRANSLATEUR_MS < millis()){
    if(translateur_action == TRANSLATEUR_AVANCE){
      if(digitalRead(2) == 0){
          return ACTION_TERMINEE;
      }
    }else  if(translateur_action == TRANSLATEUR_RECULE){
      if(digitalRead(10) == 0){
        return ACTION_TERMINEE;
      }
    }else{
        return ACTION_TERMINEE;
    }
  }
  return ACTION_EN_COURS;
}


void Translateur_cycle(void){
  if(Translateur_etat() == ACTION_TERMINEE){
    if(translateur_action == TRANSLATEUR_RECULE){
      Translateur_avance();
    }else{
      Translateur_recule();
    }
  }
}


void Translateur_avance(){
  Moteur_set(-255);
  temps_debut_action = millis();
  translateur_action = TRANSLATEUR_AVANCE;
}

void Translateur_recule(){
  Moteur_set(255);
  temps_debut_action = millis();
  translateur_action = TRANSLATEUR_RECULE;
}

/// @brief pilote la vitesse des moteurs
/// @param vitesse vitesse signée, sera saturée à 255
void Moteur_set(int vitesse){
  if(vitesse < 0){
    digitalWrite(3, 1);
    digitalWrite(4, 0);
  }else{
    digitalWrite(3, 0);
    digitalWrite(4, 1);
  }
  /*ledcWrite(3, 0);
  ledcWrite(4, 0);
  if(vitesse < 0){
    vitesse = -vitesse;
    if(vitesse > 255){
      vitesse = 255;
    }
    ledcWrite(3, vitesse);
  }else{
    if(vitesse > 255){
      vitesse = 255;
    }
    ledcWrite(4, vitesse);
  }*/
}