Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "IRremote.h" //On importe la librairie "IRremote".
- #include "FastLED.h" //On importe la librairie "FastLED".
- /**
- * Created by Théo "Feeps" Monnom on 26/07/2017.
- */
- #define IR_RECEIVER_PIN 2 //On définit le pin qui recevra les signaux pris par le récepteur infrarouge.
- #define DATA_PIN 3 //On définit le pin qui enverra les informations aux LEDS WS2812B.
- #define LED_TYPE WS2812B //On définit le type des leds.
- #define COLOR_ORDER RGB //On définit l'ordre des couleurs (RGB: Rouge - Vert - Bleu).
- #define NUM_LEDS 64 //On définit le nombre de leds.
- CRGB leds[NUM_LEDS]; //On définit le tableau de leds (Il servira à reprendre chaques leds une par une).
- IRrecv irrecv(IR_RECEIVER_PIN); //Cette objet recevra les signaux du "IR_RECEIVER_PIN".
- decode_results decodedSignal; //Cette objet reprend les signaux et les décodent.
- typedef void (*AnimationsList[])(); //On définit que le type 'AnimationList[]' contiendra des méthode de type 'void'.
- boolean enabled = true; //Tant que cette variable est à 'true', les leds seront allumées.
- uint8_t animationsSelector = 0; //Grâce à cette variable, nous pouvons sélectionner l'animation que l'on souhaite.
- uint8_t hue = 0; //La teinte, elle est constamment augmentée dans la boucle.
- uint8_t brightness = 96; //La luminiosité, par défaut à 96.
- int frames_per_second = 60; //Nombre d'images par seconde, par défaut à 60.
- //Cette méthode est appelée par Arduino au démarrage.
- void setup() {
- Serial.begin(9600); //Démarre le débit de communication à 9600 bauds
- //Ajoute les leds avec leur type, leur pin de communication, leur ordre de couleurs, et le nombre de leds.
- FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
- FastLED.setBrightness(brightness); //Ajuste la luminiosité par défaut.
- irrecv.enableIRIn(); //Active la réception des signaux.
- }
- //Grâce à cette liste, nous pouvons récupérer les animations et les exécuter dans la boucle.
- AnimationsList animations = { white, rainbow, randomPoints, sinelon };
- //La boucle principale.
- void loop() {
- FastLED.delay(1000 / frames_per_second); //On attend: une sec / le nombre de frames par seconde.
- manageAnimations(); //On appelle la méthode qui gère les animations
- while (!irrecv.isIdle()); //Attend tant que les signaux détectés ne sont pas reconnus.
- if (irrecv.decode(&decodedSignal)) { //Décode le signal et le place dans la variable 'decodedSignal'
- Serial.println(decodedSignal.value, HEX); //Print le signal décodé en HEXADECIMAL.
- detectButtons(); //Appele la méthode 'detectButtons' qui permet de reconnaître le signal décodé.
- irrecv.resume(); //Indique qu'il est prêt à recevoir le prochain signal.
- }
- FastLED.show(); //Envoie les données aux leds.
- }
- //Cette méthode gère les animations.
- void manageAnimations() {
- if (enabled) { //Si "allumé", il appelle la méthode sélectionnée
- animations[animationsSelector]();
- hue++; //Augmente la teinte pour le HSV
- } else { //Sinon, il éteint les LEDS
- black();
- }
- }
- //Cette méthode permet de sélectionner une des animations qui sont dans la liste.
- void setAnim(uint8_t num) {
- animationsSelector = num;
- Serial.print("Current animation: ");
- Serial.println(animationsSelector);
- }
- //Cette méthode permet de modifier la luminiosité.
- void setBright(uint8_t bright) {
- brightness = bright;
- FastLED.setBrightness(brightness);
- Serial.print("Current brightness: ");
- Serial.println(brightness);
- }
- //Cette méthode permet de modifier les fps (La vitesse à laquelle les animations se déroulent).
- void setFramesPerSecond(int fps) {
- frames_per_second = fps;
- if (frames_per_second <= 0) //Si les fps sont plus petit ou égal à 0, modifie la variable fps à 20.
- frames_per_second = 20;
- Serial.print("Current fps: ");
- Serial.println(frames_per_second);
- }
- //----------Les animations----------//
- /*
- * black n'est pas une animation il est appelée lorsque la variable 'enabled' est égal à 'false'
- * ou losqu'on a besoin d'éteindre les leds.
- */
- void black() {
- fadeToBlackBy(leds, NUM_LEDS, 20); //Eteint tout doucement les leds.
- }
- //White reste une animation...
- void white() {
- fill_solid(leds, NUM_LEDS, CRGB(255, 255, 255)); //Allume toutes les leds en blanc.
- }
- void rainbow() {
- fill_solid(leds, NUM_LEDS, CHSV(hue, 255, 255)); //Allume toutes les leds selon la teinte ('hue').
- }
- void randomPoints() {
- black(); //Appele la méthode 'black'
- //Reprend des leds aléatoires selon le nombre maximum de leds, et les allument selon la teinte additionnée d'un nombre aléatoire entre 0 et 32.
- leds[random8(NUM_LEDS)] += CHSV(hue + random8(32), 255, 255);
- }
- void sinelon() {
- black(); //Appele la méthode 'black'
- leds[beatsin16(13, 0, NUM_LEDS - 1)] += CHSV(hue, 255, 255); //Reprend chaque fois la led suivante d'une ligne et l'allume selon la teinte.
- }
- //----------------------------------//
- //Cette méthode reprend les signaux décodés et indique de quel bouton il sagit.
- void detectButtons() {
- Serial.print("Detected button: ");
- switch (decodedSignal.value) {
- case 0xE318261B:
- Serial.println("ON/OFF");
- enabled = !enabled; //Allume/Eteint les leds.
- break;
- case 0x511DBB:
- Serial.println("MODE");
- break;
- case 0xEE886D7F:
- Serial.println("MUTE");
- break;
- case 0x52A3D41F:
- Serial.println("PLAY/PAUSE");
- break;
- case 0xD7E84B1B:
- Serial.println("BACK");
- setFramesPerSecond(frames_per_second - 20); //Diminue la vitesse des animations.
- break;
- case 0x20FE4DBB:
- Serial.println("FORWARD");
- setFramesPerSecond(frames_per_second + 20); //Augmente la vitesse des animations.
- break;
- case 0xF076C13B:
- Serial.println("EQ");
- break;
- case 0x97483BFB:
- Serial.println("REPLAY");
- break;
- case 0xF0C41643:
- Serial.println("U/SD");
- break;
- case 0xA3C8EDDB:
- Serial.println("-");
- setBright(brightness - 20); //Diminue la luminiosité des leds.
- break;
- case 0xE5CFBD7F:
- Serial.println("+");
- setBright(brightness + 20); //Augmente la luminiosité des leds
- break;
- case 0xC101E57B:
- Serial.println("0");
- setAnim(0); //Sélectionne l'animation n°0
- break;
- case 0x9716BE3F:
- Serial.println("1");
- setAnim(1); //Sélectionne l'animation n°1
- break;
- case 0x3D9AE3F7:
- Serial.println("2");
- setAnim(2); //Sélectionne l'animation n°2
- break;
- case 0x6182021B:
- Serial.println("3");
- setAnim(3); //...
- break;
- case 0x8C22657B:
- Serial.println("4");
- setAnim(4);
- break;
- case 0x488F3CBB:
- Serial.println("5");
- setAnim(5);
- break;
- case 0x449E79F:
- Serial.println("6");
- setAnim(6);
- break;
- case 0x32C6FDF7:
- Serial.println("7");
- setAnim(7);
- break;
- case 0x1BC0157B:
- Serial.println("8");
- setAnim(8);
- break;
- case 0x3EC3FC1B:
- Serial.println("9");
- setAnim(9);
- break;
- }
- Serial.println("");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement