#include <FastLED.h>


#define NUM_LEDS 10
#define DATA_PIN 5
const int BUTTON_PIN = 3;
#define PIN_AUDIO      6


int win_music[] = {
  2637, 2637, 0, 2637, 
  0, 2093, 2637, 0,
  3136    
};


CRGB leds[NUM_LEDS];

   int i;
   int j;
   bool valeurBouton = digitalRead(BUTTON_PIN);

void setup() { 

    Serial.begin(9600);
    FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);  
    pinMode(BUTTON_PIN, INPUT_PULLUP);
    FastLED.setBrightness(40);
    attachInterrupt (digitalPinToInterrupt(BUTTON_PIN), bloc_annule, false); // Défini l'interruption sur le bouton, renvoie vers la fonction annule, si le bouton centre est appuyé
}


void loop() { 

  fill_solid(leds, NUM_LEDS, CRGB::Black);
  FastLED.show();
  
  fill_solid(leds, NUM_LEDS, CRGB::Blue);
    
      while (i<= 9){
        
        leds[i] = CRGB::Red;
        FastLED.show();
        delay(18000);

if (BUTTON_PIN == false) { // si l'état du bouton est appuyé alors :
  i=9; // Définir i à 0
  bloc_annule(); // aller à la fonction
}

        if (i >= 9){
          rainbow();
        }       
         i++;
      } 
}

void bloc_annule() { // Fonction bloc_annule 
    i=9; // Définir g à 20 ce qui cloture la boucle cligno_g 
  }

void rainbow(){
  for (int j = 9; j < 255; j++) {
    for (int h = 0; h < NUM_LEDS; h++) {
      leds[h] = CHSV(h - (j * 2), 255, 100); 
    }
  
       tone(PIN_AUDIO, win_music,200);
               delay(230);
               noTone(PIN_AUDIO);
               
    FastLED.show();
    delay(100);  
  }
  i=0;
  loop ();
}
