--> Malicati
Le but : les vérins effectuent des cycles "marche" et "arrêt" de X secondes.
Mais, s'ils arrivent en butée "ouverture", ils doivent s'arrêter instantanément.
Or pour le moment, ils ne le font pas.
Ils ne stoppent qu'après avoir fait un cycle complet (marche +arrêt).
--> B@tto
Ta solution est peut être la bonne, mais je ne peux pas la tester.
En effet, le Code que j'ai mis est très épuré (c'était surtout pour voir le principe)
En réalité, les vérins fonctionnent par paires, il y à 4 vérins, et ils sont testés 2 par 2.
On teste :
- inclinaison avant -> vérin avant droit et vérin avant gauche
- inclinaison droite -> vérin avant droit et vérin arrière droit
- inclinaison arrière -> vérin arriéré droit et vérin arriéré gauche
- inclinaison gauche -> vérin arrière gauche et vérin avant gauche
Voila le code plus complet.
// SI CA PENCHE VERS L'AVANT ON ALIMENTE LES RELAIS "OUVERTURE" AVG ET AVD
if (NIVAVAR_REF_0 <= NIVAVAR_AV_M) { // si la condition est OK
digitalWrite(AVGRO, LOW); // j'alimente le relais AVGRO
digitalWrite(AVDRO, LOW); // j'alimente le relais AVDRO
testouverture (); // je teste si le verin est totalement ouvert
delay (3000); // délai 3 secondes lorsque l'on est en cycle normal
digitalWrite(AVGRO, HIGH); // je coupe le relais AVGRO
digitalWrite(AVDRO, HIGH); // je coupe le relais AVDRO
}
// SI CA PENCHE VERS LA DROITE ON ALIMENTE LES RELAIS "OUVERTURE" AVD ET ARD
if (NIVGADR_REF_0 >= NIVGADR_DR_M) {
digitalWrite(AVDRO, LOW);
digitalWrite(ARDRO, LOW);
testouverture ();
delay (3000);
digitalWrite(AVDRO, HIGH);
digitalWrite(ARDRO, HIGH);
}
// SI CA PENCHE VERS L'ARRIERE ON ALIMENTE LES RELAIS "OUVERTURE" ARG ET ARD
if (NIVAVAR_REF_0 >= NIVAVAR_AR_M) {
digitalWrite(ARGRO, LOW);
digitalWrite(ARDRO, LOW);
testouverture ();
delay (3000);
digitalWrite(ARGRO, HIGH);
digitalWrite(ARDRO, HIGH);
}
// SI CA PENCHE VERS LA GAUCHE ON ALIMENTE LES RELAIS "OUVERTURE" AVG ET ARG
if (NIVGADR_REF_0 <= NIVGADR_GA_M) {
digitalWrite(AVGRO, LOW);
digitalWrite(ARGRO, LOW);
testouverture ();
delay (3000);
digitalWrite(AVGRO, HIGH);
digitalWrite(ARGRO, HIGH);
}
--------------------------------------------------------------------
void testouverture () {
// ARRET VERIN AVANT GAUCHE SI COMPLETEMENT OUVERT
VAL_CVOAVG = digitalRead (CVOAVG);
if (VAL_CVOAVG == HIGH){
digitalWrite(AVGRO, HIGH);
}
// ARRET VERIN AVANT DROIT SI COMPLETEMENT OUVERT
VAL_CVOAVD = digitalRead (CVOAVD);
if (VAL_CVOAVD == HIGH){
digitalWrite(AVDRO, HIGH);
}
// ARRET VERIN ARRIERE GAUCHE SI COMPLETEMENT OUVERT
VAL_CVOARG = digitalRead (CVOARG);
if (VAL_CVOARG == HIGH){
digitalWrite(ARGRO, HIGH);
}
// ARRET VERIN ARRIERE DROIT SI COMPLETEMENT OUVERT
VAL_CVOARD = digitalRead (CVOARD);
if (VAL_CVOARD == HIGH){
digitalWrite(ARDRO, HIGH);
}
JP