Advertisement
scro2003

NEOPIXEL BEST PRATICES

Apr 26th, 2019
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.81 KB | None | 0 0
  1. /* Un programme de test de bande led NeoPixel.
  2.  
  3. // NEOPIXEL BEST PRATICES pour un fonctionnement plus fiable:
  4. // - Ajoutez 1000 uF CAPACITOR entre les connexions + et - de la bande NeoPixel.
  5. // - MINIMISER LA LONGUEUR DU CABLAGE entre la carte de microcontrôleur et le premier pixel.
  6. // - L'entrée DATA-IN de la bande NeoPixel doit passer par un RESISTOR 300-500 OHM.
  7. // - ÉVITER de connecter NeoPixels sur un circuit virtuel. Si vous devez, TOUJOURS
  8. // connecte GROUND (-) en premier, puis +, puis data.
  9. // - Lors de l'utilisation d'un microcontrôleur 3.3V avec une bande NeoPixel alimentée par 5V,
  10. // Un CONVERTISSEUR DE NIVEAU LOGIQUE sur la ligne de données est FORTEMENT RECOMMANDÉ.
  11. // (Ignorer ces informations peut fonctionner correctement sur votre workbench mais peut échouer sur le terrain)
  12. */
  13.  
  14. #include <Adafruit_NeoPixel.h>
  15. #ifdef __AVR__
  16.  #include <avr/power.h> // Requis pour le Trinket Adafruit 16 MHz
  17. #endif
  18.  
  19. /*// Quelle broche sur l'Arduino est connectée au NeoPixels?
  20. // Sur Trinket ou Gemma, nous suggérons de changer ceci en 1:*/
  21. #define LED_PIN    6
  22.  
  23. /* Combien de NeoPixels sont attachés à l'Arduino? */
  24. #define LED_COUNT 8
  25.  
  26. // Déclarez notre objet NeoPixel:
  27.  
  28. Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
  29. /*// Argument 1 = Nombre de pixels dans la bande NeoPixel
  30. // Argument 2 = Numéro de broche Arduino (la plupart sont valides)
  31. // Argument 3 = drapeaux de type pixel, additionnez-les si nécessaire:
  32. // NEO_KHZ800 flux binaire 800 KHz (la plupart des produits NeoPixel avec LEDs WS2812)
  33. // NEO_KHZ400 400 KHz (pixels FLORA classiques 'v1' (pas v2), pilotes WS2811)
  34. // NEO_GRB Les pixels sont câblés pour le flux binaire GRB (la plupart des produits NeoPixel).
  35. // NEO_RGB Les pixels sont câblés pour le flux binaire RVB (v1 pixels FLORA, pas v2)
  36. // NEO_RGBW Les pixels sont câblés pour le bitstream RGBW (produits NeoPixel RGBW)
  37. */
  38.  
  39. // Fonction setup () - s'exécute une fois au démarrage --------------------------------
  40.  
  41. void setup() {
  42.  /*// Ces lignes sont spécifiquement conçues pour prendre en charge l'Adafruit Trinket 5V 16 MHz.
  43.    // N'importe quel autre tableau, vous pouvez enlever cette partie (mais aucun mal en la laissant):*/
  44. #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  45.   clock_prescale_set(clock_div_1);
  46. #endif
  47.   // FIN du code spécifique à Trinket.
  48.  
  49.   strip.begin();           // INITIALIZE NeoPixel Strip Object (OBLIGATOIRE)
  50.   strip.show();            // Désactiver tous les pixels dès que possible
  51.   strip.setBrightness(50); // Réglez LUMINOSITÉ sur environ 1/5 (max = 255)
  52. }
  53.  
  54.  
  55. // Fonction loop () - tourne plusieurs fois tant que le tableau est allumé ---------------
  56.  
  57. void loop() {
  58.   /* Remplissez le long de la bande de différentes couleurs ...*/
  59.   colorWipe(strip.Color(255,   0,   0), 50); // Red
  60.   colorWipe(strip.Color(  0, 255,   0), 50); // Green
  61.   colorWipe(strip.Color(  0,   0, 255), 50); // Blue
  62.  
  63.   /* Faites un effet de théâtre dans différentes couleurs ...*/
  64.   theaterChase(strip.Color(127, 127, 127), 50); /* Blanc, moitié luminosité*/
  65.   theaterChase(strip.Color(127,   0,   0), 50); /* Rouge, moitié luminosité*/
  66.   theaterChase(strip.Color(  0,   0, 127), 50); /* Bleu, moitié luminosité*/
  67.  
  68.   rainbow(10);             /* Cycle arc-en-ciel qui coule sur toute la bande*/
  69.   theaterChaseRainbow(50); /* Variante de théâtreChase améliorée par Rainbow*/
  70. }
  71.  
  72.  
  73. // Quelques fonctions propres à la création d'effets animés -----------------
  74.  
  75. /*
  76. // Remplit une bande de pixels les uns après les autres avec une couleur. La bande n'est pas effacée
  77. // premier; quoi que ce soit là sera couvert pixel par pixel. Passer en couleur
  78. // (en tant que valeur 32 bits 'compactée', que vous pouvez obtenir en appelant
  79. // strip.Color (rouge, vert, bleu) comme indiqué dans la fonction loop () ci-dessus),
  80. // et un délai (en millisecondes) entre les pixels.*/
  81. void colorWipe(uint32_t color, int wait) {
  82.   for(int i=0; i<strip.numPixels(); i++) { /* Pour chaque pixel en bande ...*/
  83.     strip.setPixelColor(i, color);         /*  Définir la couleur du pixel (en RAM)*/
  84.     strip.show();                          /*  Mettre à jour la bande pour correspondre*/
  85.     delay(wait);                           /*  Pause un instant*/
  86.   }
  87. }
  88.  
  89. /* Lumières de poursuite de style chapiteau. Passer dans une couleur (valeur 32 bits,
  90. // a la strip.Color (r, g, b) comme mentionné ci-dessus), et un temps de retard (en ms)
  91. // entre les cadres.*/
  92. void theaterChase(uint32_t color, int wait) {
  93.   for(int a=0; a<10; a++) {  /* Répétez 10 fois ...*/
  94.     for(int b=0; b<3; b++) { /*  'b' compte de 0 à 2 ...*/
  95.       strip.clear();         /*   Définissez tous les pixels de la RAM sur 0 (désactivé)*/
  96.       /* "c" compte en partant de "b" jusqu'à la fin de la bande par pas de 3 ...*/
  97.       for(int c=b; c<strip.numPixels(); c += 3) {
  98.         strip.setPixelColor(c, color); /* Définit le pixel 'c' sur la valeur 'color'*/
  99.       }
  100.       strip.show(); /* Mettre à jour la bande avec le nouveau contenu*/
  101.       delay(wait);  /* Pause un instant*/
  102.     }
  103.   }
  104. }
  105.  
  106. /* Cycle arc-en-ciel sur toute la bande. Passer le temps de retard (en ms) entre les images.*/
  107. void rainbow(int wait) {
  108.    /* La teinte du premier pixel exécute 5 boucles complètes dans la roue chromatique.
  109.    // La roue chromatique a une plage de 65 536 mais cela ne pose pas de problème si nous la retournons, donc
  110.    // compte juste de 0 à 5 * 65536. Ajout de 256 à firstPixelHue à chaque fois
  111.    // signifie que nous ferons 5 * 65536/256 = 1280 passages dans cette boucle externe:*/
  112.   for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {
  113.     for(int i=0; i<strip.numPixels(); i++) { /* Pour chaque pixel en bande ...
  114.        // Décale la teinte de pixel d'un montant pour faire un tour complet du
  115.        // roue chromatique (plage de 65536) sur la longueur de la bande
  116.        // (étapes strip.numPixels ()):*/
  117.       int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
  118.        /* strip.ColorHSV () peut prendre 1 ou 3 arguments: une teinte (0 à 65535) ou
  119.        // éventuellement ajouter saturation et valeur (luminosité) (de 0 à 255).
  120.        // Nous n'utilisons ici que la variante de teinte à un seul argument. Le résultat
  121.        // est passé par strip.gamma32 () pour fournir des couleurs 'plus vraies'
  122.        // avant d'assigner à chaque pixel:*/
  123.       strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
  124.     }
  125.     strip.show(); /* Mettre à jour la bande avec le nouveau contenu*/
  126.     delay(wait);  /* Pause un instant*/
  127.   }
  128. }
  129.  
  130. /* Chapiteau de théâtre rehaussé d'arc-en-ciel. Passer le temps de retard (en ms) entre les images.*/
  131. void theaterChaseRainbow(int wait) {
  132.   int firstPixelHue = 0;     /* Le premier pixel commence au rouge (teinte 0)*/
  133.   for(int a=0; a<30; a++) {  /* Répétez 30 fois ...*/
  134.     for(int b=0; b<3; b++) { /*  'b' compte de 0 à 2 ...*/
  135.       strip.clear();         /*   Définissez tous les pixels de la RAM sur 0 (désactivé)
  136.       // 'c' compte en partant de 'b' jusqu'à la fin de la bande par incréments de 3 ...*/
  137.       for(int c=b; c<strip.numPixels(); c += 3) {
  138.         /* la teinte du pixel 'c' est compensée par un montant pour en faire un plein
  139.         // révolution de la roue chromatique (gamme 65536) sur la longueur
  140.         // de la bande (strip.numPixels() steps):*/
  141.         int      hue   = firstPixelHue + c * 65536L / strip.numPixels();
  142.         uint32_t color = strip.gamma32(strip.ColorHSV(hue)); /* teinte -> RVB*/
  143.         strip.setPixelColor(c, color); /* Définit le pixel 'c' sur la valeur 'color'*/
  144.       }
  145.       strip.show();                /* Mettre à jour la bande avec le nouveau contenu*/
  146.       delay(wait);                 /* Pause un instant*/
  147.       firstPixelHue += 65536 / 90; /* Un cycle de roue chromatique sur 90 images*/
  148.     }
  149.   }
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement