Advertisement
claudiusmarius

AnimationsLumineuses01_2023

Sep 28th, 2023
868
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.10 KB | None | 0 0
  1. // ATTENTION SOIGNER LE DECOUPLAGE SINON ALEAS POSSIBLES
  2.   // By Claude DUFOURMONT YouTube
  3.   #include <Adafruit_NeoPixel.h>
  4.   #include <initializer_list>                   // Inclut la bibliothèque pour utiliser des listes d'initialisation
  5.  
  6.   // --------------------------------------------------------------------------------------------------------------------------------------------------------------
  7.   // La bibliothèque <initializer_list> est utilisée pour travailler avec des listes d'initialisation en C++.
  8.   // Une liste d'initialisation est une séquence de valeurs délimitée par des accolades {}.
  9.   // Elle est souvent utilisée pour initialiser des conteneurs ou des structures de données.
  10.   // Dans ce code, cette bibliothèque peut être utilisée pour initialiser des objets ou des variables avec une liste de valeurs spécifiques.
  11.   // Elle est incluse au début du code pour que l'on puisse l'utiliser ultérieurement dans le programme
  12.   // --------------------------------------------------------------------------------------------------------------------------------------------------------------
  13.  
  14.   #define BrocheNeopixel01 7
  15.   #define BrocheNeopixel02 8
  16.   #define BrocheBuzzer A6 // Broche du buzzer
  17.   #define BrochePotarSelection A3
  18.  
  19.   #define NLed01 8                              // Nbre de Leds Barette
  20.   #define NLed02 25                             // Nbre de Leds Matrice
  21.  
  22.   #define Luminosite01 20                       // Luminosité Barette (de 0 à 255)
  23.   #define Luminosite02 6                        // Lumunosité Matrice (de 0 à 255)
  24.  
  25.   #define NCouleurs01 14                        // Nombre de couleurs (RGB) pour les cercles de l'Animation01                      
  26.  
  27.   Adafruit_NeoPixel Strip01(NLed01, BrocheNeopixel01, NEO_GRB + NEO_KHZ800);  // Création de l'objet Adafruit_NeoPixel 01 (Barette de 8 Leds)
  28.   Adafruit_NeoPixel Strip02(NLed02, BrocheNeopixel02, NEO_GRB + NEO_KHZ800);  // Création de l'objet Adafruit_NeoPixel 02 (Matrice de 5X5 Leds)
  29.  
  30.   // ===============================Définition des couleurs en RGB ici (par exemple, Rouge, Vert, Bleu)============================================================
  31.   int CouleurCercle[NCouleurs01][14] =            
  32.   {
  33.   {200, 0, 0},   // Rouge
  34.   {10, 0, 0},
  35.   {0, 255, 0},   // Vert
  36.   {0, 10, 0},
  37.   {0, 0, 255},    // Bleu
  38.   {0, 0, 10},
  39.   {200, 200, 0},  // Jaune
  40.   {10, 10, 0},
  41.   {0, 0, 0},
  42.   {200, 0, 200},
  43.   {10, 0, 10},
  44.   {0, 200, 200},
  45.   {0, 10, 10},
  46.   {180, 180, 180} // Blanc
  47.   };
  48.   // ==============================================================================================================================================================
  49.  
  50.   int ValeurAnalogiquePotar;                            // Valeur analogique en provenance du curseur du potentiomètre (de 0 à 1023 points)
  51.  
  52.   unsigned long Time00 = 500;                           // Temps d'enchainement Animation00 (ms)
  53.   unsigned long Time01 = 60;                            // Temps d'enchainement Animation01(ms)
  54.  
  55.   unsigned long TempsPrecedentAnimation = 0;            // Dernier temps de début de l'animation (valable pour l'Animation00 et  l'Animation01)        
  56.  
  57.   int animationStep = 0;                                // Première étape de l'Animation00 (10 étapes)
  58.  
  59.   // =============================================Définition de la position des Leds pour les 3 cercles============================================================
  60.   int PetitCercle[] = {12}; // LED centrale          
  61.   int CercleMoyen[] = {6, 7, 8, 11, 13, 16, 17, 18};
  62.   int GrandCercle[] = {0, 1, 2, 3, 4, 5, 9, 10, 14, 15, 19, 20, 21, 22, 23, 24};
  63.   // ==============================================================================================================================================================
  64.  
  65.   int CercleActuel = 0;                                 // Indice du cercle actuel (0: petit, 1: moyen, 2: grand)
  66.   int IndiceCouleur = 0;                                // Indice de la couleur actuelle (0: rouge, 1: vert, 2: bleu)
  67.  
  68.   int CouleursLed[NLed02][3];                           // Tableau pour stocker les couleurs actuelles de chaque LED
  69.  
  70.   void setup()
  71.   {
  72.   // ===========================================Initialisation de la matrice 5X5 avec les couleurs éteintes==================================================
  73.   for (int i = 0; i < NLed02; i++)
  74.   {
  75.   for (int j = 0; j < 3; j++)
  76.   {
  77.   CouleursLed[i][j] = 0;
  78.   }
  79.   }
  80.   analogReadResolution(10);                           // Paramètrage du Seeeduino XIAO en résolution 10 bits en lecture (0 à 1023 points)
  81.   pinMode(BrocheNeopixel01, OUTPUT);
  82.   pinMode(BrocheNeopixel02, OUTPUT);
  83.   pinMode(BrocheBuzzer, OUTPUT);
  84.  
  85.   Strip01.begin();                                    // Initialisation de la barette Néopixel  de 8 Leds
  86.   Strip01.setBrightness(Luminosite01);                
  87.  
  88.   Strip02.begin();                                    // Initialisation de la matrice Néopixel  de 5X5 Leds
  89.   Strip02.setBrightness(Luminosite02);
  90.  
  91.   buzz(50, 10, 6);                                    // Actionnement du Buzzer au démarrage (Haut à 50 ms puis Bas à 10 ms) X 6
  92.   }
  93.  
  94.   void loop()
  95.   {
  96.   ValeurAnalogiquePotar = analogRead(BrochePotarSelection);  // Lecture en points de la tension sur le curseur du potentiomètre et affection et affectation à ValeurAnalogiquePotar
  97.   static int ZonePrecedente = -1;                           // Variable pour stocker la zone précédente
  98.  
  99.   int ZoneActuelle = -1;                                    // Variable pour stocker la zone actuelle
  100.  
  101.   // ===============Selon la valeur lue, détermination de la zone dans laquelle nous sommes et quel figure afficher ou quelle Animation effectuer==================
  102.   if (ValeurAnalogiquePotar < 128)
  103.   {
  104.   ZoneActuelle = 0;
  105.   figure00();
  106.   }
  107.   else if (ValeurAnalogiquePotar < 256)
  108.   {
  109.   ZoneActuelle = 1;
  110.   figure01();
  111.   }
  112.   else if (ValeurAnalogiquePotar < 384)
  113.   {
  114.   ZoneActuelle = 2;
  115.   figure02();
  116.   }
  117.   else if (ValeurAnalogiquePotar < 512)
  118.   {
  119.   ZoneActuelle = 3;
  120.   figure03();
  121.   }
  122.   else if (ValeurAnalogiquePotar < 640)
  123.   {
  124.   ZoneActuelle = 4;
  125.   figure04();
  126.   }
  127.   else if (ValeurAnalogiquePotar < 768)
  128.   {
  129.   ZoneActuelle = 5;
  130.   figure05();
  131.   }
  132.   else if (ValeurAnalogiquePotar < 896)
  133.   {
  134.   ZoneActuelle = 6;
  135.   Animation00();
  136.   }
  137.   else
  138.   {
  139.   ZoneActuelle = 7;
  140.   Animation01();
  141.   }
  142.   // ===============================================================================================================================================================
  143.  
  144.   // ============================================Emission d'un bip seulement en cas de changement de zone=====================================================
  145.   if (ZoneActuelle != ZonePrecedente)
  146.   {
  147.   buzz(10, 2, 4);
  148.   Strip01.clear();
  149.   Strip01.setPixelColor(ZoneActuelle, 255, 255, 0);
  150.  
  151.   ZonePrecedente = ZoneActuelle;
  152.   }
  153.   Strip01.show();
  154.   Strip02.show();
  155.   }
  156.  
  157.   // =========================================================Fonctions pour les figures statiques==================================================================
  158.  
  159.   void figure00()
  160.   {
  161.   Strip02.clear();
  162.   Strip02.setPixelColor(12, 255, 0, 0);
  163.   }
  164.  
  165.   void figure01()
  166.   {
  167.   Strip02.clear();
  168.   for (int i : {6, 7, 8, 11, 13, 16, 17, 18})
  169.   {
  170.   Strip02.setPixelColor(i, 0, 255, 0);
  171.   }
  172.   }
  173.  
  174.   void figure02()
  175.   {
  176.   Strip02.clear();
  177.   for (int i : {0, 1, 2, 3, 4, 5, 9, 10, 14, 15, 19, 20, 21, 22, 23, 24})
  178.   {
  179.   Strip02.setPixelColor(i, 0, 0, 255);
  180.   }
  181.   }
  182.  
  183.   void figure03()
  184.   {
  185.   Strip02.clear();
  186.   Strip02.setPixelColor(12, 0, 0, 255);
  187.   }
  188.  
  189.   void figure04()
  190.   {
  191.   Strip02.clear();
  192.   for (int i : {6, 7, 8, 11, 13, 16, 17, 18})
  193.   {
  194.   Strip02.setPixelColor(i, 255, 0, 0);
  195.   }
  196.   }
  197.  
  198.   void figure05()
  199.   {
  200.   Strip02.clear();
  201.   for (int i : {0, 1, 2, 3, 4, 5, 9, 10, 14, 15, 19, 20, 21, 22, 23, 24})
  202.   {
  203.   Strip02.setPixelColor(i, 0, 255, 0);
  204.   }
  205.   }
  206.  
  207.   void figure06()
  208.   {
  209.   Strip02.clear();
  210.   for (int i = 0; i < NLed02; i++)
  211.   {
  212.   Strip02.setPixelColor(i, 0, 0, 255);
  213.   }
  214.   }
  215.  
  216.   void figure07()
  217.   {
  218.   Strip02.clear();
  219.   for (int i = 0; i < NLed02; i++)
  220.   {
  221.   Strip02.setPixelColor(i, 255, 255, 0);
  222.   }
  223.   }
  224.   // ==============================================================================================================================================================
  225.  
  226.  
  227.   // ===================================================Fonctions pour les Chiffres 0 à 9 =========================================================================
  228.   void Chiffre00()  
  229.   {
  230.   Strip02.clear();
  231.   for (int i : {0, 1, 2, 7, 9, 10, 12, 17, 19, 20, 21, 22})
  232.   //for (int i : {1, 2, 3, 6, 8, 11, 13, 16, 18, 21, 22, 23})
  233.   {
  234.   Strip02.setPixelColor(i, 190, 0, 0);
  235.   //Strip02.setPixelColor(i, 0, 255, 0);
  236.   //Strip02.setPixelColor(i, 0, 0, 255);
  237.   }
  238.   }
  239.  
  240.   void Chiffre01()
  241.   {
  242.   Strip02.clear();
  243.   //for (int i : {2, 7, 12, 17 , 22})
  244.   for (int i : {3, 6, 13, 16 , 23})
  245.   {
  246.   //Strip02.setPixelColor(i, 255, 0, 0);
  247.   Strip02.setPixelColor(i, 0, 210, 0);
  248.   //Strip02.setPixelColor(i, 0, 0, 255);
  249.   }
  250.   }
  251.  
  252.   void Chiffre02()  
  253.   {
  254.   Strip02.clear();
  255.   for (int i : {0, 1, 2, 7, 10, 11, 12, 19, 20, 21, 22})
  256.   //for (int i : {1, 2, 3, 6, 11, 12, 13, 18, 21, 22, 23})
  257.   {
  258.   //Strip02.setPixelColor(i, 255, 0, 0);
  259.   //Strip02.setPixelColor(i, 0, 255, 0);
  260.   Strip02.setPixelColor(i, 0, 0, 255);
  261.   }
  262.   }
  263.  
  264.   void Chiffre03()  
  265.   {
  266.   Strip02.clear();
  267.   //for (int i : {0, 1, 2, 7, 10, 11, 12, 17, 20, 21, 22})
  268.   for (int i : {1, 2, 3, 6, 11, 12, 13, 16, 21, 22, 23})
  269.   {
  270.   Strip02.setPixelColor(i, 190, 0, 0);
  271.   //Strip02.setPixelColor(i, 0, 255, 0);
  272.   //Strip02.setPixelColor(i, 0, 0, 255);
  273.   }
  274.   }
  275.  
  276.   void Chiffre04()  
  277.   {
  278.   Strip02.clear();
  279.   for (int i : {0, 7, 9, 10, 11, 12, 17, 22})
  280.   //for (int i : {1, 6, 8, 11, 12, 13, 16, 23})
  281.   {
  282.   //Strip02.setPixelColor(i, 255, 0, 0);
  283.   Strip02.setPixelColor(i, 0, 210, 0);
  284.   //Strip02.setPixelColor(i, 0, 0, 255);
  285.   }
  286.   }
  287.  
  288.   void Chiffre05()  
  289.   {
  290.   Strip02.clear();
  291.   //for (int i : {0, 1, 2, 9, 10, 11, 12, 17, 20, 21, 22})
  292.   for (int i : {1, 2, 3, 8, 11, 12, 13, 16, 21, 22, 23})
  293.   {
  294.   //Strip02.setPixelColor(i, 255, 0, 0);
  295.   //Strip02.setPixelColor(i, 0, 255, 0);
  296.   Strip02.setPixelColor(i, 0, 0, 255);
  297.   }
  298.   }
  299.  
  300.   void Chiffre06()  
  301.   {
  302.   Strip02.clear();
  303.   for (int i : {0, 1, 2, 9, 10, 11, 12, 17, 19, 20, 21, 22})
  304.   //for (int i : {1, 2, 3, 8, 11, 12, 13, 16, 18, 21, 22, 23})
  305.   {
  306.   Strip02.setPixelColor(i, 190, 0, 0);
  307.   //Strip02.setPixelColor(i, 0, 255, 0);
  308.   //Strip02.setPixelColor(i, 0, 0, 255);
  309.   }
  310.   }
  311.  
  312.   void Chiffre07()
  313.   {
  314.   Strip02.clear();
  315.   //for (int i : {0, 1, 2, 7, 12, 17 , 22})
  316.   for (int i : {1, 2, 3, 6, 13, 16 , 23})
  317.   {
  318.   //Strip02.setPixelColor(i, 255, 0, 0);
  319.   Strip02.setPixelColor(i, 0, 210, 0);
  320.   //Strip02.setPixelColor(i, 0, 0, 255);
  321.   }
  322.   }
  323.  
  324.   void Chiffre08()  
  325.   {
  326.   Strip02.clear();
  327.   for (int i : {0, 1, 2, 7, 9, 10, 11, 12, 17, 19, 20, 21, 22})
  328.   //for (int i : {1, 2, 3, 6, 8, 11, 12, 13, 16, 18, 21, 22, 23})
  329.   {
  330.   //Strip02.setPixelColor(i, 255, 0, 0);
  331.   //Strip02.setPixelColor(i, 0, 255, 0);
  332.   Strip02.setPixelColor(i, 0, 0, 255);
  333.   }
  334.   }
  335.  
  336.   void Chiffre09()  
  337.   {
  338.   Strip02.clear();
  339.   //for (int i : {0, 1, 2, 7, 9, 10, 11, 12, 17,20, 21, 22})
  340.   for (int i : {1, 2, 3, 6, 8, 11, 12, 13, 16, 21, 22, 23})
  341.   {
  342.   //Strip02.setPixelColor(i, 255, 0, 0);
  343.   //Strip02.setPixelColor(i, 0, 255, 0);
  344.   //Strip02.setPixelColor(i, 0, 0, 255);
  345.   Strip02.setPixelColor(i, 150, 150, 150);
  346.   }
  347.   }
  348.  
  349.   // =========================================================Fonctions pour les Animations===================================================================
  350.  
  351.   void Animation00()                                    // Animation de défilement de Chiffres
  352.  
  353.   // --------------------------------------------------------------------------------------------------------------------------------------------------------------
  354.   // La fonction Animation00 gère une animation de défilement de chiffres.
  355.   // Elle bascule entre différents chiffres (de 0 à 9) en fonction de la variable animationStep.
  356.   // À chaque étape, elle appelle une fonction spécifique (par exemple, Chiffre00, Chiffre01, etc.) pour afficher le chiffre correspondant sur votre matrice de LED.
  357.   // Le délai entre chaque chiffre est déterminé par la variable Time00. Lorsque l'animation est terminée, elle revient à zéro.
  358.   // --------------------------------------------------------------------------------------------------------------------------------------------------------------
  359.    
  360.   {
  361.   unsigned long TempsActuel = millis();
  362.   if (TempsActuel - TempsPrecedentAnimation >= Time00)  // Changement de chiffre à chaque fois que le temps écoulé de la présentation du chiffre dépasse ou est égal à Time00
  363.   {
  364.   TempsPrecedentAnimation = TempsActuel;                // On réactualise le dernier temps de début de l 'Animation
  365.   switch (animationStep)                                // On passe au Chiffre suivant
  366.   {
  367.   case 0:
  368.   Chiffre00();
  369.   break;
  370.   case 1:
  371.   Chiffre01();
  372.   break;
  373.   case 2:
  374.   Chiffre02();
  375.   break;
  376.   case 3:
  377.   Chiffre03();
  378.   break;
  379.   case 4:
  380.   Chiffre04();
  381.   break;
  382.   case 5:
  383.   Chiffre05();
  384.   break;
  385.   case 6:
  386.   Chiffre06();
  387.   break;
  388.   case 7:
  389.   Chiffre07();
  390.   break;
  391.   case 8:
  392.   Chiffre08();
  393.   break;
  394.   case 9:
  395.   Chiffre09();
  396.   break;
  397.   }
  398.  
  399.   animationStep = (animationStep + 1) % 10;           // On incrémente et si nous sommes à 10 c'est zéro
  400.   Strip02.show();                                     // Affichage du Chiffre                            
  401.   }
  402.   }
  403.  
  404.   void Animation01()                                  // Animation de défilement de Figures  
  405.  
  406.   // --------------------------------------------------------------------------------------------------------------------------------------------------------------
  407.   // La fonction Animation01 gère une animation de défilement de formes géométriques sur la matrice 5X5 LEDs.
  408.   // Elle alterne entre trois cercles différents (petit, moyen, grand) et applique une couleur spécifique à chaque LED dans le cercle en cours.
  409.   // Les délais entre les changements de cercles sont déterminés par la variable Time01.
  410.   // Elle utilise également une variable IndiceCouleur pour alterner entre différentes couleurs définies au préalable dans le tableau CouleurCercle.
  411.   // --------------------------------------------------------------------------------------------------------------------------------------------------------------
  412.   {
  413.   unsigned long TempsActuel = millis();
  414.   if (TempsActuel - TempsPrecedentAnimation >= Time01)
  415.   {
  416.   TempsPrecedentAnimation = TempsActuel;
  417.   Strip02.clear();
  418.  
  419.  
  420.   // .................................................Allumage du cercle actuel avec la couleur actuelle.............................................................
  421.   int* LedsActuelles;                                     // Tableau des LEDs pour le cercle actuel
  422.   int size;
  423.  
  424.   if (CercleActuel == 0)
  425.   {
  426.   LedsActuelles = PetitCercle;                            // Utilisation du tableau des LEDs pour le petit cercle
  427.   size = sizeof(PetitCercle) / sizeof(PetitCercle[0]);    // Calcul de la taille du petit cercle
  428.   }
  429.   else if (CercleActuel == 1)
  430.   {
  431.   LedsActuelles = CercleMoyen;                            // Utilisation du tableau des LEDs pour le cercle moyen
  432.   size = sizeof(CercleMoyen) / sizeof(CercleMoyen[0]);    // Calcul de la taille du cercle moyen
  433.   }
  434.   else
  435.   {
  436.   LedsActuelles = GrandCercle;                            // Utilisation du tableau des LEDs pour le grand cercle
  437.   size = sizeof(GrandCercle) / sizeof(GrandCercle[0]);    // Calcul de la taille du grand cercle
  438.   }
  439.  
  440.   for (int i = 0; i < size; i++)
  441.   {
  442.   int ledIndex = LedsActuelles[i];
  443.   for (int j = 0; j < 3; j++)
  444.   {
  445.   CouleursLed[ledIndex][j] = CouleurCercle[IndiceCouleur][j];
  446.   }
  447.   }
  448.  
  449.   // .....................................................Application des couleurs actuelles à la matrice..........................................................
  450.   for (int i = 0; i < NLed02; i++)
  451.   {
  452.   Strip02.setPixelColor(i, CouleursLed[i][0], CouleursLed[i][1], CouleursLed[i][2]);
  453.   }
  454.   Strip02.show();
  455.  
  456.   // ......................................................Passage au cercle suivant (petit, moyen, grand).........................................................
  457.   CercleActuel = (CercleActuel + 1) % 3;                     // Passage au cercle suivant tout en restant inférieur ou égal à 2 ( 0 à 2 -->3)
  458.  
  459.   // .....................................................Passage à la couleur suivante (rouge, vert, bleu)........................................................
  460.   if (CercleActuel == 0)
  461.   {
  462.   IndiceCouleur = (IndiceCouleur + 1) % NCouleurs01;
  463.   }
  464.   }
  465.   }
  466.  
  467.  
  468.   // ==================================================================Fonction Buzzer==============================================================================
  469.  
  470.   void buzz (int TempsHIGH, int TempsLOW, int NombreCycles)
  471.   {
  472.   for (int x = 1; x <= NombreCycles; x++)
  473.   {
  474.   digitalWrite(BrocheBuzzer, HIGH);
  475.   delay (TempsHIGH);
  476.   digitalWrite(BrocheBuzzer, LOW);
  477.   delay (TempsLOW);
  478.   }
  479.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement