Go Down

Topic: allumage led avec 2 bouttons (Read 703 times) previous topic - next topic

hervev8

May 31, 2014, 07:32 pm Last Edit: May 31, 2014, 08:35 pm by hervev8 Reason: 1
hello a tous
voila je débute de chez débute ! et je n'arrive pas a faire un truc simple !
alors j'arrive a faire :
allumer Led 1 avec bouton 1
allumer Led 2 avec bouton 2
mais je n'arrive pas a:
allumer Led 3 avec bouton 1 ET bouton 2 appuyé ...

j'essaie avec l'instruction IF et AND

mais je ne doit pas les utiliser correctement ! j'ai fait ca :

if(etatBouton_1 == low && etatBouton_2 == low)
{
      digitalWrite(led_3,LOW); //les 2 boutons  appuyé, la LED3 est allumée
  }
else  
  {
      digitalWrite(led_3,HIGH);
  }

en gros comment tester une condition a 2 états  




solfra

A-tu essayé le programme qui est présent dans ta réponse ? Si oui, quelle résultats ?
Le fait de faire if( condition1 && condition2) doit permettre de réaliser l'action que si les 2 condition son réunit.

infobarquee

bonjour,
déjà avoir le code complet et entre les bales code #
tes boutons sont en normalement ouverts?
par ce que LOW, pas de passage, HIGH oui

fdufnews

Quote
je n'arrive pas a faire un truc simple

Tu n'arrives pas à le coder, à le compiler ou alors l'exécution n'est pas satisfaisante?
La syntaxe du morceau de code que tu as mis est bonne. Mais il y a des erreurs d'écriture.
Mets le code complet.

hervev8

alors ca progresse !
j'ai modifier le code
j'ai bien allumage de la LED 1 avec le bouton 1 et LED 2 avec le bouton 2
j'arrive aussi a avoir la LED 3 avec les 2 boutons appuyé .... MAIS j'ai un clignotement des LED 1 et 2
je comprend pourquoi car le programme boucle et que a un moment il detecte les boutons 1 et2 on donc allume les LED
comment bloquer l'etat du programme si 1 et 2 on LED 1 et 2 off et 3 on ? 

const int bouton_1 = 1; //le bouton est connecté à la broche 1
const int bouton_2 = 2; //le bouton est connecté à la broche 2
const int led_1 = 12; //la LED à la broche 12
const int led_2 = 13; //la LED à la broche 13
const int led_3 = 11; //la LED à la broche 11

int etatBouton_1; //variable qui enregistre l'état du bouton 1
int etatBouton_2; //variable qui enregistre l'état du bouton 2

void setup()
{
   pinMode(led_1, OUTPUT); //la led est une sortie
   pinMode(led_2, OUTPUT); //la led est une sortie
   pinMode(led_3, OUTPUT); //la led est une sortie
   pinMode(bouton_1, INPUT); //le bouton est une entrée
   pinMode(bouton_2, INPUT); //le bouton est une entrée

   etatBouton_1 = LOW; //on initialise l'état du bouton comme "relaché"     
   etatBouton_2 = LOW; //on initialise l'état du bouton comme "relache"
}
void loop()
{
etatBouton_1 = digitalRead(bouton_1);
   
   if(etatBouton_1 == HIGH) //test si le bouton appuyé
   {
       digitalWrite(led_1,HIGH); //la LED allumée
   }
   else  //test si NON
   {
       digitalWrite(led_1,LOW); //le bouton est relaché, la LED est etteinte
   }
     

etatBouton_2 = digitalRead(bouton_2);
   
   if(etatBouton_2 == HIGH) //si boutton 2 appuyée
   {
       digitalWrite(led_2,HIGH); // LED 2 allumée
   }
   else  // si NON
   {
       digitalWrite(led_2,LOW); //LED eteinte
   }

if(etatBouton_1 == HIGH && etatBouton_2 == HIGH)
{
digitalWrite(led_2,LOW);
digitalWrite(led_1,LOW);       
digitalWrite(led_3,HIGH); //les bouttons 1et2 appuyé LED 3 allumée et 1 et 2 etteint
   }
else 
   {
       digitalWrite(led_3,LOW);
   }

}

fdufnews

Réfléchissons un peu ...
Combien de cas de ce projets...
Bouton 1 appuyé et bouton 2 relâché
Bouton 1  relâché et bouton 2 appuyé
Bouton 1 appuyé et bouton 2 appuyé
Bouton 1  relâché et bouton 2 relâché

