Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.15 KB | None | 0 0
  1. #include "IRremote.h" //On importe la librairie "IRremote".
  2. #include "FastLED.h" //On importe la librairie "FastLED".
  3.  
  4. /**
  5. * Created by Théo "Feeps" Monnom on 26/07/2017.
  6. */
  7.  
  8. #define IR_RECEIVER_PIN 2 //On définit le pin qui recevra les signaux pris par le récepteur infrarouge.
  9. #define DATA_PIN 3 //On définit le pin qui enverra les informations aux LEDS WS2812B.
  10. #define LED_TYPE WS2812B //On définit le type des leds.
  11. #define COLOR_ORDER RGB //On définit l'ordre des couleurs (RGB: Rouge - Vert - Bleu).
  12. #define NUM_LEDS 64 //On définit le nombre de leds.
  13.  
  14. CRGB leds[NUM_LEDS]; //On définit le tableau de leds (Il servira à reprendre chaques leds une par une).
  15. IRrecv irrecv(IR_RECEIVER_PIN); //Cette objet recevra les signaux du "IR_RECEIVER_PIN".
  16. decode_results decodedSignal; //Cette objet reprend les signaux et les décodent.
  17. typedef void (*AnimationsList[])(); //On définit que le type 'AnimationList[]' contiendra des méthode de type 'void'.
  18. boolean enabled = true; //Tant que cette variable est à 'true', les leds seront allumées.
  19. uint8_t animationsSelector = 0; //Grâce à cette variable, nous pouvons sélectionner l'animation que l'on souhaite.
  20. uint8_t hue = 0; //La teinte, elle est constamment augmentée dans la boucle.
  21. uint8_t brightness = 96; //La luminiosité, par défaut à 96.
  22. int frames_per_second = 60; //Nombre d'images par seconde, par défaut à 60.
  23.  
  24. //Cette méthode est appelée par Arduino au démarrage.
  25. void setup() {
  26. Serial.begin(9600); //Démarre le débit de communication à 9600 bauds
  27. //Ajoute les leds avec leur type, leur pin de communication, leur ordre de couleurs, et le nombre de leds.
  28. FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  29. FastLED.setBrightness(brightness); //Ajuste la luminiosité par défaut.
  30. irrecv.enableIRIn(); //Active la réception des signaux.
  31. }
  32.  
  33. //Grâce à cette liste, nous pouvons récupérer les animations et les exécuter dans la boucle.
  34. AnimationsList animations = { white, rainbow, randomPoints, sinelon };
  35.  
  36. //La boucle principale.
  37. void loop() {
  38. FastLED.delay(1000 / frames_per_second); //On attend: une sec / le nombre de frames par seconde.
  39. manageAnimations(); //On appelle la méthode qui gère les animations
  40.  
  41. while (!irrecv.isIdle()); //Attend tant que les signaux détectés ne sont pas reconnus.
  42. if (irrecv.decode(&decodedSignal)) { //Décode le signal et le place dans la variable 'decodedSignal'
  43. Serial.println(decodedSignal.value, HEX); //Print le signal décodé en HEXADECIMAL.
  44. detectButtons(); //Appele la méthode 'detectButtons' qui permet de reconnaître le signal décodé.
  45. irrecv.resume(); //Indique qu'il est prêt à recevoir le prochain signal.
  46. }
  47. FastLED.show(); //Envoie les données aux leds.
  48. }
  49.  
  50. //Cette méthode gère les animations.
  51. void manageAnimations() {
  52. if (enabled) { //Si "allumé", il appelle la méthode sélectionnée
  53. animations[animationsSelector]();
  54. hue++; //Augmente la teinte pour le HSV
  55. } else { //Sinon, il éteint les LEDS
  56. black();
  57. }
  58. }
  59.  
  60. //Cette méthode permet de sélectionner une des animations qui sont dans la liste.
  61. void setAnim(uint8_t num) {
  62. animationsSelector = num;
  63. Serial.print("Current animation: ");
  64. Serial.println(animationsSelector);
  65. }
  66.  
  67. //Cette méthode permet de modifier la luminiosité.
  68. void setBright(uint8_t bright) {
  69. brightness = bright;
  70. FastLED.setBrightness(brightness);
  71. Serial.print("Current brightness: ");
  72. Serial.println(brightness);
  73. }
  74.  
  75. //Cette méthode permet de modifier les fps (La vitesse à laquelle les animations se déroulent).
  76. void setFramesPerSecond(int fps) {
  77. frames_per_second = fps;
  78. if (frames_per_second <= 0) //Si les fps sont plus petit ou égal à 0, modifie la variable fps à 20.
  79. frames_per_second = 20;
  80.  
  81. Serial.print("Current fps: ");
  82. Serial.println(frames_per_second);
  83. }
  84.  
  85. //----------Les animations----------//
  86.  
  87. /*
  88. * black n'est pas une animation il est appelée lorsque la variable 'enabled' est égal à 'false'
  89. * ou losqu'on a besoin d'éteindre les leds.
  90. */
  91. void black() {
  92. fadeToBlackBy(leds, NUM_LEDS, 20); //Eteint tout doucement les leds.
  93. }
  94.  
  95. //White reste une animation...
  96. void white() {
  97. fill_solid(leds, NUM_LEDS, CRGB(255, 255, 255)); //Allume toutes les leds en blanc.
  98. }
  99.  
  100. void rainbow() {
  101. fill_solid(leds, NUM_LEDS, CHSV(hue, 255, 255)); //Allume toutes les leds selon la teinte ('hue').
  102. }
  103.  
  104. void randomPoints() {
  105. black(); //Appele la méthode 'black'
  106. //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.
  107. leds[random8(NUM_LEDS)] += CHSV(hue + random8(32), 255, 255);
  108. }
  109.  
  110. void sinelon() {
  111. black(); //Appele la méthode 'black'
  112. 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.
  113. }
  114.  
  115. //----------------------------------//
  116.  
  117. //Cette méthode reprend les signaux décodés et indique de quel bouton il sagit.
  118. void detectButtons() {
  119. Serial.print("Detected button: ");
  120. switch (decodedSignal.value) {
  121. case 0xE318261B:
  122. Serial.println("ON/OFF");
  123.  
  124. enabled = !enabled; //Allume/Eteint les leds.
  125. break;
  126. case 0x511DBB:
  127. Serial.println("MODE");
  128. break;
  129. case 0xEE886D7F:
  130. Serial.println("MUTE");
  131. break;
  132. case 0x52A3D41F:
  133. Serial.println("PLAY/PAUSE");
  134. break;
  135. case 0xD7E84B1B:
  136. Serial.println("BACK");
  137.  
  138. setFramesPerSecond(frames_per_second - 20); //Diminue la vitesse des animations.
  139. break;
  140. case 0x20FE4DBB:
  141. Serial.println("FORWARD");
  142.  
  143. setFramesPerSecond(frames_per_second + 20); //Augmente la vitesse des animations.
  144. break;
  145. case 0xF076C13B:
  146. Serial.println("EQ");
  147. break;
  148. case 0x97483BFB:
  149. Serial.println("REPLAY");
  150. break;
  151. case 0xF0C41643:
  152. Serial.println("U/SD");
  153. break;
  154. case 0xA3C8EDDB:
  155. Serial.println("-");
  156.  
  157. setBright(brightness - 20); //Diminue la luminiosité des leds.
  158. break;
  159. case 0xE5CFBD7F:
  160. Serial.println("+");
  161.  
  162. setBright(brightness + 20); //Augmente la luminiosité des leds
  163. break;
  164. case 0xC101E57B:
  165. Serial.println("0");
  166. setAnim(0); //Sélectionne l'animation n°0
  167. break;
  168. case 0x9716BE3F:
  169. Serial.println("1");
  170. setAnim(1); //Sélectionne l'animation n°1
  171. break;
  172. case 0x3D9AE3F7:
  173. Serial.println("2");
  174. setAnim(2); //Sélectionne l'animation n°2
  175. break;
  176. case 0x6182021B:
  177. Serial.println("3");
  178. setAnim(3); //...
  179. break;
  180. case 0x8C22657B:
  181. Serial.println("4");
  182. setAnim(4);
  183. break;
  184. case 0x488F3CBB:
  185. Serial.println("5");
  186. setAnim(5);
  187. break;
  188. case 0x449E79F:
  189. Serial.println("6");
  190. setAnim(6);
  191. break;
  192. case 0x32C6FDF7:
  193. Serial.println("7");
  194. setAnim(7);
  195. break;
  196. case 0x1BC0157B:
  197. Serial.println("8");
  198. setAnim(8);
  199. break;
  200. case 0x3EC3FC1B:
  201. Serial.println("9");
  202. setAnim(9);
  203. break;
  204. }
  205. Serial.println("");
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement