/*=========== Lecture 2voies proportionnelles pour piloter 4 relais ================
Les 2 manches au neutre à la mise en route ==> les 4 relais sont "off"
Pour les radios programmablles, débattements à 100%
Malheureusement les relais chinois que j'utilise fonctionne en logique inverse, donc relai appelé lorsque sortie Arduino = LOW
Donc ce programme est adapté en consequence (les sortie sont HIGH au repos)
Voie 1 en haut (v1h) une première fois ==>Relais 1 est "on"
Voie 1 en haut (v1h) une deuxième fois ==>Relais 1 est "off"
Voie 1 en bas (v1b) une première fois ==>Relais 2 est "on"
Voie 1 en bas (v1b) une deuxième fois ==>Relais 2 est "off"
Voie 2 à gauche (v2g) une première fois ==>Relais 3 est "on"
Voie 2 à gauche (v2g) une deuxième fois ==>Relais 3 est "off"
Voie 2 à droite(v2d) une première fois ==>Relais 4 est "on"
Voie 2 à droite(v2d) une deuxième fois ==>Relais 4 est "off"
========================================================================= */
int signal1 = 2; // Déclare le signal voie 1 sur le pin 2
int val1; // Valeur du signal voie 1
int comptv1h = 0; // Compteur passage v1h
int etatv1h = LOW; // L'état de la position voie 1 en haut
int memv1h = LOW; // La mémoire de l'état de la position voie 1 en haut
int comptv1b = 0; // Compteur passage v1h
int etatv1b = LOW; // L'état de la position voie 1 en bas
int memv1b = LOW; // La mémoire de l'état de la position voie 1 en bas
int signal2 = 3; // Déclare le signal voie 2 sur le pin 3
int val2; // Valeur du signal voie 2
int comptv2g = 0; // Compteur passage v2g
int etatv2g = LOW; // L'état de la position voie 2 à gauche
int memv2g = LOW; // La mémoire de l'état de la position voie 2 à gauche
int comptv2d = 0; // Compteur passage v2d
int etatv2d = LOW; // L'état de la position voie 2 à droite
int memv2d = LOW; // La mémoire de l'état de la position voie 2 à droite
int mini = 1000; // Valeur mini du signal
int maxi = 2000; // Valeur maxi du signal
const int rel1 = 4; // Relais 1 monté par voie 1 haute (v1h)
const int rel2 = 5; // Relais 2 monté par voie 1 basse (v1b)
const int rel3 = 6; // Relais 3 monté par voie 2 gauche (v2g)
const int rel4 = 7; // Relais 4 monté par voie 2 droite (v2d)
void setup()
{
pinMode(signal1, INPUT); // Déclare signal 1 comme une entrée
pinMode(signal2, INPUT); // Déclare signal 2 comme une entrée
pinMode(rel1, OUTPUT); // Déclare le pin 4 en sortie
pinMode(rel2, OUTPUT); // Déclare le pin 5 en sortie
pinMode(rel3, OUTPUT); // Déclare le pin 6 en sortie
pinMode(rel4, OUTPUT); // Déclare le pin 7 en sortie
digitalWrite(rel1, HIGH); // SORTIE4 (OFF)
digitalWrite(rel2, HIGH); // SORTIE5 (OFF)
digitalWrite(rel3, HIGH); // SORTIE6 (OFF)
digitalWrite(rel4, HIGH); // SORTIE7 (OFF)
}
void loop()
{
val1 = pulseIn(signal1, HIGH), 30000; //Lire signal voie1 et de le stocker en tant que val1
val1 = map(val1, mini, maxi, 1000, 2000); //Met en forme le signal entre 1000 et 2000
val1 = constrain(val1, 1000, 2000); //Contraint le signal entre 1000 et 2000
val2 = pulseIn(signal2, HIGH), 30000; //Lire signal voie 2 et de le stocker en tant que val2
val2 = map(val2, mini, maxi, 1000, 2000); //Met en forme le signal entre 1000 et 2000
val2 = constrain(val2, 1000, 2000); //Contraint le signal entre 1000 et 2000
//----------------------------------------------------------------------------------
// TRAITEMENT SIGNAL VOIE 1, POINT HAUT
//----------------------------------------------------------------------------------
// Si le signal voie 1 à sa valeur haute >1900, on passe son état à HIGH
if ((val1 > 1900) && (val1 < 2001)) // Voie1 en haut
{
etatv1h = HIGH; //on passe l'état voie 1 en haut à HIGH
}
else
{
etatv1h = LOW; //Sinon, on passe l'état voie 1 en haut à LOW
}
//----------------------------------------------------------------------------------
if((etatv1h != memv1h) && (etatv1h == HIGH) && (comptv1h == 0)) // Si le signal voie 1 haute a un état différent de celui enregistré et que cet état est "haut" + compteur=0
{
comptv1h = 1; // on passe le compteur à 1
memv1h = etatv1h; // on enregistre en mémoire l'état de la position voie 1 en haut pour le tour suivant
digitalWrite(rel1, LOW); // relais 1 passe à ON (logique inverse)
}
//----------------------------------------------------------------------------------
if((etatv1h != memv1h) && (etatv1h == LOW) && (comptv1h == 1)) // Si le signal voie 1 haute a un état différent de celui enregistré et que cet état est "LOW" + compteur=1 (on à quitté le point haut)
{
memv1h = 0; // on enregistre en mémoire l'état de la position voie 1 pour le tour suivant
comptv1h = 2; // on passe le compteur à 2
}
//----------------------------------------------------------------------------------
if((etatv1h != memv1h) && (etatv1h == HIGH) && (comptv1h == 2)) // Si le signal voie 1 haute a un état différent de celui enregistré et que cet état est "haut" + compteur=2 (deuxième tour)
{
memv1h = etatv1h; // on enregistre en mémoire l'état de la position voie 1 en haut pour le tour suivant
comptv1h = 3; // on passe le compteur à 3
digitalWrite(rel1, HIGH); // relais 1 passe à OFF (logique inverse)
}
//----------------------------------------------------------------------------------
if((etatv1h != memv1h) && (etatv1h == LOW) && (comptv1h == 3)) // Si le signal voie 1 haute a un état différent de celui enregistré et que cet état est "LOW" + compteur=3 (on à quitté le point haut, deuxième tour)
{
memv1h = 0; // on enregistre en mémoire l'état de la position voie 1 pour le tour suivant
comptv1h = 0; // on passe le compteur à 0
}
//----------------------------------------------------------------------------------
// TRAITEMENT SIGNAL VOIE 1, POINT BAS
//----------------------------------------------------------------------------------
// Si le signal voie 1 à sa valeur basse <1100, on passe son état à HIGH
if ((val1 < 1100) && (val1 > 999)) // Voie1 en bas
{
etatv1b = HIGH; //on passe l'état voie 1 en bas à HIGH
}
else
{
etatv1b = LOW; //Sinon, on passe l'état voie 1 en bas à LOW
}
//----------------------------------------------------------------------------------
if((etatv1b != memv1b) && (etatv1b == HIGH) && (comptv1b == 0)) // Si le signal voie 1 basse a un état différent de celui enregistré et que cet état est "haut" + compteur=0
{
comptv1b = 1; // on passe le compteur à 1
memv1b = etatv1b; // on enregistre en mémoire l'état de la position voie 1 en bas pour le tour suivant
digitalWrite(rel2, LOW); // relais 2 passe à ON (logique inverse)
}
//----------------------------------------------------------------------------------
if((etatv1b != memv1b) && (etatv1b == LOW) && (comptv1b == 1)) // Si le signal voie 1 basse a un état différent de celui enregistré et que cet état est "LOW" + compteur=1 (on à quitté le point bas)
{
memv1b = 0; // on enregistre en mémoire l'état de la position voie 1 pour le tour suivant
comptv1b = 2; // on passe le compteur à 2
}
//----------------------------------------------------------------------------------
if((etatv1b != memv1b) && (etatv1b == HIGH) && (comptv1b == 2)) // Si le signal voie 1 basse a un état différent de celui enregistré et que cet état est "haut" + compteur=2 (deuxième tour)
{
memv1b = etatv1b; // on enregistre en mémoire l'état de la position voie 1 en bas pour le tour suivant
comptv1b = 3; // on passe le compteur à 3
digitalWrite(rel2, HIGH); // relais 2 passe à OFF (logique inverse)
}
//----------------------------------------------------------------------------------
if((etatv1b != memv1b) && (etatv1b == LOW) && (comptv1b == 3)) // Si le signal voie 1 basse a un état différent de celui enregistré et que cet état est "LOW" + compteur=3 (on à quitté le point bas, deuxième tour)
{
memv1b = 0; // on enregistre en mémoire l'état de la position voie 1 pour le tour suivant
comptv1b = 0; // on passe le compteur à 0
}
//----------------------------------------------------------------------------------
// TRAITEMENT SIGNAL VOIE 2, A GAUCHE
//----------------------------------------------------------------------------------
// Si le signal voie 2 à sa valeur haute >1900, on passe son état à HIGH
if ((val2 > 1900) && (val2 < 2001)) // Voie 2 à gauche
{
etatv2g = HIGH; //on passe l'état voie 2 à gauche à HIGH
}
else
{
etatv2g = LOW; //Sinon, on passe l'état voie 2 à gauche à LOW
}
//----------------------------------------------------------------------------------
if((etatv2g != memv2g) && (etatv2g == HIGH) && (comptv2g == 0)) // Si le signal Voie 2 à gauche a un état différent de celui enregistré et que cet état est "haut" + compteur=0
{
comptv2g = 1; // on passe le compteur à 1
memv2g = etatv2g; // on enregistre en mémoire l'état de la position Voie 2 à gauche pour le tour suivant
digitalWrite(rel3, LOW); // relais 3 passe à ON (logique inverse)
}
//----------------------------------------------------------------------------------
if((etatv2g != memv2g) && (etatv2g == LOW) && (comptv2g == 1)) // Si le signal Voie 2 à gauche a un état différent de celui enregistré et que cet état est "LOW" + compteur=1 (on a quitté le point gauche)
{
memv2g = 0; // on enregistre en mémoire l'état de la position Voie 2 pour le tour suivant
comptv2g = 2; // on passe le compteur à 2
}
//----------------------------------------------------------------------------------
if((etatv2g != memv2g) && (etatv2g == HIGH) && (comptv2g == 2)) // Si le signal Voie 2 à gauche a un état différent de celui enregistré et que cet état est "haut" + compteur=2 (deuxième tour)
{
memv2g = etatv2g; // on enregistre en mémoire l'état de la position Voie 2 à gauche pour le tour suivant
comptv2g = 3; // on passe le compteur à 3
digitalWrite(rel3, HIGH); // relais 3 passe à OFF (logique inverse)
}
//----------------------------------------------------------------------------------
if((etatv2g != memv2g) && (etatv2g == LOW) && (comptv2g == 3)) // Si le signal Voie 2 à gauche a un état différent de celui enregistré et que cet état est "LOW" + compteur=3 (on a quitté le point gauche, deuxième tour)
{
memv2g = 0; // on enregistre en mémoire l'état de la position Voie 2 pour le tour suivant
comptv2g = 0; // on passe le compteur à 0
}
//----------------------------------------------------------------------------------
// TRAITEMENT SIGNAL VOIE 2, POINT A DROITE
//----------------------------------------------------------------------------------
// Si le signal voie 2 à sa valeur basse <1100, on passe son état à HIGH
if ((val2 < 1100) && (val2 > 999)) // Voie 2 à droite
{
etatv2d = HIGH; //on passe l'état voie 2 à droite à HIGH
}
else
{
etatv2d = LOW; //Sinon, on passe l'état voie 2 à droite à LOW
}
//----------------------------------------------------------------------------------
if((etatv2d != memv2d) && (etatv2d == HIGH) && (comptv2d == 0)) // Si le signal Voie 2 à droite a un état différent de celui enregistré et que cet état est "haut" + compteur=0
{
comptv2d = 1; // on passe le compteur à 1
memv2d = etatv2d; // on enregistre en mémoire l'état de la position Voie 2 à droite pour le tour suivant
digitalWrite(rel4, LOW); // relais 4 passe à ON (logique inverse)
}
//----------------------------------------------------------------------------------
if((etatv2d != memv2d) && (etatv2d == LOW) && (comptv2d == 1)) // Si le signal Voie 2 à droite a un état différent de celui enregistré et que cet état est "LOW" + compteur=1 (on à quitté le point droit)
{
memv2d = 0; // on enregistre en mémoire l'état de la position voie 2 pour le tour suivant
comptv2d = 2; // on passe le compteur à 2
}
//----------------------------------------------------------------------------------
if((etatv2d != memv2d) && (etatv2d == HIGH) && (comptv2d == 2)) // Si le signal Voie 2 à droite a un état différent de celui enregistré et que cet état est "haut" + compteur=2 (deuxième tour)
{
memv2d = etatv2d; // on enregistre en mémoire l'état de la position Voie 2 à droite pour le tour suivant
comptv2d = 3; // on passe le compteur à 3
digitalWrite(rel4, HIGH); // relais 4 passe à OFF (logique inverse)
}
//----------------------------------------------------------------------------------
if((etatv2d != memv2d) && (etatv2d == LOW) && (comptv2d == 3)) // Si le signal Voie 2 à droite a un état différent de celui enregistré et que cet état est "LOW" + compteur=3 (on à quitté le point droit, deuxième tour)
{
memv2d = 0; // on enregistre en mémoire l'état de la position voie 1 pour le tour suivant
comptv2d = 0; // on passe le compteur à 0
}
//----------------------------------------------------------------------------------
}
|