/*============================================== MIXAGE ===============================
      Ce programme pour Nano permet le mixage de deux voies. 
      Il pourra être utilisé pour commander deux servos ou deux variateurs identiques.  
 =====================================================================================*/
#include <Servo.h>                         // Appel de la librairie servo
Servo Variateur_D;                         // Déclare le variateur du moteur droit
Servo Variateur_G;                         // Déclare le variateur du moteur gauche
Servo Gouvernail;                          // Declare le gouvernail

#define Rx_Direction       4               // Déclare la variable recepteur direction
#define Rx_Acceleration    8               // Déclare la variable recepteur accelerateur

int valA, valB, valxA, valxB, diff ;       // Déclare les variables pour les servos 
int posmin = 45;                           // Déclare en degrés la position mini des servos
int posmax = 135;                          // Déclare en degrés la position maxi des servos
int neutre = 90;                           // Déclare en degrés la position neutre des servos


//======================================================================================
void setup() 
{ 
  pinMode(Rx_Direction, INPUT);            // la broche direction en entree
  pinMode(Rx_Acceleration, INPUT);         // la broche acceleration en entree
  Variateur_D.attach(5);                   // Attache le variateur droit 
  Variateur_G.attach(6);                   // Attache le variateur gauche  
  Gouvernail.attach(7);                    // Attache le servo de gouvernail
} 


//======================================================================================
void loop() 
{ 
  valxA = pulseIn(Rx_Direction, HIGH, 25000);       // Donne à la variable (valxA) la valeur de signal de direction
  valxB = pulseIn(Rx_Acceleration, HIGH, 25000);    // Donne à la variable (valxB) la valeur de signal de l accelerateur
  valxA = map(valxA, 1000, 2000, posmin, posmax);   // Calibre des valeurs de (valxA) pour le variateur droit
  valxB = map(valxB, 1000, 2000, posmin, posmax);   // Calibre des valeurs de (valxB) pour le variateur gauche
  diff = (valxB - neutre);                          // Calcul l'ecart entre les deux variateurs
  valA = valxA - diff;  valB = valxA + diff;        // Calcul la position des servos
  valA=constrain(valA, posmin, posmax);             // Calibre les valeurs pour le variateur dans la plage acceptée
  valB=constrain(valB, posmin, posmax);             // Calibre les valeurs pour le variateur dans la plage acceptée
//---------------------------------------------------------------------------------- 
  Variateur_D.write(valA);                   // Positionne le variateur du moteur droit 
  Variateur_G.write(valB);                   // Positionne le variateur du moteur gauche  
  Gouvernail.write(valxA);                   // Positionne le servo de gouvernail
 } 
//===========================================FIN DU PROGRAMME ==================================