Condition ou boucle ou autre

Résolu/Fermé
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 - 20 avril 2016 à 00:03
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 - 21 avril 2016 à 22:55
Bonjour,

Dans ma boucle principale:

J'ai une variable A (boutton A de ma manette) , je veux que lorsque j'appuis sur A , ma variable B passe a 1, et reste à 1 jusqua que je rappuie sur A.

int lumiere=0, A=0;

if( A=1)
{
lumiere = 1
} 
else {lumiere = 0
//Ca c'est pas bon car si je relache A la lumiere passe a 0 donc non


if( A=1 || lumiere = 0)
{
lumiere = 1
} 
if (A=1 || lumiere = 1)
{
lumiere = 0
}


ou alors une boucle "tant que"

je suis dessu de moi-meme

Je reflechi, j'essaye, je reflechi je re essaye
J'ai trop reflechi ^^
je trouve pas...

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
20 avril 2016 à 00:12
Bonjour,

C'est un problème de logique.
Tout d'abord, avant de parler de manette, réfléchis à le faire avec la lettre A de ton clavier. Et plutôt que de parler de relâcher, tu peux simplifier le problème : Si tu appuies sur la touche 'A' et (si la variable vaut 0, alors elle vaut 1, si elle vaut 1 alors elle vaut 0).
Je te laisse coder ça en C.
Note : l'opérateur de comparaison en C n'est pas le simple égal (=) mais le double égal (==)
Cdlt,
0
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 30
20 avril 2016 à 01:24
oui evidement, je l'avais deduit ca, pour l'appliquer c'est autre chose

Ce cas la marche seulementt dans un sens, je demarre le programme mon et lorque que j'appuis sur A mon rectangle change de couleur, main tenant faut que je fasse l'inverse

  while (input->BOUTTON_A == 1)
       {
            if (wt_SDL->lumiere == 0)
            {
                wt_SDL->lumiere = 1;
            }
        break;
        }
0
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 30 > poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019
20 avril 2016 à 01:26
Torture cérébrale ^^
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019
20 avril 2016 à 10:57
Dans mon poste, je tiens bien compte de l'inverse :-).
J'ai mis un else if pour traiter le cas ou wt_SDL->lumiere==1.

Maintenant, si tu ne souhaites pas que cela se fasse en boucle, il faut passer par une autre variable.
Par exemple :
int test=0;
while (input->BOUTTON_A == 1 && ! test) {
            if (wt_SDL->lumiere == 0) {
                wt_SDL->lumiere = 1;
                test = 0;
            }
            else if (wt_SDL->lumiere == 1) {
                wt_SDL->lumiere = 0;
                test = 0;
            }
}
0
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 30
Modifié par poparnassus le 20/04/2016 à 19:57
Comme ca ca marche bien, sauf que si je maintien mon boutton A enfoncer, ma variable lumiere passe de 1à0 tout les 100ms se qui est normale vue le code, je souhaiterai supprimer cette effet.
J'ai pas saisi avec ta variable test...?

 if (input->BOUTTON_A == 1)
        {
            if (wt_SDL->lumiere == 0)
            {
                wt_SDL->lumiere = 1;
            }
            else if(wt_SDL->lumiere == 1)
            {
                wt_SDL->lumiere = 0;
            }

            SDL_Delay(100);
        }

0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019
20 avril 2016 à 21:34
D'où l'intérêt de la variable test...
int test=0;
while (input->BOUTTON_A == 1 && ! test) {
            if (wt_SDL->lumiere == 0) {
                wt_SDL->lumiere = 1;
                test = 1;
            }
            else if (wt_SDL->lumiere == 1) {
                wt_SDL->lumiere = 0;
                test = 1;
            }
}
0
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 30
Modifié par poparnassus le 20/04/2016 à 01:49
j'ai un trouver une partie de soluce: CODE:

    while (input->BOUTTON_A == 1)
       {
            if (wt_SDL->lumiere == 0)
            {
                wt_SDL->lumiere = 1;
            }
            else if(wt_SDL->lumiere == 1)
                    {
                        wt_SDL->lumiere = 0;
                    }
        SDL_Delay(100);
        break;
        }


Probleme si je reste appuiyer sa clignote Jaimerai enlever cette effet clignotant, meme je doit car mes relai arduino risque de ne pas apprecier.
2eme probleme Jai du placer une tempo, sauf que l'etat de ma variable lumiere est envoyer sur le reseau (cest une instruction pour allumer un spot d'un robot) et que le reste de mes instruction, notament mes variable pour gerer la direction doivent arriver le plus rapidement ... Mais bon c'est deja un debut
0