Go Down

Topic: Plusieurs LEDS (Read 2 times) previous topic - next topic

pierro421

Bonjour à tous, voici mon problème.

Je souhaite simplement allumer telle ou telle LED selon une variable, et le faire 25 fois de suite. Chaque LED correspond à une séquence (d'ou le nom ledSeq1,...)
Voici mon code :

Code: [Select]
int ledSeq1 = 2 ;                // DÉCLARATION VARIABLES
int ledSeq2 = 3 ;                // variables contenants les n° des pins (broches) des leds.
int ledSeq3 = 4 ;
int ledSeq4 = 5 ;
int ledSeq5 = 6 ;
int ledSeq6 = 7 ;
int ledSeq7 = 8 ;
int ledSeq8 = 9 ;


int compteur = 0 ;               // Variables utilisées dans le programme pour définir les séquences.
int valeurvariable =0 ;

void setup()
{
pinMode(ledSeq1,OUTPUT);         // les pins (broches) sont définies comme des sorties.
pinMode(ledSeq2,OUTPUT);
pinMode(ledSeq3,OUTPUT);
pinMode(ledSeq4,OUTPUT);
pinMode(ledSeq5,OUTPUT);
pinMode(ledSeq6,OUTPUT);
pinMode(ledSeq7,OUTPUT);
pinMode(ledSeq8,OUTPUT);
Serial.begin(9600);              // ouvre le port série et fixe le débit de communication à 9600 bauds (bits par secondes).


void loop()
{
   while (compteur < 25) // tant que compteur inférieur à 25
        {
          valeurvariable = random(8)+1; // valeurvariable prend une valeur entre 0 et 7 puis on ajoute 1;
          Serial.println(valeurvariable); // affiche la valeur de cette variable
          if (valeurvariable = 1) // si valeurvariable = 1 alors ...
          {
           digitalWrite(ledSeq1, HIGH); // allume la led n°1.
          } 
 
          else if (valeurvariable = 2) // sinon si valeurvariable = 2 alors ...
          {
           digitalWrite(ledSeq2, HIGH); // allume la led n°2.
          } 
          else if (valeurvariable = 3) // sinon si  valeurvariable = 3 alors ...
          {
           digitalWrite(ledSeq3, HIGH); // allume la led n°.
          } 
          else if (valeurvariable = 4) // sinon si valeurvariable = 4 alors ...
          {
           digitalWrite(ledSeq4, HIGH); // allume la led n°4.
          } 
          else if (valeurvariable = 5) // sinon si valeurvariable = 5 alors ...
          {
           digitalWrite(ledSeq5, HIGH); // allume la led n°5.
          } 
          else if (valeurvariable = 6) // sinon si valeurvariable = 6 alors ...
          {
           digitalWrite(ledSeq6, HIGH); // allume la led n°6.
          } 
          else if (valeurvariable = 7) // sinon si valeurvariable = 7 alors ...
          {
           digitalWrite(ledSeq7, HIGH); // allume la led n°7.
          } 
          else if (valeurvariable = 8) // sinon valeurvariable = 8 alors ...
          {
           digitalWrite(ledSeq8, HIGH); // allume la led n°8.
          } 
          delay (5000); // on attend 5000 ms.
compteur++;
        }
}


J'ai déclaré les variables en me basant sur cette syntaxe : "int ledPin = 12 ;"
En branchant la LED sur la broche 12 ça marche bien. Mais je voulais alors le faire avec 8 LEDS.
Donc je me suis dit, je change juste le nom de la variable et je met un n° de broche différent. Bien évidement cela ne marche pas.
Ma question est donc : si je met "const" (devant toute les déclarations de variables) :
Code: [Select]
const int ledSeq1 = 2; Est ce que mon code marchera ?

D'avance merci
PS : je ne peut pas testé le code tout de suite, mais jeudi matin oui =)


schizophrene

Salut!

Ce que tu ne dis pas, c'est le but de ton programme?!
Ensuite, pour vérifier une égalité, ce n'est pas '=' mais '==' qu'il faut utiliser:
Code: [Select]
if (valeurvariable = 1) // ARCHI FAUX! Tu donnes à ta variable la valeur 1

if (valeurvariable == 1) // ARCHI JUSTE! Tu vérifies une égalité


Ensuite, tu allumes tes leds, mais tu ne les éteints pas. Donc, au bout de 9 tours de compteur, tu peux avoir dans l'idéal les 9 leds allumées. Donc, à quoi servent tes 14 autres tours?

:)

pierro421

Dans le cadre des PPE en TSsi, nous allons utiliser la carte arduino.
voici ce que doit faire le programme :

                    TANT que la variable "compteur" est inférieur à 25 :

                     la variable "valeurvariable" prend une valeur entière aléatoire entre 0 et 7 puis on rajoute 1 (juste pour que cela corresponde à le N° des les LEDS)
                     Selon la valeur attribuée, il faut allumer telle ou telle LED pendant 10 secondes puis l'éteindre  :P.
                     Puis incrémenté "compteur" de 1.
                     Ceci sera fait 25 fois,

C'est pour cela que je voudrais qu'une broche corresponde à une LED. Comme dans le programme "Blink" je voudrais qu'en déclarant une variable, celle-ci puisse se comporter comme avec ce code ci : "int ledPin = 12 ;"


j'espère que tu as compris =)

skywodd

Salut,

Tu t'ai vraiment cassé la tête pour rien ;)

Code: [Select]
/* Compteur de "tours" de la boucle loop() */
byte compteur = 0 ;

/* setup() */
void setup()
{
  /* Place les broches 2, 3, 4, 5, 6, 7, 8, 9 en sorties */
  for(byte i = 2; i < 10; i++)
    pinMode(i,OUTPUT);

  /* Initialise le port série */
  Serial.begin(9600);

  /* Initialise le générateur de nombre aléatoire */
  randomSeed(analogRead(A0));


/* loop() */
void loop()
{
  /* Génére un nombre aléatoire entre 0 et 7 */
  byte valeurvariable = random(8);

  /* Affiche le nombre généré */
  Serial.println(valeurvariable);

  /* Pour chaque broche utilisé */
  for(byte i = 2; i < 10; i++)
    /* si la broche en cours est celle désigné par la valeur aléatoire */
    if((valeurvariable + 2) == i)
      /* on place la sortie à "1" */
      digitalWrite(i, HIGH);
    else
      /* sinon on place la sortie à "0" */
      digitalWrite(i, LOW);

  /* delai de 5 secondes */
  delay (5000);

  /* on incrémente le compteur de tours */
  compteur++;

  /* si le compteurs a atteint 25 tours on stop tout */
  if(compteur == 25)
    for(;;); /* Boucle infini */

}


Attention !
- test d'égalité == et non =,
- 8 variables pour stocker 8 chiffres de 2 à 9 ... une boucle de 2 à 9 c'est bien mieux,
- les {} dans un if, for, while, ... ne sont pas obligatoire si il n'y as qu'une instruction aprés,
- dans ton cas, tes if() else if() ... auraient pu être remplacé par un switch(),
- une variable const c'est une variable classique mais qui ne peut pas être assigné (modifié),
- 0..7 + 1 = 9, or tu as 8 sorties, cherche l'erreur ;)

@schizophrene:
Quote
if (valeurvariable = 1) // ARCHI FAUX! Tu donnes à ta variable la valeur 1

if( (<assignation>) <opérande de test> <valeur>) <instruction>
En c/c++ c'est syntaxiquement correcte (ici sans parenthèses le compilo a du générer un warning, dissimulé par l'ide).
Mais dans son cas c'est juste une erreur de compréhension syntaxique  ?
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

B@tto

et si jamais tu veux pas utiliser les broches 2, 3, 4, 5, 6, 7, 8, 9, tu peux utiliser un tableau qui pointera vers le bon pin ;)

Go Up