4 cas ---> 4 tests et pas un de plus pas la peine de se prendre la tête avec des else.
Comme certaines des entrées de test sont présentes dans plusieurs cas il faut tester pour chaque if TOUTES les entrées.

Je te laisse réfléchir.

hervev8

alors en faite il y a un peut plus de combinaison car la finalité du projet c'est ca:
inter 1 = Led 1
inter 2 = Led 2
inter 1 + 2 = led 3
inter 3 = Led 4
inter 1 + 3 = Led 5
inter 2 + 3 = Led 6

il y a en plus :
inter 1 + 4 = Led 7
inter 2 + 5 = Led 7
inter 1 +2 + 6 = Led 7
inter 3 +7 = Led 7
inter 1 + 3 + 8 = Led 7
inter 2 + 3 + 9 = Led 7

avec un rythme d'appui de changement des boutons qui peut être de l'ordre de la seconde

hervev8

donc pour répondre a fdufnews
il faudrait que je fasse un truc comme ca :
if inter 1 on = led 1 on
if inter 2 on = led 2 on
if inter 1+2 on = led 3 on
etc ... pour toutes les combinaisons jusqu'a
if inter 2+3+9 on = Led 7




infobarquee

si tu expliquais la finalité de ton projet, ce que tu veux faire réellement.
il y a peut être d'autres solutions.

hervev8

j'ai des contacts qui sont ouvert (GPI) par un pupitre suivant la camera sélectionnée mais suivant le protocole que j'ai donné  plus haut

camera 1 = Contact 1
camera 2 = contact 2
camera 3 = contact 1 + 2
camera 4 = contact 3
camera 5 = contact 1 + 3
camera 6 = contact 2 +3

je doit transformer cette combinaison en contact 1, 2, 3, 4, 5, 6 car la grille video que je pilote pour afficher la camera sélectionner a elle un contact pour chaque source donc 6 contact ( c'est les Led 1 a 6 que j'allume dans mon programme qui me sert de test )
en plus je doit allumer une LED (la 7) si la cam est sélectionnée (par mon pupitre précédant) ET si elle est a l'antenne. la cam a l'antenne et donné par 6 autres GPI : donc dans mon test mes contacts 4(cam1)  5(cam2) 6(cam3) 7(cam4) 8(cam5) 9(cam6)

ce qui me donne par exemple pour la cam 5 sélectionnée ET a l'antenne:
contact 1+3 fermé = LED 5 on (pour fermeture du contact 5 (LED5 dans mon test))  +  contact 8 fermé +contact 1+3 fermé = LED 7 on
si contact 8 ouvert alors LED7 off

voila j'espère que c'est plus claire !!!  :smiley-red:

fdufnews


j'ai des contacts qui sont ouvert (GPI) par un pupitre suivant la camera sélectionnée mais suivant le protocole que j'ai donné  plus haut

camera 1 = Contact 1
camera 2 = contact 2
camera 3 = contact 1 + 2
camera 4 = contact 3
camera 5 = contact 1 + 3
camera 6 = contact 2 +3


Si tu l'avais dit tout de suite !!
C'est codé en binaire ça.
Code: [Select]
byte numero;
numero = contact1 &1 + (contact2 &1)<<1 + (contact3&1)<<2; // Numéro de la caméra sélectionnée

hervev8

oulala !

la j'y pige encore moins !!
.....

fdufnews

#12
Jun 01, 2014, 08:36 pm Last Edit: Jun 01, 2014, 08:44 pm by fdufnews Reason: 1
contact    3     2     1
camera1    0     0    1
camera2   0      1    0
camera3   0      1     1
camera4   1      0    0
camera5   1      0     1
camera6   1      1     0

les 3 contacts codent le numéro de la caméra en binaire

La lige de code que j'ai donnée au-dessus est équivalente à:
contact1 + 2* contact2 + 4*contact3

hervev8

désolé du délais de réponse mais j'étais pas la ! ...

bon alors la ca dépasse mes connaissances ! la ligne code en binaire j'y pige que dalle !
y un endroit ou je peu apprendre ca ? .... ou alors m'expliquer le truc beaucoup plus clairement !!  :D

B@tto

http://skyduino.wordpress.com/2013/04/05/tuto-le-bitwise-pour-les-nuls/
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Go Up