Robot2025/Actionneurs/Translateur.ino

93 lines
1.9 KiB
C++

#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);
}*/
}