Voici le code complet du montage :
[code]
/* ------------------------------------------------ Déclaration de l'encodeur virtuel ------------------------------------*/
const int Pin_Signal_un = 2; // pin de simulation encoder par l'Arduino
const int Pin_Signal_deux = 4; // pin de simulation encoder par l'Arduino
const int inter_monter = 9; // Poussoir de relais du récepteur n°2 en haut
int Etat_inter_monter;
const int inter_descente = 10; // Poussoir de relais du récepteur n°3 en haut
int Etat_inter_descente;
const int Relais_monter_descente = 7;
/* ----------------------------------------------- Déclaration du débrayage ---------------------------------------------*/
const int inter_debrayage = 11; // Poussoir de relais du récepteur n°1 en haut
int Etat_inter_debrayage;
const int Relais_electro_frein = 3;
const int Relais_canal_A_B_debrayage = 12;
const int Valeur_canal_A = 5;
const int Valeur_canal_B = 6;
/* ------------------------------------------------ Déclaration des leds test -----------------------------------------*/
const int led_test_montee_descente = 13;
const int led_test_debrayage = 8;
/* _______________________________________________________ SETUP ___________________________________________________________*/
void setup() {
Serial.begin(9600);
/* --------------------------------------------- Initialisation de l'encodeur ------------------------------------------*/
pinMode(Pin_Signal_un, OUTPUT);
pinMode(Pin_Signal_deux, OUTPUT);
pinMode(inter_monter, INPUT);
Etat_inter_monter = 0;
pinMode(inter_descente, INPUT);
Etat_inter_descente = 0;
digitalWrite(Pin_Signal_un, LOW);
digitalWrite(Pin_Signal_deux, LOW);
pinMode(Relais_monter_descente, OUTPUT);
/* --------------------------------------------- Initialisation du débrayage ----------------------------------------*/
pinMode(inter_debrayage, INPUT);
pinMode(Relais_electro_frein, OUTPUT);
// digitalWrite(Relais_electro_frein, HIGH);
pinMode(Relais_canal_A_B_debrayage, OUTPUT);
//digitalWrite(Relais_canal_A_B_debrayage, HIGH);
pinMode(Valeur_canal_A, OUTPUT);
pinMode(Valeur_canal_B, OUTPUT);
/* -------------------------------------------- Initialisation des leds test ----------------------------------------*/
pinMode(led_test_montee_descente, OUTPUT);
pinMode(led_test_debrayage, OUTPUT);
}
/* ___________________________________________________________ LOOP _______________________________________________________________________*/
void loop() {
/* ------------------- Routine de montée descente des vitesses -----------------------*/
digitalWrite(Relais_monter_descente, HIGH);
Etat_inter_monter = digitalRead(inter_monter); // Routine de montée / descente des vitesses encodeur AutoPower
Etat_inter_descente = digitalRead(inter_descente);
if (Etat_inter_monter == LOW) {
Monter_vitesse();
digitalWrite(led_test_montee_descente, HIGH);
} else {
digitalWrite(led_test_montee_descente, LOW);
}
if (Etat_inter_descente == LOW) {
Descente_vitesse();
digitalWrite(led_test_montee_descente, HIGH);
} else {
digitalWrite(led_test_montee_descente, LOW);
}
/* ------------------ Routine de débrayage ---------------------------------*/
analogWrite(Valeur_canal_A, 50); // Routine de débrayage du tracteur
analogWrite(Valeur_canal_B, 209);
Etat_inter_debrayage = digitalRead(inter_debrayage);
if (Etat_inter_debrayage == LOW) {
digitalWrite(Relais_electro_frein, LOW);
digitalWrite(led_test_debrayage, HIGH);
delay(2000);
digitalWrite(Relais_canal_A_B_debrayage, LOW);
} else {
digitalWrite(led_test_debrayage, LOW);
digitalWrite(Relais_electro_frein, HIGH);
delay(2000);
digitalWrite(Relais_canal_A_B_debrayage, HIGH);
}
}
/* _________________________________________________________________ FONCTION(S) _____________________________________________________________*/
void Monter_vitesse() {
digitalWrite(Pin_Signal_un, LOW);
digitalWrite(Pin_Signal_deux, LOW);
delay(200);
digitalWrite(Pin_Signal_un, HIGH);
delay(200);
digitalWrite(Pin_Signal_deux, HIGH);
delay(200);
digitalWrite(Pin_Signal_un, LOW);
delay(200);
}
void Descente_vitesse() {
digitalWrite(Pin_Signal_un, LOW);
digitalWrite(Pin_Signal_deux, LOW);
delay(200);
digitalWrite(Pin_Signal_deux, HIGH);
delay(200);
digitalWrite(Pin_Signal_un, HIGH);
delay(200);
digitalWrite(Pin_Signal_deux, LOW);
delay(200);
}
Sur ce programme, le souci est que les fonctions Monter_vitesse();
et Descente_vitesse();
prend la pause de 2 secondes qui se trouve dans ma condition de fonction de débrayage.
Le delay(2000); est nécessaire pour ne pas se retrouver avec un véhicule en roue libre pendant se laps de temps.
Je souhaiterais que la partie débrayage contenue dans le loop ne perturbe pas les fonctions d'augmentation ou diminution de la vitesse.
J'ai tenté pas mal de chose avec millis mais ça ne fonctionne pas.
Pouvez vous m'apporter une aide ?
Merci par avance,
Ludovic