allumage led avec 2 bouttons

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

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.

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

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.

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);
}

}

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.

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

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

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

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 !!! :blush:

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

Si tu l’avais dit tout de suite !!
C’est codé en binaire ça.

byte numero;
numero = contact1 &1 + (contact2 &1)<<1 + (contact3&1)<<2; // Numéro de la caméra sélectionnée

oulala !

la j’y pige encore moins !!

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

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 !! :smiley:

http://skyduino.wordpress.com/2013/04/05/tuto-le-bitwise-pour-les-nuls/