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.
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.
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
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.
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
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?
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
Donc ça marche mais à moitié bizarrement
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.
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
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.
@+
Je vois toujours pas mais bon.
J'ai essayé quelque petit truc mais je n'y arrive toujours pas
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
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
void loop (void) ?????
mets tout ton code histoire qu'on comprenne mieux, car la, je me perd dans ton code.
OK merci je vais remettre mon code :
// 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
2325:
OK merci je vais remettre mon code :
Bonne idée. On comprends mieux pourquoi le code ne tourne pas rond.
// 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.
c'est sur qu'avec le code entier on comprend de suite le pourquoi
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