claudiusmarius

ATiny85MusicBox

Jan 14th, 2022
867
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "Arduino.h"
  2.   #include <SoftwareSerial.h>
  3.   #include "DFRobotDFPlayerMini.h"
  4.   #include <math.h>
  5.  
  6.   #define TX 0
  7.   #define potPinSound A1
  8.   #define ANADossier A2
  9.   #define ANACommut A3
  10.  
  11.   int bb;
  12.   int bbb;
  13.  
  14.   int etatBPPause = LOW;
  15.   int etatBPStart = LOW;
  16.  
  17.   byte volumeLevel; //variable for holding volume level;
  18.   float a;
  19.  
  20.   float ratio;                                                    // Pour log
  21.   float ratio1024;                                                // Pour log
  22.  
  23.   // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  24.      
  25.    SoftwareSerial mySoftwareSerial(1,0); // RX, TX
  26.  
  27.   // Réaffectation des RX/TX pour ne pas avoir de problème lors du téléversement
  28.   // La résistance de 1K branchée en série sur le port n'a pas été installée, j'ai ajouté un adapteur de niveau du signal basé sur l'emploi d'une résistance en série avec une zener
  29.   // d'émetteur et collecteur relié au 3,3V de la Nano
  30.   // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  31.  
  32.   DFRobotDFPlayerMini myDFPlayer;
  33.  
  34.   void setup()
  35.   {
  36.   pinMode (TX, OUTPUT);                                                     // Ouverture du port TX
  37.  
  38.   double y = 1025;                                                          // Pour log
  39.   double LOG1025 = log10 (y);                                               // Pour log
  40.  
  41.   a= analogRead(potPinSound);                                               // Pour log
  42.   double x = a;                                                             // Pour log
  43.   double LOG10x = log10 (x);
  44.   ratio = log10 (x) / log10 (y);                                            // Pour log
  45.   ratio1024 = ratio*1024;                                                   // Pour log
  46.    
  47.   //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  48.   // ===================================== La première ligne de commande sert à déterminer le voulume linéairement : ======================================
  49.   //
  50.   // volumeLevel = map(analogRead(potPinSound), 0, 1023, 0, 30);
  51.   //
  52.   // ====================== La deuxième ligne de commande sert à déterminer le voulume avec correction logarithmique logicielle : =========================
  53.      volumeLevel = map(ratio1024, 0, 1023, 0, 30);
  54.   //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  55.  
  56.   mySoftwareSerial.begin(9600);
  57.   myDFPlayer.begin (mySoftwareSerial);
  58.   pinMode (TX, OUTPUT);
  59.  
  60.   // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  61.   // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++On sélectionne une piste et on la fait tourner en boucle++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  62.  
  63.   //-----------------------------------------------------------------------Sélection du dossier MP3----------------------------------------------------------
  64.   myDFPlayer.volume(volumeLevel);
  65.  
  66.   bbb = analogRead (ANADossier);
  67.   analogRead (ANADossier);                                                // Valeur ANA en provenance XIAO pour sélectionner un des trois dossiers
  68.   bbb = analogRead (ANADossier);
  69.   delay (10);
  70.      
  71.   if ( bbb < 341)                                                         // Chants de Noel
  72.   {myDFPlayer.loopFolder(01);}                                            // loop all mp3 files in folder SD:/01
  73.   delay (10);
  74.                                  
  75.   if (  bbb > 340 &&  bbb < 628)                                          // Comptines
  76.   {myDFPlayer.loopFolder(02);}                                            //loop all mp3 files in folder SD:/02
  77.   delay (10);  
  78.                                  
  79.   if (  bbb > 627 )                                                       // Chants d'oiseaux
  80.   {myDFPlayer.loopFolder(03);}                                            // loop all mp3 files in folder SD:/03
  81.   delay (10);
  82.    
  83.   //myDFPlayer.randomAll();
  84.   delay (2000);                                                           // Tempo pour nécessaire à l'éxécution de la sélection de la piste
  85.   pinMode (TX, INPUT_PULLUP);                                             // Une fois la commande DFPlayer passée, le port TX est positionné en haute impédance
  86.   // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  87.  
  88.   }
  89.  
  90.   void loop()
  91.   {
  92.   volumeLevel = 0;
  93.   TestANACommut ();
  94.   }
  95.  
  96.   void TestANACommut ()
  97.   {
  98.   bb = analogRead (ANACommut);
  99.   analogRead (ANACommut);
  100.   //delay (100);
  101.   delay (5);
  102.    
  103.   etatBPPause == LOW;
  104.   etatBPStart == LOW;  
  105.  
  106.   if (  (bb > 130) &&  (bb < 280) && etatBPPause == LOW)
  107.   {
  108.   delay (2);
  109.   etatBPPause = HIGH;
  110.   delay (2);
  111.   etatBPStart = LOW;
  112.   }
  113.    
  114.   if (  (bb > 320) &&  (bb < 500) && (etatBPStart == LOW))
  115.   {
  116.   delay (2);
  117.   etatBPStart = HIGH;
  118.   //delay (10);
  119.   delay (2);
  120.   etatBPPause = LOW;
  121.   }
  122.                          
  123.   if (etatBPPause == HIGH)
  124.   {
  125.   etatBPStart = LOW;
  126.   pinMode (TX, OUTPUT);
  127.   delay (10);
  128.   myDFPlayer.pause ();
  129.   delay (600);
  130.   pinMode (TX, INPUT_PULLUP);
  131.   delay (10);
  132.   }
  133.  
  134.   if (etatBPStart == HIGH)
  135.   {
  136.   etatBPPause = LOW;
  137.   pinMode (TX, OUTPUT);
  138.   delay (10);
  139.   myDFPlayer.start ();
  140.   delay (600);
  141.   pinMode (TX, INPUT_PULLUP);
  142.   delay (10);
  143.   }
  144.   }
  145.  
RAW Paste Data