IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Nom de ruban Led en paramètre


Sujet :

Arduino

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 239
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 239
    Points : 555
    Points
    555
    Par défaut Nom de ruban Led en paramètre
    Bonjour,

    Je cherche à allumer 4 Digits 7 segments qui sont en fait 4 rubans Led adressable, les digits sont des compteurs de 1 à 5 incrémentés par 2 BP + et - pour chaque Digit

    J'y suis arrivé mais avec 4 routines différentes, 1 avec chaque nom de ruban et pin de sortie

    Je voudrais réduire le code et ne faire qu'une routine, il faudrait donc que je passe le numéro de la pin en paramètre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const byte nombreDeSegments_Digit_Faute_Joueur_Local = sizeof Segments_Digit_Faute_Joueur_Local;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Adafruit_NeoPixel strip_Faute_Joueur_Local = Adafruit_NeoPixel(LEDS, 7, NEO_GRB + NEO_KHZ800);
    Ici, il faudrait donc pouvoir changer le 7 en variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strip_Faute_Joueur_Local.setPixelColor(Num_Led, 255, 165, 0);
    Je remplacerai strip_Faute_Joueur_Local en Strip_Digit puisque c'est 4 fois la même chose

    Est-ce clair ?

    Merci pour votre aide

    Merci

  2. #2
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 015
    Points : 2 350
    Points
    2 350
    Par défaut
    Bonsoir electrosat03
    Citation Envoyé par electrosat03 Voir le message
    Je voudrais réduire le code et ne faire qu'une routine, il faudrait donc que je passe le numéro de la pin en paramètre
    Une méthode consiste à mettre en tableau tes 4 rubans de LED adressables, exemple avec des NeoPixel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Adafruit_NeoPixel ledRuban[] =
    {
    	Adafruit_NeoPixel (20, 12, NEO_GRB + NEO_KHZ800),
    	Adafruit_NeoPixel (20, 11, NEO_GRB + NEO_KHZ800),
    	Adafruit_NeoPixel (20, 10, NEO_GRB + NEO_KHZ800),
    	Adafruit_NeoPixel (20,  9, NEO_GRB + NEO_KHZ800),
    };
    Puis, à l'usage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	ledRuban[0].begin();
    	ledRuban[1].begin();
     
    	ledRuban[0].setPixelColor(8, 0, 255, 0);
    	ledRuban[0].show();
     
    	ledRuban[1].setPixelColor(9, 0, 0, 255);
    	ledRuban[1].show();
    Puis tu crée une fonction où tu n'as plus qu'à passer l'index du ruban et les autres paramètres nécessaires à ce ruban.

    Cordialement
    jpbbricole

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 239
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 239
    Points : 555
    Points
    555
    Par défaut
    Salut jpbbricole,

    Je ne comprends pas la seconde partie du code, tu pourrais développer

    Merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 239
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 239
    Points : 555
    Points
    555
    Par défaut
    Bon, OK ça fonctionne MAIS

    Je dois quand même mettre ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LedRuban[2].setPixelColor(Num_Led, 0, 255, 0);
    Je voudrais donc pouvoir passer le chiffre [2] dans un paramètre afin de n'avoir qu'une procédure pour l'affichage du chiffre sur le digit désigné par l'appui du BP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    const byte nombreDeSegments_Digit_Faute_Joueur_Local = sizeof Segments_Digit_Faute_Joueur_Local;
    const byte nombreDeSegments_Digit_Faute_Equipe_Local = sizeof Segments_Digit_Faute_Equipe_Local;
    const byte nombreDeSegments_Digit_Faute_Joueur_Visiteur = sizeof Segments_Digit_Faute_Joueur_Visiteur;
    const byte nombreDeSegments_Digit_Faute_Equipe_Visiteur = sizeof Segments_Digit_Faute_Equipe_Visiteur;
     
    //Serial.println(nombreDeSegments);
    Adafruit_NeoPixel LedRuban[] =
    {
    Adafruit_NeoPixel(LEDS, 5, NEO_GRB + NEO_KHZ800),
    Adafruit_NeoPixel(LEDS, 6, NEO_GRB + NEO_KHZ800),  
    Adafruit_NeoPixel(LEDS, 7, NEO_GRB + NEO_KHZ800),
    Adafruit_NeoPixel(LEDS, 8, NEO_GRB + NEO_KHZ800),
    };
    Je ne comprends pas Merci pour ton aide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    // ***************** Affichage du chiffre sur le Digit Nommé *****************
    void afficher_Digit(const byte chiffre) // Procédure Afficher Digit Faute_Joueur_Local
    { 
      if (chiffre < nombreDeSegments_Digit_Faute_Joueur_Local) // Nombre de segment = 6 (de 1 à 6, chiffre de 0 à 5)
      { 
        for (byte segment = 0; segment < 7; segment++) // segment = barre de Led (démarrage;fin;+1)
    	{ // Débur For
          if (bitRead(Segments_Digit_Faute_Joueur_Local[chiffre], segment) == 0) 
    	  {
            // le segment est éteint
          } else 
    	  {
            // le segment est allumé
            int Num_Led = (6 * segment);  // Numéro de la Led de démarrage du segment à afficher   	
     
            for(Num_Led ; Num_Led <((6 * segment)+6); (Num_Led++)) // Boucle pour allumer les Led (N° Led début; N° Led fin;N° Led+1)
            { // Debut For
              if (curValue_Digit_Faute_Joueur_Local == 5)
              {
              LedRuban[2].setPixelColor(Num_Led, 255, 0, 0); // (N° de la Led,Rouge,Vert,bleu) = Rouge
              }          
              else if (curValue_Digit_Faute_Joueur_Local == 4)
              {
              LedRuban[2].setPixelColor(Num_Led, 255, 165, 0); // (N° de la Led,Rouge,Vert,bleu) = Orange
              }
              else if(curValue_Digit_Faute_Joueur_Local < 4)
              {
              LedRuban[2].setPixelColor(Num_Led, 0, 255, 0); // (N° de la Led,Rouge,Vert,bleu) = Vert
              }
          	} // Fin For
     
            LedRuban[2].show(); // Affichage des segments avec la couleur
          }
        }
      }
    }

  5. #5
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 015
    Points : 2 350
    Points
    2 350
    Par défaut
    Bonjour electrosat03

    Pour n'avoir plu qu'une fonction, il faut lui passer le numéro du ruban concerné en paramètre, RubanIndex, et utiliser ainsi afficher_Digit(ruban, valeur);

    Pour ce faire modifier afficher_Digit ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    // ***************** Affichage du chiffre sur le Digit Nommé du ruban RubanIndex *****************
    void afficher_Digit(int RubanIndex, const byte chiffre) // Procédure Afficher Digit Faute_Joueur_Local
    {
    	if (chiffre < nombreDeSegments_Digit_Faute_Joueur_Local) // Nombre de segment = 6 (de 1 à 6, chiffre de 0 à 5)
    	{
    		for (byte segment = 0; segment < 7; segment++) // segment = barre de Led (démarrage;fin;+1)
    		{ // Débur For
    			if (bitRead(Segments_Digit_Faute_Joueur_Local[chiffre], segment) == 0)
    			{
    				// le segment est éteint
    			} else
    			{
    				// le segment est allumé
    				int Num_Led = (6 * segment);  // Numéro de la Led de démarrage du segment à afficher
     
    				for(Num_Led ; Num_Led <((6 * segment)+6); (Num_Led++)) // Boucle pour allumer les Led (N° Led début; N° Led fin;N° Led+1)
    				{ // Debut For
    					if (curValue_Digit_Faute_Joueur_Local == 5)
    					{
    						LedRuban[RubanIndex].setPixelColor(Num_Led, 255, 0, 0); // (N° de la Led,Rouge,Vert,bleu) = Rouge
    					}
    					else if (curValue_Digit_Faute_Joueur_Local == 4)
    					{
    						LedRuban[RubanIndex].setPixelColor(Num_Led, 255, 165, 0); // (N° de la Led,Rouge,Vert,bleu) = Orange
    					}
    					else if(curValue_Digit_Faute_Joueur_Local < 4)
    					{
    						LedRuban[RubanIndex].setPixelColor(Num_Led, 0, 255, 0); // (N° de la Led,Rouge,Vert,bleu) = Vert
    					}
    				} // Fin For
     
    				LedRuban[RubanIndex].show(); // Affichage des segments avec la couleur
    			}
    		}
    	}
    }
    Cordialement
    jpbbricole

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 239
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 239
    Points : 555
    Points
    555
    Par défaut
    Salut,

    Merci pour ton aide, cela m'a bien aidé et j'ai terminé mon codage qui fonctionne parfaitement
    Je tiens à remercier également hbachetti sur le forum arduino pour son aide.

    Il me reste à commander le matos pour passer à la réalisation physique du projet

    Merci

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 239
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 239
    Points : 555
    Points
    555
    Par défaut
    Salut,

    Voilà, je reviens sur le projet, pour le Fun

    J'aimerais allumer les segments des chiffres dans un ordre précis

    Voilà le code pour l'affichage des digits segment par segment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    const byte Segments_Digit_Faute[] =  // Les 6 chiffres avec les 7 segments 1 = allumé/0 = éteint
    {
      0b0111111, // chiffre 0 la lecture des segments se fait de droite à gauche 7-6-5-4-3-2-1
      0b0001100, // chiffre 1
      0b1110110, // chiffre 2
      0b1011110, // chiffre 3
      0b1001101, // chiffre 4
      0b1011011  // chiffre 5
    };
     
    const byte nombreDeSegments_Digit_Faute = sizeof Segments_Digit_Faute;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    // ***************** Affichage du chiffre sur le Digit Nommé dans une Variable *****************
    void afficher_Digit(const byte chiffre, int Num_Digit_Actif) // Procédure Afficher Digit Faute
    { 
      if (chiffre < nombreDeSegments_Digit_Faute) 
      { 
        for (byte segment = 0; segment < 7; segment++) // segment = barre de Led (démarrage;fin;+1)
    	{ // Débur For
          if (bitRead(Segments_Digit_Faute[chiffre], segment) == 0) 
    	  {
            // le segment est éteint
          } else 
    	  {
            // le segment est allumé
            int Num_Led = (6 * segment);  // Numéro de la Led de démarrage du segment à afficher   	
     
            for(Num_Led ; Num_Led <((6 * segment)+6); (Num_Led++)) // Boucle pour allumer les Led (N° Led début; N° Led fin;N° Led+1)
            { // Debut For
              if (chiffre == 5)
              {
              Digit[Num_Digit_Actif].setPixelColor(Num_Led, 255, 0, 0); // (N° de la Led,Rouge,Vert,bleu) = Rouge
              }          
              else if (chiffre == 4)
              {
              Digit[Num_Digit_Actif].setPixelColor(Num_Led, 255, 165, 0); // (N° de la Led,Rouge,Vert,bleu) = Orange
              }
              else if(chiffre < 4)
              {
              Digit[Num_Digit_Actif].setPixelColor(Num_Led, 0, 255, 0); // (N° de la Led,Rouge,Vert,bleu) = Vert
              }
          	} // Fin For
     
            Digit[Num_Digit_Actif].show(); // Affichage des segments avec la couleur
          }
        }
      }
    }

    J'aimerais allumer mes segments comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    const byte OrdreSegments_Digit_Faute[] =  // Les 6 chiffres avec les 7 segments
    {
    7,6,5,4,3,2,1, // chiffre 0 la lecture des segments se fait de droite à gauche 7-6-5-4-3-2-1  Le chiffre 7 correspond à ne pas afficher
    7,7,7,7,7,2,1, // chiffre 1
    7,7,3,4,6,1,0, // chiffre 2
    7,7,3,2,6,1,0, // chiffre 3
    7,7,7,2,1,6,5, // chiffre 4
    7,7,3,2,6,5,0  // chiffre 5
    };
    const byte nombreDeSegments_Digit_Faute = sizeof OrdreSegments_Digit_Faute;
    Il faut donc que je puisse lire pour le chiffre 4, la 5° ligne et ensuite les données de cette ligne qui correspondent aux segment à allumer

    Merci pour votre aide

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 239
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 239
    Points : 555
    Points
    555
    Par défaut
    Bonjour à tous,

    J'ai enfin trouvé la solution, c'est bon.

    Comment limiter un BP -- à rester sur une valeur Min

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if(keyPressed == BUTTON_5_Faute_Equipe_Visiteur_Moins) // Bouton - Faute Equipe_Visiteur
        {  
    	  Digit[0].clear(); // Eteint toutes les Led
          curValue_Digit_Faute_Equipe_Visiteur --; //
          If (curValue_Digit_Faute_Equipe_Visiteur==0)
          {
          curValue_Digit_Faute_Equipe_Visiteur = MIN_VALUE;
          }
          Num_Digit_Actif = 0;
          afficher_Digit(curValue_Digit_Faute_Equipe_Visiteur,Num_Digit_Actif); 
        }
    Les 2 if ne peuvent pas coexister ???

    Merci

  9. #9
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 808
    Points : 5 664
    Points
    5 664
    Par défaut
    Les 2 if ne peuvent pas coexister ???
    ça veut dire quoi?

    si vous postiez tout le code, on pourrait avoir une vision d'ensemble, c'est difficile d'apporter des commentaires avec une vue limitée

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 239
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 239
    Points : 555
    Points
    555
    Par défaut
    Salut,

    OK, c'est bon, je ne sais pas pourquoi ça n'a pas fonctionné avant.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. procedure avec nom de table/ sequence en paramètre
    Par ouatmad dans le forum Forms
    Réponses: 3
    Dernier message: 09/11/2007, 14h28
  2. Faire du nom de la table un paramètre dans une requête
    Par sofiane1111 dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/09/2007, 14h27
  3. Réponses: 1
    Dernier message: 11/09/2007, 10h12
  4. Créer une table dont les noms de colonnes sont des paramètres
    Par Mythrandil dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/09/2007, 15h08
  5. Passer le nom d'un textBox en paramètre
    Par Poussy-Puce dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/01/2006, 17h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo