Arduino Forum

International => Français => Topic started by: 2325 on Dec 22, 2014, 11:42 am

Title: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 11:42 am
Bonjour tout le monde

J'ai un petit soucis svp
Imaginons que j'ai 2 boutons poussoirs et sur chacun d'eux il y a 2 LEDs de différente couleur branchées avec le bouton poussoir. Avec chaque bouton il y a une led rouge et une led bleu

Du coup je voulais savoir comment faut-il faire pour : lorsque j'appuis sur le 2 ème bouton la LED rouge s'allume et si j'appuis sur le 1er bouton la bleu s'allume. Et vice versa

Du coup les lumières s'alternent quelque soit le bouton appuyé.

Merci beaucoup

Bonne journée
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: B@tto on Dec 22, 2014, 11:46 am
Salut,

Bin rien de bien spécial ...

Code: [Select]
if(digitalRead(bouton1)==LOW) digitalWrite(LED1,HIGH);
else digitalWrite(LED1,LOW);

if(digitalRead(bouton2)==LOW) digitalWrite(LED2,HIGH);
else digitalWrite(LED2,LOW);
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: infobarquee on Dec 22, 2014, 11:49 am
bonjour,
on t'a donné un exemple dans l'autre post.
a toi d'essayer d'imaginer comment faire.
tu mets tout sur papier, et tu code en fonction ;)
après si tu as un soucis, on pourra t'aider, mais on ne fera pas tout à ta place, même si dans quelques jours, ca sera noël.
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: XavierMiller on Dec 22, 2014, 11:50 am
@Batto, l'idée est de faire un morpion : 3x3 boutons, 3x3x2 leds. Il faut donc qu'à chaque fois que n'importe quel bouton non allumé est actionné, la couleur de la LED à activer soit alternée ;)
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 11:52 am
En fait je sais pas si j'ai bien expliqué mon problème mais je ne panse pas

Bah en fait imaginons que j'ai 3 boutons et 2 leds sur chaque bouton comme précedent
Au départ toutes les leds sont éteintes.

Si j'appuis sur le bouton numéro 3 la led rouge s'allume
Ensuite si j'appuis sur le bouton 1 la led bleu s'allume
Et si j'appuis sur le bouton 2 la led bleu s'allume

Et ça dans n'importe quel ordre

Merci de ton aide B@tto
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 11:53 am
Oui je le sais infobarquee mais je n'arrive toujours pas c'est pour ça

Merci
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 12:54 pm
XavierMiller à tout à fait raison mais je n'y arrive pas

:(
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: infobarquee on Dec 22, 2014, 12:57 pm
En fait je sais pas si j'ai bien expliqué mon problème mais je ne panse pas

Bah en fait imaginons que j'ai 3 boutons et 2 leds sur chaque bouton comme précedent
Au départ toutes les leds sont éteintes.

Si j'appuis sur le bouton numéro 3 la led rouge s'allume
Ensuite si j'appuis sur le bouton 1 la led bleu s'allume
Et si j'appuis sur le bouton 2 la led bleu s'allume

Et ça dans n'importe quel ordre

Merci de ton aide B@tto
soit tu fais comme tu l'explique au dessus et tu te sers du code boolean dans ton autre post.

soit tu ne sais pas expliquer comme il faut.

dans le premier cas, tu as 3 boolean, un pour chaque bouton.
dans le setup, tu mets tout sur LOW, led éteinte
ensuite, il suffit d'appuyer sur un bouton pour activer telle ou telle led.
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 01:02 pm
En fait ce qui me dérange c'est que à chaque bouton poussoir il y a deux leds et elles sont sur des différentes pins et je dois les faire communiquer avec leur propre bouton poussoir.

Donc du coup c'est ça qui me pose soucis
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: XavierMiller on Dec 22, 2014, 01:19 pm
Une autre option que boolean, est de compter les phases de jeu : impair : couleur 1, pair : couleur 2.
"Faire communiquer", ce n'est pas le bouton poussoir ou la LED qui va le faire, mais l'arduino ;)
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: B@tto on Dec 22, 2014, 02:00 pm
Dans
En fait je sais pas si j'ai bien expliqué mon problème mais je ne panse pas

Bah en fait imaginons que j'ai 3 boutons et 2 leds sur chaque bouton comme précedent
Au départ toutes les leds sont éteintes.

Si j'appuis sur le bouton numéro 3 la led rouge s'allume
Ensuite si j'appuis sur le bouton 1 la led bleu s'allume
Et si j'appuis sur le bouton 2 la led bleu s'allume

Et ça dans n'importe quel ordre

Merci de ton aide B@tto
Dans ce cas c'est juste une question de condition :

Code: [Select]
if(digitalRead(bouton1)==LOW && digitalRead(bouton2)==HIGH && digitalRead(bouton3)==HIGH)) digitalWrite(LED1,HIGH);
else if(digitalRead(bouton2)==LOW  && digitalRead(bouton2)==LOW && digitalRead(bouton3)==HIGH)) digitalWrite(LED2,HIGH);
else if(digitalRead(bouton2)==HIGH  && digitalRead(bouton2)==LOW && digitalRead(bouton3)==HIGH)) digitalWrite(LED3,HIGH);

....
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 02:39 pm
Sans vouloir t'offenser B@atto ce n'est pas ça du tout ;)

En fait je pense suivre l'idée de XavierMiller car je pense  que se serait la meilleur possibilité pour moi

Merci à tous
Je vous tiens au courant pour vous dire comment j'ai fais

Bonne journée.
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 03:06 pm
En fin de compte voilà ce que j'ai fais

Code: [Select]

if (digitalRead(bp1) == HIGH  )
{
     if ( (i % 2) == 0)
     {
     // nbre pair
     digitalWrite(ledR1, HIGH);
     digitalWrite(ledB1, LOW);
   
     }
     else
     {
     digitalWrite(ledR1, LOW);
     digitalWrite(ledB1, HIGH);
     }
    i=i+1;
   }
   
   if (digitalRead(bp2) == HIGH  )
{
     if ( (i % 2) == 0)
     {
     // nbre pair
     digitalWrite(ledR2, HIGH);
     digitalWrite(ledB2, LOW);
   
     }
     else
     {
     // nbre impaire
     digitalWrite(ledR2, LOW);
     digitalWrite(ledB2, HIGH);
     }
    i=i+1;
   }


J'ai un soucis là dedans : au début j'ai déclarer que i=0;   
Lorsque j'allume un interrupteur les 2 leds s'allument et lorsque je l'éteint il n'y a que la led bleu ( la deuxième ) qui reste allumé alors que l'autre s'éteint
Sachant que j'incrémente i à chaque fois je ne vois pas où est le problème

Merci de votre réponse
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 04:42 pm
J'ai essayé aussi de tout mettre dans une boucle for mais sans plus :(

Code: [Select]

 for (int i = 0; i < 9; i ++)
{
   if (digitalRead(bp1) == HIGH  )
{
     if ( (i % 2) == 0)
     {
     // nbre pair
     digitalWrite(ledR1, HIGH);
     digitalWrite(ledB1, LOW);
     }
     else
     {
     // nbre impaire 
     digitalWrite(ledR1, LOW);
     digitalWrite(ledB1, HIGH);
     }
   
   }
   
   if (digitalRead(bp2) == HIGH  )
{
     if ( (i % 2) == 0)
     {
     // nbre pair
     digitalWrite(ledR2, HIGH);
     digitalWrite(ledB2, LOW);
     }
     else
     {
     // nbre impaire
     digitalWrite(ledR2, LOW);
     digitalWrite(ledB2, HIGH);
     }
     
   }
     
}


Du coup comment faire svp ?
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: infobarquee on Dec 22, 2014, 04:54 pm
En fait ce qui me dérange c'est que à chaque bouton poussoir il y a deux leds et elles sont sur des différentes pins et je dois les faire communiquer avec leur propre bouton poussoir.

Donc du coup c'est ça qui me pose soucis
je vois pas le soucis.
tu prends le code dans l'autre post et tu double les boolean et le reste.

c'est a rendre pour quand ton devoir?
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 05:04 pm
OK je vais tester merci du coup de main

Mais sinon devoir est à rendre pour vendredi mais j'ai d'autre projet à faire sur d'autre code que l'arduino donc du coup je dois les faire très vite et j'ai en plus mes partiels à réviser

Merci
Title: Re: 2 Boutons poussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 05:24 pm
NON en fait je pense que il y a un truc qui ne va pas surement ça doit venir du logiciel car je fais mes montages avec    123d.circuits.io     car lorsque je met le même code mais avec mes pins et sans le délai de 300 mili-secondes la led bleu scintille bizarrement je ne vois pas pourquoi sachant que lorsque le bouton n'est plus pressé la led bleu devrai s'éteindre

Voici ce que j'ai mis :

Sachant que au dévut j'ai mis

boolean etat = false;

 


Code: [Select]

pinMode (ledR1, OUTPUT);
   pinMode (ledB1, OUTPUT);
   //digitalWrite (ledR1, LOW);
   digitalWrite (ledB1, HIGH);



if (digitalRead (bp1) == HIGH)   // si le bouton est appuyé
   {     
     if (etat == true)   // on allume/éteint les leds en fonction de la valeur de etat
      {
     digitalWrite (ledR1, LOW);
      digitalWrite (ledB1, HIGH);
     }
    else
    {
        digitalWrite (ledR1, HIGH);
      digitalWrite (ledB1, LOW);
     }
etat = !etat;   // on inverse la valeur de etat
   
   }


Merci
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: infobarquee on Dec 22, 2014, 08:25 pm
faux contact quelque part
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 08:53 pm
Je vais voir infobarquee mais je ne pense pas :(
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 09:19 pm
En fait il n'y a aucun faux contact avec les équipements lorsque j'appuis sur le premier bouton les 2 LEDs s'allume et la LED bleu a tendance à s'éteindre mais elle ne s'éteint pas ensuite si j'appuis sur le second bouton leds 2 LEDs s'allume mais la led bleu du 1er bouton s'éteint je ne sais pas pourquoi.

Voici une photo de mon montage
http://hpics.li/12e652f

Merci de ton aide infobarquee
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: fdufnews on Dec 22, 2014, 09:28 pm
Moi je pense qu'il faudrait commencer à réfléchir un peu.

Regarde ce que fait ton code si le bp1 est HIGH pour plusieurs itérations de la boucle principale.
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 09:32 pm
Donc du coup faudrait que j'enlève cette fonction :  if (etat == true) ?
Mais dans ce cas là mon programme n'aura plus de sens
Merci
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: fdufnews on Dec 22, 2014, 10:08 pm
On se pose les questions avant de coder.
Combien d'entrées, combien de sorties
On décrit toutes les relations des unes avec les autres
Et on vérifie son raisonnement

Quand tout semble cohérent on code et pas l'inverse. Sinon c'est n'importe quoi et tu passes des siècles à bricoler un truc boiteux.
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 10:31 pm
Tu as raison fdufnews mais :
j'ai 2 boutons, chaque bouton peut contrôler 2 leds (de couleurs différentes une rouge et une bleu) indépendantes chacune.

Imaginons que j'appuis sur le premier bouton la led rouge du premier bouton s'allume puis si j'appuis sur le second bouton la led bleu s'allume

Et de même si je commence avec le second bouton la led rouge s'allume et si j'appuis sur le premier bouton la led bleu s'allume

En fait je ne vois toujours pas comment faut-il faire ?

Merci
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: fdufnews on Dec 22, 2014, 10:36 pm
Quote
Imaginons que j'appuis sur le premier bouton la led rouge du premier bouton s'allume puis si j'appuis sur le second bouton la led bleu s'allume
Et si tu appuies une seconde fois sur le premier bouton qu'est-ce qu'il se passe?
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 10:41 pm
En fait si le bouton 1 est sur on les 2 leds s'allument si il repasse sur off la led rouge s'éteint mais la led bleu reste allumée.

Merci
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 10:58 pm
Donc ça marche mais à moitié bizarrement :(
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: fdufnews on Dec 22, 2014, 11:01 pm
Le sens de la question c'est quel comportement attends-tu du montage dans ce cas.
Ce qu'il faut que tu comprennes c'est que tu dois prévoir tous les cas (même ceux à priori non souhaités) sinon ton code est incomplet et tu as des comportements inattendus.
Par exemple si l'appui sur le bouton est trop long cela peut être vu comme 2 appuis successifs sur le même bouton donc ce cas doit être envisagé et traité.

Si ça marche à moitié ça ne marche pas.
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 22, 2014, 11:11 pm
En fait tout simplement si j'appuis sur le bouton x1 la led rouge r1 s'allume, si j'appuis sur le bouton x2 la led r2 s'allume etc

Mais ça ne change rien si je reste appuyé sur le bouton.

Merci
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: icare on Dec 23, 2014, 09:34 am
Bonjour,
J'ai l'impression que l'on se trouve dans un cas de "logique séquentielle" et qu'une analyse dans ce sens doit être faite avant tout codage.
@+
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 23, 2014, 07:42 pm
Je vois toujours pas mais bon.
J'ai essayé quelque petit truc mais je n'y arrive toujours pas :(

Code: [Select]

void loop (void)
 {
  
    
   while(digitalRead(bp1) == 0 && digitalRead(bp2) == 0 && digitalRead(bp3) == 0)
    delay(10);
  
    
    if(digitalRead(bp1) == 1){
    if(joueur == 0){ //le jouuer 0 à les leds bleu
      digitalWrite(ledB1,HIGH);
      digitalWrite(ledR1,LOW);
      joueur = 1;    //le prochain joueur
    }else{
      digitalWrite(ledB1,LOW);
      digitalWrite(ledR1,HIGH);
      joueur = 0;
    }
  }else if(digitalRead(bp2) == 1){
    if(joueur == 0){ //le jouuer 0 à les leds bleu
      digitalWrite(ledB2,HIGH);
      digitalWrite(ledR2,LOW);
      joueur = 1;    //le prochain joueur
    }else{
      digitalWrite(ledB2,LOW);
      digitalWrite(ledR2,HIGH);
      joueur = 0;
    }}
      else if(digitalRead(bp3) == 1){
    if(joueur == 0){ //le jouuer 0 à les leds bleu
      digitalWrite(ledB3,HIGH);
      digitalWrite(ledR3,LOW);
      joueur = 1;    //le prochain joueur
    }else{
      digitalWrite(ledB3,LOW);
      digitalWrite(ledR3,HIGH);
      joueur = 0;
    }
  }
    //on attend que les bouton soit relachés
  while(digitalRead(bp1) == 1 || digitalRead(bp2) == 1 || digitalRead(bp3) == 1)
    delay(10);
}


Je ne comprend pas pourquoi lorsque j'appuis sur un premier bouton ( n'importe lequel ) les 2 leds s'allument et si je ré-appuis dessus la led rouge s'éteint mais la led bleu reste allumée.   Si j'appuis sur un second bouton il n'y a que la led rouge qui s'allume et si j'appuis sur le troisième bouton la led rouge s'allume aussi.

Merci de vos réponses
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: fdufnews on Dec 23, 2014, 09:01 pm
Maintenant que tu as appris à coder, il faut apprendre à mettre au point.

Si tu envoyais sur le port série l'état des boutons et l'état de la variable joueur peut-être que tu comprendrais ce qui se passe
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: infobarquee on Dec 23, 2014, 09:12 pm

void loop (void) ?????

mets tout ton code histoire qu'on comprenne mieux, car la, je me perd dans ton code.
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 23, 2014, 09:36 pm
OK merci je vais remettre mon code :

Code: [Select]


// Première Case
   int ledR1 = 0;
   int ledB1 = 1;
   int bp1 = 0;
// Première Case


// Deuxième Case
int ledR2=2;
int ledB2=3;
int bp2=2;
// Deuxième Case


// Troisième Case
int ledR3=4;
int ledB3=5;
int bp3=4;
// Troisième Case



int joueur = 0;

void setup (void)
   {
 
 
  // Première Case/////////////////////////////////////
   pinMode (ledR1, OUTPUT);
   pinMode (ledB1, OUTPUT);
   pinMode(bp1, INPUT);
   //digitalWrite (ledR1, LOW);
   //digitalWrite (ledB1, HIGH);

 
  // Deuxième Case/////////////////////////////////////
   pinMode (ledR2, OUTPUT);
   pinMode (ledB2, OUTPUT);
   pinMode(bp2, INPUT);
   //digitalWrite (ledR2, LOW);
   //digitalWrite (ledB2, LOW);
 
 
  // Troisième Case/////////////////////////////////////
   pinMode (ledR3, OUTPUT);
   pinMode (ledB3, OUTPUT);
   pinMode(bp3, INPUT);
   //digitalWrite (ledR2, LOW);
   //digitalWrite (ledB2, LOW);
 
 
}
 

void loop ()
 {
 
   
   while(digitalRead(bp1) == 0 && digitalRead(bp2) == 0 && digitalRead(bp3) == 0)
    delay(10);
 
   
   if(digitalRead(bp1) == 1){
    if(joueur == 0){ //le jouuer 0 à les leds bleu
      digitalWrite(ledB1,HIGH);
      digitalWrite(ledR1,LOW);
      joueur = 1;    //le prochain joueur
    }else{
      digitalWrite(ledB1,LOW);
      digitalWrite(ledR1,HIGH);
      joueur = 0;
    }
  }
  if(digitalRead(bp2) == 1){
    if(joueur == 0){ //le jouuer 0 à les leds bleu
      digitalWrite(ledB2,HIGH);
      digitalWrite(ledR2,LOW);
      joueur = 1;    //le prochain joueur
    }else{
      digitalWrite(ledB2,LOW);
      digitalWrite(ledR2,HIGH);
      joueur = 0;
    }
  }
   if(digitalRead(bp3) == 1){
    if(joueur == 0){ //le jouuer 0 à les leds bleu
      digitalWrite(ledB3,HIGH);
      digitalWrite(ledR3,LOW);
      joueur = 1;    //le prochain joueur
    }else{
      digitalWrite(ledB3,LOW);
      digitalWrite(ledR3,HIGH);
      joueur = 0;
    }
  }
    //on attend que les bouton soit relachés
  while(digitalRead(bp1) == 1 || digitalRead(bp2) == 1 || digitalRead(bp3) == 1)
    delay(10);
}




Merci pour tout
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: fdufnews on Dec 23, 2014, 10:06 pm
OK merci je vais remettre mon code :
Bonne idée. On comprends mieux pourquoi le code ne tourne pas rond.

Code: [Select]
// Première Case
   int ledR1 = 0;
   int ledB1 = 1;
   int bp1 = 0;
// Première Case

Si sur la même broche tu mets une LED et un bouton poussoir ce n'est pas très étonnant que le comportement soit imprévisible.
En plus on évite d'utiliser les broches 0 et 1 qui correspondent au port série car cela empêche d'utiliser Serial pour la mise au point et en plus cela peut planter le téléchargement du code dans l'arduino.
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: infobarquee on Dec 23, 2014, 10:18 pm
c'est sur qu'avec le code entier on comprend de suite le pourquoi ;)
Title: Re: 2 Boutons Boussoirs et 4 LEDs
Post by: 2325 on Dec 23, 2014, 10:31 pm
fdufnews       100000000000000 MMMEEERRRCCCIIIISSSSSS

Tu as ENFIN trouvé j'ai fais une erreur de....  euhhh je ne sais pas comment le dire mais merci quand même

infobarquee    Merci de ton aide aussi

Et 1000 mercis à tous ceux qui mon aidés

ps: je déteste les erreurs de ce genre et je suis désolé j'aurais du poster tout le code en entier

Sujet résolu

Bonne vacances à tous

:)