//--------------------------------------------------------------------------------------------------------------------------//
//LumiZic   INIT
//--------------------------------------------------------------------------------------------------------------------------//

#include <Arduino.h> 
#include "DFRobotDFPlayerMini.h"

char First_Start=1;

int   volume        = 1;
//int   songNumber    = 1;
//int   songsCount    = 1;
bool  isPlaying     = true;
//bool  isNextPressed = false;
//unsigned long nextPressedTime;

void printDetail(uint8_t type, int value);
//void checkButtons();

//--------------------------------------------------------------------------------------------------------------------------//
//LumiColor   Wheel
//--------------------------------------------------------------------------------------------------------------------------//

CRGB Wheel(byte WheelPos) 
{
  // Renvoie une valeur de couleur basée sur une valeur d'entrée comprise entre 0 et 255
  if(WheelPos < 85)
    return CRGB(WheelPos * 3, 255 - WheelPos * 3, 0);
  else if(WheelPos < 170) {
    WheelPos -= 85;
    return CRGB(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
    WheelPos -= 170;
    return CRGB(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

//--------------------------------------------------------------------------------------------------------------------------//
//LumiZic    LumiZic
//--------------------------------------------------------------------------------------------------------------------------//

void LumiZic()
{
      
SerialBT.print("\n\\__Lecteur Musique___//");
SerialBT.print("\n\\__s -> Start/Pause__//");
SerialBT.print("\n\\__S -> STOP_________//");
SerialBT.print("\n\\__+ -> Volume-Up____//");
SerialBT.print("\n\\__-_-> Volume-Down__//");
SerialBT.print("\n\\__n -> Next_song____//");
SerialBT.print("\n\\__p -> Previous_s.__//");
SerialBT.print("\n\\__z -> Back Menu____//");

changement=1;
     
    while (changement == 1)                     
    {           
        {     
        int n, height;                                                                // read the audio signal and filter it
        
        n = analogRead(AUDIO_IN_PIN);            
        n = abs(1023 - n);                                                            // Limite fortement le bruit
        n = (n <= NOISE) ? 0 : abs(n - NOISE);                                        // Applique le filtre exponentiel pour lisser le signal bruité
        ADCFilter.Filter(n);
        lvl = ADCFilter.Current();                                                    // Trace les signaux brute par rapport aux signaux filtrés                        
        height = TOP * (lvl - minLvl) / (long)(maxLvl - minLvl);                      // Calcule le nombre de pixels en pourcentage de la plage
        if(height < 0L)                                                                     // Peut être fait dynamiquement en utilisant une moyenne courante des niveaux audio min/max
          {
            height = 0;
          }          
        else if(height > TOP) 
          {
            height = TOP;                                                             // Allumer/éteindre les leds correspondant au niveau
          }                         
        for(uint8_t i = 0; i < NUM_LEDS; i++) 
          {                                                                           // éteindre les LED au-dessus du niveau actuel
            if(i >= height) 
              {
                leds[i] = CRGB(0,0,0);
              }                                                                       // sinon, allumez-les !
            else 
              {
                leds[i] = Wheel( map( i, 0, NUM_LEDS-1, 30, 150 ) );
              }
          }
        FastLED.show();
        }
        
        
        
        if (myDFPlayer.available()) 
        {
        uint8_t type = myDFPlayer.readType();
        if(type == DFPlayerPlayFinished)
        {
              myDFPlayer.playFolder(1, 1);  
        }
        }
        
        ValeurReceptionBT =(char)SerialBT.read();
        
        if (  Serial.available()  )    { SerialBT.write(Serial.read()); }             // ---
        
        if (SerialBT.available()) 
        {
        
        SerialBT.print("Reception :");                                                
        SerialBT.println(ValeurReceptionBT);                                
        }
        
        Serial.write(SerialBT.read());                     
        //ValeurReceptionBT = changement;                                             
        
        if(ValeurReceptionBT == '+')
        {
        SerialBT.print("\n\\________++++________//");
        myDFPlayer.volumeUp();
        myDFPlayer.volumeUp();
        myDFPlayer.volumeUp();
        myDFPlayer.volumeUp();
        }
        
        if(ValeurReceptionBT == '-')
        {
        SerialBT.print("\n\\________----________//");
        myDFPlayer.volumeDown();
        myDFPlayer.volumeDown();
        myDFPlayer.volumeDown();
        myDFPlayer.volumeDown();
        }
        
        if(ValeurReceptionBT == 'S')
        {
        SerialBT.print("\n\\________STOP________//");
        myDFPlayer.stop();
        First_Start =1;    
        }
        
        if(ValeurReceptionBT == 'z')
        {
        SerialBT.print("\n\\________EXIT________//");
        changement=0;
        //SerialBT.print("\n\n\\________MENU________//");
        }
        
        if(ValeurReceptionBT == 'n')
        {
        myDFPlayer.next();
        SerialBT.print("\n\n\\________NEXT________//");
        }
        
        if(ValeurReceptionBT == 'p')
        {      
        myDFPlayer.previous();
        SerialBT.print("\n\n\\______PREVIOUS______//");
        }
        
        if(ValeurReceptionBT == 's')
        {
            isPlaying = !isPlaying;
            
            if(isPlaying == true)
              {
                 myDFPlayer.start();
              } 
            else 
              {
                myDFPlayer.pause();
                SerialBT.print("\n\\____Start/Pause_____//"); 
                delay(500);
                if(First_Start == 1)
                    {
                        myDFPlayer.start();
                        First_Start =0;
                    }   
              }
        }
    
    }
}
