/*=================== Lecture 2 voies avec moyennage valeurs====================

   Programme de moyennage par: http://p.loussouarn.free.fr/
   Récepteur signal Voie1 sur le pin 2
   Récepteur signal Voie 2 sur le pin 3
   Correction du bruit en fonction du taux de moyennage pour lecture signal stable
   lecture sur moniteur série
===========================================================================
*/






#define signal1                      2 // Signal radio Voie 1 attaché au Pin 2
#define signal2                      3 // Signal radio Voie 2 attaché au Pin 3

#define REFRESH_PERIOD_MS 20           // Période de rafraîchissement

#define MOY_SUR_1_VALEURS       0
#define MOY_SUR_2_VALEURS       1
#define MOY_SUR_4_VALEURS       2
#define MOY_SUR_8_VALEURS       3
#define MOY_SUR_16_VALEURS      4
#define MOY_SUR_32_VALEURS      5

#define TAUX_DE_MOYENNAGE       MOY_SUR_4_VALEURS  /* Choisir ici le taux de moyennage parmi les valeurs precedentes possibles listees ci-dessus */

#define MOYENNE(Valeur_A_Moyenner,DerniereValeurRecue,TauxDeMoyEnPuissanceDeDeux)  Valeur_A_Moyenner=((((Valeur_A_Moyenner)*((1<<(TauxDeMoyEnPuissanceDeDeux))-1)+(DerniereValeurRecue))/(1<<(TauxDeMoyEnPuissanceDeDeux)))+(TauxDeMoyEnPuissanceDeDeux-1))


int val1;                         // Variable pour stocker la valeur du signal Voie 1
int val2;                         // Variable pour stocker la valeur du signal Voie 2
int mini = 1000;  
int maxi = 2000;  


void setup()
{
 
  Serial.begin(9600);  // Vitesse de transmission
  
  pinMode(signal1, INPUT); // Déclare signal 1 comme une entrée
  pinMode(signal2, INPUT); // Déclare signal 2 comme une entrée
 
}

void loop()
{

  unsigned long currentMillis = millis();                         // Affectation du compteur de temps




#define TAUX_DE_MOYENNAGE       MOY_SUR_4_VALEURS                // Choix du taux de moyennage
  static int ValMoyennee1;                                       // Valeur à moyennée
  val1 = pulseIn(signal1, HIGH);       // stock la valeur du signal dans val1  
  val1 = map(val1, mini, maxi, 1000, 2000);
  val1 = constrain(val1, 1000, 2000);       // pour contraindre la valeur du signal entre 1000 et 2000
  ValMoyennee1 = MOYENNE(ValMoyennee1, val1, TAUX_DE_MOYENNAGE); // Correction du bruit en fonction du taux de moyennage
  val1 = ValMoyennee1;
  
//---------------------------------------------------------------------------------- 
#define TAUX_DE_MOYENNAGE       MOY_SUR_4_VALEURS                // Choix du taux de moyennage
  static int ValMoyennee2;                                       // Valeur à moyennée
  val2 = pulseIn(signal2, HIGH);       // stock la valeur du signal dans val1  
  val2 = map(val2, mini, maxi, 1000, 2000);
  val2 = constrain(val2, 1000, 2000);       // pour contraindre la valeur du signal entre 1000 et 2000
  ValMoyennee2 = MOYENNE(ValMoyennee2, val2, TAUX_DE_MOYENNAGE); // Correction du bruit en fonction du taux de moyennage
  val2 = ValMoyennee2;

//---------------------------------------------------------------------------------- 
  Serial.print("valeur signal voie 1 = ");   
  Serial.println(val1);
  Serial.println();
  Serial.print("valeur signal voie 2 = ");   
  Serial.println(val2);
  Serial.println();
   delay (500); 
//---------------------------------------------------------------------------------- 
  
  


}
//=============================FIN DE PROGRAMME ===========================================