// --- Programme Arduino Uno et Nano---
//

// --- Que fait ce programme ? ---
/* Produit un son type diesel */

// --- Fonctionnalités utilisées ---

// --- Circuit à réaliser ---
// Connecter Ampli audio sur la broche 3 (configurée en sortie)
// La voie du récepteur est connecté à la broche 5
//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...


#define potard2 A2 // Analog pin 2 pour le potard fréquence
#define potard1 A1 // Analog pin 1 pour le potard vitesse (potard ou prélèvement tension moteur au travers d'un pont redresseur)
// --- Inclusion des librairies utilisées ---

// --- Déclaration des constantes ---

// --- constantes des broches ---

const int Ampli = 3; //declaration constante de broche , sortie vers ampli
const int Signal = 5;    //declaration constante de broche , signal venant du récepteur


// --- Déclaration des variables globales ---

int val3;          // valeur du signal
int mini = 950;  // Mettre ici la valeur mini du signal
int maxi = 2050;  // Mettre ici la valeur du signal

int val2; // stocke la variable potard A2
int val1; // Stocke la variable potard A1
int i = 0, j = 0; // variables de boucle
int f; // fréquence du son
int e; // Vitesse moteur, signal du récepteur ou potard ou tension prise sur un pont redresseur en parallèle avec le moteur
int neutre = 1480;              // valeur du neutre, à définir selon radio.


// --- Initialisation des fonctionnalités utilisées ---

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

  // --- ici instructions à exécuter au démarrage ---

  pinMode(Ampli, OUTPUT); //met la broche en sortie
  pinMode(Signal, INPUT); //met la broche en entrée// fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop() { // debut de la fonction loop()

  // --- ici instructions à exécuter par le programme principal ---

  for (j = 0; j < 2; j++) {
    for (i = 0; i < 2; i++) {
      val2 = analogRead(potard2);
      val2 = map(val2, 0, 1023, 50, 1000);

      f = val2;

      val1 = analogRead(potard1);
      val1 = map(val1, 0, 1023, 18, 2);

      val3 = 0;
      val3 = pulseIn(Signal, HIGH), 30000; //Lire pulseIn et de le stocker en tant que val3


      if ( val3 > neutre ) val3 = map(val3, mini, maxi, 1000, 2000);
      if ( val3 < neutre && val3 > 50) val3 = map(val3, mini, maxi, 2000, 1000);



      val3 = map(val3, 1450, 2000, 18, 2);

      e = val3;   // ici, il faut choisir entre val3 ou val1 selon le choix de lecture vitesse: signal radio ou potard(ou prélèvement tension moteur via redresseur.)

      tone(Ampli, f);
      delay(3);
      noTone(Ampli);
      delay(1);
      tone(Ampli, f);
      delay(2);
      noTone(Ampli);
      delay(2);
      tone(Ampli, f);
      delay(1);
      noTone(Ampli);
      delay(e);
      tone(Ampli, f);
      delay(3);
      noTone(Ampli);
      delay(1);
      tone(Ampli, f);
      delay(2);
      noTone(Ampli);
      delay(2);
      tone(Ampli, f);
      delay(1);
      noTone(Ampli);
      delay(e * 3);
    } // fin boucle for
    delay(20);
  }




} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

// --- Fin programme ---

// --- Mémo instructions ---

// tone(broche, frequence, +/-duree); // produit son de fréquence indiquée sur la broche
// noTone(broche); // stoppe la production de son sur la broche
// à noter : une seule broche peut générer un son à la fois...