Condition ou boucle ou autre

Résolu
poparnassus Messages postés 426 Date d'inscription   Statut Membre Dernière intervention   -  
poparnassus Messages postés 426 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   30
 
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   Statut Membre Dernière intervention   30 > poparnassus Messages postés 426 Date d'inscription   Statut Membre Dernière intervention  
 
Torture cérébrale ^^
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > poparnassus Messages postés 426 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   30
 
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   Statut Contributeur Dernière intervention   1 846 > poparnassus Messages postés 426 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   30
 
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