Aller au contenu


Photo
- - - - -

Programme interface PC > ROBOT


  • Veuillez vous connecter pour répondre
26 réponses à ce sujet

#21 thermo_nono

thermo_nono

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 825 messages

Posté 14 septembre 2012 - 10:54

oui, je pense qu'une variable pour mémoriser l'état de la boucle précédente est la meilleure solution.

#22 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 15 septembre 2012 - 11:56

Bonjour à tous

Voila j'arrive a quelque chose de correct maintenant.

quand je fais cela ca fonctionne :

if (GetKeyState(VK_UP)& 0x80) //si le bouton est enfoncé
            {
                if(!tab[VK_UP]) //si le bouton était relaché avant, on en déduit qu'on a appuyé sur le bouton
                {
                     tab[VK_UP] = true; //on indique que le bouton est enfoncé
                     printf("haut\r\n");
                }

            }

            else  // si le bouton est relaché
            {

                if(tab[VK_UP])
                {


                     tab[VK_UP] = false; //on indique que le bouton est relaché
                     printf("haut relaché\r\n");
                }

            }

mais je ne comprends pas une chose pourquoi quand je fais ceci cela ne tourne pas ???

if (GetKeyState(VK_UP)& 0x80) //si le bouton est enfoncé
            {
                if(tab[VK_UP]==false) //si le bouton était relaché avant, on en déduit qu'on a appuyé sur le bouton
                {
                     tab[VK_UP] = true; //on indique que le bouton est enfoncé
                     printf("haut\r\n");
                }

            }

            else  // si le bouton est relaché
            {

                if(tab[VK_UP]==true)                {


                     tab[VK_UP] = false; //on indique que le bouton est relaché
                     printf("haut relaché\r\n");
                }

            }


c'est pourtant la mm chose non ?
Pour le false cela passe mais pas le true ...

Cordialement,
bypbop

#23 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 16 septembre 2012 - 12:42

Quel est le type de ta variable tab[VK_UP] ? Le premier cas peut fonctionner avec un entier, le deuxième non.

Tu devrais faire attention à ton indentation. Ca permet de mieux visualiser les choses et ça évite beaucoup de problèmes.
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#24 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 16 septembre 2012 - 01:13

Bonsoir,

Oui comme c'est la première fois que je fais du C je découvre en mm temps ;-)

typedef enum{false, true} bool;
    bool tab[1] = {false};

    do
    {


            if (GetKeyState(VK_UP)& 0x80) //si le bouton est enfoncé
            {
                if(!tab[VK_UP]) //si le bouton était relaché avant, on en déduit qu'on a appuyé sur le bouton
                {
                     tab[VK_UP] = true; //on indique que le bouton est enfoncé
                     printf("haut\r\n");
                }

            }

            else  // si le bouton est relaché
            {

                if(tab[VK_UP])
                {


                     tab[VK_UP] = false; //on indique que le bouton est relaché
                     printf("haut relaché\r\n");
                }

            }
    }


Cordialement,
bypbop

#25 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 16 septembre 2012 - 03:38

Je travaille en général sous Unix donc il est possible que Windows offre une solution, mais en C, true et false n'existent pas (sauf à partir d'une norme qui n'est pas supportée par tous les compilateurs). Il faut en général les définir à l'aide d'un #define (avec TRUE 1 et FALSE 0 en général). Le type bool existe en C++.

Autant l'expression !TRUE définie comme je l'ai indiqué doit bien renvoyer 0, autant l'opérateur "!" sur un enum me laisse perplexe. Essaie d'inverser la déclaration de ton enum et affiche le résultat, juste pour le fun (voir http://c.developpez.com/cours/bernard-cassagne/node92.php pour plus de détail, même si le cours est un peu vieux).
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#26 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 16 septembre 2012 - 10:14

Je travaille en général sous Unix donc il est possible que Windows offre une solution, mais en C, true et false n'existent pas (sauf à partir d'une norme qui n'est pas supportée par tous les compilateurs).


Sisi, le type bool existe bien en C avec la norme C99.
gcc supporte cette norme, il faut compiler avec le flag -std=c99 et include stdbool.h
avec stdbool, le boolean est un vrai type (et pas une énumération) donc !true fonctionne sans problème.

Et normalement les énumérations commencent bien à 0 et s'incrémente. Donc ton code devrait normalement marcher... (c'est comme ça que je faisais avant de découvrir c99 et stdbool, qui est quand même beaucoup plus clean !)

Mon site internet : http://ferdinandpiette.com/


#27 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 16 septembre 2012 - 10:38

Bonsoir c'etait juste pour savoir si mon raisonnement etait correct.
Pour mon niveau ca ne m'aidera pas plus.

typedef enum{false, true} bool; 
    bool tab[1] = {false}; 
 
    do 
    { 
 
 
            if (GetKeyState(VK_UP)& 0x80) //si le bouton est enfoncé 
            { 
                if(!tab[VK_UP]) //si le bouton était relaché avant, on en déduit qu'on a appuyé sur le bouton 
                { 
                     tab[VK_UP] = true; //on indique que le bouton est enfoncé 
                     printf("haut\r\n"); 
                } 
 
            } 
 
            else  // si le bouton est relaché 
            { 
 
                if(tab[VK_UP]) 
                { 
 
 
                     tab[VK_UP] = false; //on indique que le bouton est relaché 
                     printf("haut relaché\r\n"); 
                } 
 
            } 
    }





Je passe à la suite ...

Cordialement,
bypbop




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users