Bonjour à tous,
Mon projet consiste à arrêter et relancer un véhicule via un émetteur / récepteur.
Dans le étapes du programme, je dois simuler des valeurs d'une pédale d'embrayage qui est équipé d'un potentiomètre "PWM" et d'une électrovanne qui vient freiner le véhicule lorsqu'il est débrayé et qui relâche l'électrovanne lorsque l'on relance le véhicule.
Lorsque j'actionne un bouton de ma radiocommande, le véhicule doit se débrayer et s'arrêter jusqu'à ce que j’appuie de nouveau sur le bouton ou il doit se libérer du frein et ré-embrayer.
Voici comment j'ai procédé dans le code :
/* ----------------------------------------------- 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_B = 5;
const int Valeur_canal_A = 6;
/* _______________________________________________________ SETUP ___________________________________________________________*/
void setup() {
Serial.begin(9600);
/* --------------------------------------------- Initialisation du débrayage ----------------------------------------*/
pinMode(inter_debrayage, INPUT);
pinMode(Relais_electro_frein, OUTPUT);
pinMode(Relais_canal_A_B_debrayage, OUTPUT);
digitalWrite(Relais_canal_A_B_debrayage, HIGH);
pinMode(Valeur_canal_A, OUTPUT);
pinMode(Valeur_canal_B, OUTPUT);
analogWrite(Valeur_canal_A, 190); // Première temporisation de débrayage de la pédale
analogWrite(Valeur_canal_B, 65);
analogWrite(Valeur_canal_A, 150);
analogWrite(Valeur_canal_B, 155);
analogWrite(Valeur_canal_A, 115);
analogWrite(Valeur_canal_B, 140);
analogWrite(Valeur_canal_A, 85);
analogWrite(Valeur_canal_B, 170);
analogWrite(Valeur_canal_A, 55);
analogWrite(Valeur_canal_B, 200);
digitalWrite(Relais_electro_frein, HIGH);
}
/* ___________________________________________________________ LOOP _______________________________________________________________________*/
void loop() {
/* ------------------ Routine de débrayage ---------------------------------*/
Etat_inter_debrayage = digitalRead(inter_debrayage); // Routine de relance du tracteur en marche avant
if ( Etat_inter_debrayage == LOW ) {
for ( int i=0; i<2; i++){
digitalWrite(Relais_electro_frein, LOW);
analogWrite(Valeur_canal_A, 55);
analogWrite(Valeur_canal_B, 200);
analogWrite(Valeur_canal_A, 85);
analogWrite(Valeur_canal_B, 170);
analogWrite(Valeur_canal_A, 115);
analogWrite(Valeur_canal_B, 140);
analogWrite(Valeur_canal_A, 150);
analogWrite(Valeur_canal_B, 155);
analogWrite(Valeur_canal_A, 190);
analogWrite(Valeur_canal_B, 65);
}
} else {
}
if ( Etat_inter_debrayage == HIGH ) {
for ( int i=0; i<2; i++){
digitalWrite(Relais_electro_frein, HIGH);
analogWrite(Valeur_canal_A, 190);
analogWrite(Valeur_canal_B, 65);
analogWrite(Valeur_canal_A, 150);
analogWrite(Valeur_canal_B, 155);
analogWrite(Valeur_canal_A, 115);
analogWrite(Valeur_canal_B, 140);
analogWrite(Valeur_canal_A, 85);
analogWrite(Valeur_canal_B, 170);
analogWrite(Valeur_canal_A, 55);
analogWrite(Valeur_canal_B, 200);
}
}
}
Après essai, ça ne fonctionne pas, comment voyez vous la syntaxe des boucles for
pour que la comparaison fonctionne une seul fois et s'arrête tant que l'on ne change pas de condition ?
Et es ce que la valeur de i++
revient à zéro après plusieurs appuis sur le bouton ?
Merci par avance pour votre aide.
Ludo