/*================ Huit boutons sur une voie avec mémorisation d’un bouton à une action =====================  
Nous trouvons un cavalier appelé (Mode_programmation)  sur le pin 12 et le GND
Le récepteur sur le pin 11
Les huit leds sur les pins  2,3,4,5,6,7,8,9
INITIALISATION
•  Ne pas mettre le cavalier
• Allumer l’émetteur 
• Allumer le récepteur (le led_1 clignote longuement, puis le clignotement cesse, toutes les leds restent éteintes
• Appuyer  brièvement sur le bouton_1 du clavier (la led_1  s’allume) 
• Appuyer  brièvement sur le bouton_2 du clavier (la led_2  s’allume) 
• Appuyer  brièvement sur le bouton_3 du clavier (la led_3  s’allume) 
• Appuyer  brièvement sur le bouton_4 du clavier (la led_4  s’allume) 
• Appuyer  brièvement sur le bouton_5 du clavier (la led_5  s’allume) 
• Appuyer  brièvement sur le bouton_6 du clavier (la led_6  s’allume) 
• Appuyer  brièvement sur le bouton_7 du clavier (la led_7  s’allume) 
• Appuyer  brièvement sur le bouton_8 du clavier (la led_8  s’allume) 
• Toutes les leds sont allumées, l’initialisation est terminée
• Eteindre le récepteur


FONCTIONNEMENT

• Mettre le cavalier en place
• Allumer l’émetteur
• Allumer le récepteur

REMARQUES 
les leds se programment successivement  dans l'ordre 1,2,3,4,5,6,7,8. mais nous ne sommes pas obligé d'appuyer successivement sur les boutons dans l'ordre 1,2,3,4,5,6,7,8. si par exemple on appuie dans cet ordre 4,2,1,3,5,6,7,8 alors la led_1 sera affectée au bouton_4. la led_2 au bouton_2. la led_3 au bouton_1 etc...
le problème du programme. si nous nous sommes trompé il faut tout recommencer
==============================================================================================
Avec la librairie  DYPlayerArduino en mode UART on jouera chaque morceau correspondant a un appui bouton (PlaySoundByNumber.)
rx/tx pin 0 et 1
===============================================================================================*/


#include <Arduino.h>
#include "DYPlayerArduino.h"
// Initialise the player, it defaults to using Serial.
DY::Player player;

#include <EEPROM.h>  // Appel de la  librairie avr /eeprom 
#define signal                   11 
#define Mode_programmation       12 // Ici est connecté le cavalier
int etatsortie =LOW;            // variable d'état de la LED
int led[] = {2,3,4,5,6,7,8,9}, Execution[8], x[8], val[8];
/******************************************************************************************************
/    La ligne suivante   "int choix[] = {1,1,1,1,0,0,0,0};"    Défini le mode de sortie des huit leds /
/    (1) type télé rupteur  un appui allume la led un deuxième appui éteint la led                    /
/        Dans notre exemple  c’est le cas des 4 premiers boutons                                       /
/    (0) Type bouton poussoir un appui maintenu allume la led un lâché du bouton éteint la led         /
/        Dans notre exemple  c’est le cas des 4 derniers boutons                                       /
********************************************************************************************************/
int choix[] = {0,0,0,0,0,0,0,0};    
int plage_Execution = 30;           // Plage de l'Execution, ne pas descendre en dessous de 20 par securité  
int n, i,val1, val2, Execution1, programmation, z=0, neutre;
//==================================================================================
void setup()
{ 
   
  player.begin();
  player.setVolume(30); // 100% Volume
 pinMode(Mode_programmation, INPUT);  digitalWrite(Mode_programmation,HIGH);
 for ( n = 0; n < 8; n ++) { pinMode(led [n],OUTPUT); digitalWrite(led[n] ,etatsortie);}
 programmation = digitalRead(Mode_programmation);
 if (programmation == HIGH)     {  
 for ( i = 0; i < 20; i ++) { digitalWrite( led[z],HIGH); delay(30); digitalWrite(led[z],LOW); delay(30);}
}
 for ( n = 0; n < 8; n ++) {Execution[n] = 8* EEPROM.read (n); }
n=0;
}
//==================================================================================
void loop()
{ 
  if (programmation == HIGH) {  memorisation();}
  else {marche(); }
}
//==================================================================================
void memorisation(){
 delay(50);
 neutre = pulseIn(signal, HIGH); 
 delay(50);
 for( n =0; n < 8;n ++){ 
 val1 = pulseIn(signal, HIGH);
   if (val1 < neutre - 50 || val1 > neutre + 50) {
     val[n]= val1/8;  EEPROM.write ( n,val[n]); delay(20); digitalWrite(led [n],HIGH); delay(1000);  } 
 else {n = n-1;}
 }
programmation = LOW; delay(100000);
}
//==================================================================================
void marche(){
val1 = pulseIn(signal, HIGH);  delay(20);   val2 = pulseIn(signal, HIGH);
n = 0; test();   n = 1; test();   n = 2; test(); n = 3; test();
n = 4; test();   n = 5; test();   n = 6; test(); n = 7; test();
}
//----------------------------------- TEST ---------------------------------------------------------
void test(){
  if (choix[n] == 1){
     if (val1  > (Execution[n] - plage_Execution) && val1 < (Execution[n] + plage_Execution) &&
         val2  > (Execution[n] - plage_Execution) && val2 < (Execution[n] + plage_Execution)) { Action_1();  } 
}
  if (choix[n] == 0){
     if (val1  > (Execution[n] - plage_Execution) && val1 < (Execution[n] + plage_Execution) &&
         val2  > (Execution[n] - plage_Execution) && val2 < (Execution[n] + plage_Execution)) { Action_2();  }
        else { Action_3();} 
}
}
//----------------------------------- ACTION_1 ---------------------------------------------------------
void Action_1()
{  
   if (x[n] == HIGH) {digitalWrite(led[n], LOW);delay(1000);      x[n] = !x[n]; }
                else {digitalWrite(led[n], HIGH);  delay(1000);   x[n] = !x[n]; }                      
}
//----------------------------------- ACTION_2 ---------------------------------------------------------
void Action_2() {  { digitalWrite(led[n], HIGH); player.playSpecified(n+1); delay(50);}  }
//----------------------------------- ACTION_3 ---------------------------------------------------------
void Action_3() {  { digitalWrite(led[n], LOW);   }  }
//=========================== Fin du programme ====================================