Partage
  • Partager sur Facebook
  • Partager sur Twitter

Détecter les touches pressées sur clavier

    26 décembre 2015 à 16:32:29

    Bonjour j'ai un petit robot GoPiGo et je voudrait le faire avancer. En gros quand j’appuie sur "z" le robot avance et des que j’arrête d’appuyer le robot se stop et ainsi avec "q" "s" et "d".

    Je voudrait donc assigner le fait d'appuyer sur "z" a la fonction fwd qui va actionner les moteurs de tels sorte que le robot avance en avant.

    Comment je fait ?

    Merci de votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      26 décembre 2015 à 21:08:54

      Juste une question Combien l'as tu payer ?
      • Partager sur Facebook
      • Partager sur Twitter

      Développeur python amateur et fan de jeux-vidéos !

        26 décembre 2015 à 21:21:50

        Je l'ai acheter sur génération robot pour 120€ 

        http://www.generationrobots.com/fr/401852-kit-robotique-pour-raspberry-pi-gopigo.html

        • Partager sur Facebook
        • Partager sur Twitter
          26 décembre 2015 à 21:32:01

          Personnellement j'utiliserais carrément pygame (ou pysfml, je garde ma religion (Ô grand Pysfml, notre maître a tous !)) pour en importer le système d'event pour gérer ça. Mais bon, je suis un bourrin et il doit sûrement y avoir plus simple...
          • Partager sur Facebook
          • Partager sur Twitter
          Créateur de mauvaises blagues et de mauvais jeux depuis 1999 - Endless-caves - Endless-rooms
            26 décembre 2015 à 22:21:31

            Ceci vient de google, je l'ait juste copié collé :

            from Tkinter import *

            # création d'une instance de la classe TK, que l'on affecte à l'objet "root"
            root = Tk()

            # Quelques exemples de touches
            root.bind("<Up>", maFonction) # Flèche haut
            root.bind("<Down>", maFonction2) # Bas
            root.bind("<Left>", maFonction3) # Gauche
            root.bind("<Right>", maFonction4) # Droite
            root.bind("<space>", maFonction5) # barre d'espace
            root.bind("<a>", maFonction6) # lettre A

            La fonction ainsi liée est un peu particulière, car elle reçoit toujours un seul argument (l'évènement), que l'on doit nommé "event" :


            def maFonction(event):
                # [... instructions... ]

            Voili voilou :)
            • Partager sur Facebook
            • Partager sur Twitter
            Qui s'y frotte s'y pique
              26 décembre 2015 à 22:44:10

              Tu peux aussi regarder du côté de PyUserInput: https://github.com/SavinaRoja/PyUserInput

              C'est multiplatforme et tu n'es pas dépendant d'une interface graphique. Par contre, si tu comptes utiliser une interface par la suite il faudra mieux utiliser le système de gestion d'évènements de la dite interface.

              • Partager sur Facebook
              • Partager sur Twitter
                27 décembre 2015 à 13:18:33

                Bonjour merci de votre aide,

                @Reiex Je ne sais pas comment uttiliser Pygame, je début sur Python (et sur la programmation aussi)

                @apzoeiruty3 J'ai aussi trouver ça sur internet cependant le programme semble fonctionner sous Windows mais sous Raspian l'interface graphique ne se lance pas.

                @Kynarth Ce que tu me propose semble bien car en effet je n'est actuellement pas besoin d'interface graphique et je pense ne pas en avoir besoin dans le future. Cependant j'ai installer le module mais je ne comprend pas exactement quel syntaxe utiliser.

                • Partager sur Facebook
                • Partager sur Twitter
                  28 décembre 2015 à 8:10:24

                  Oui c'est vrai que c'est pas évident pour un néophyte. Je te donne le code commenté qui permet d'écouter le clavier et de faire ce que tu veux en fonction des touches utilisées.

                  from pykeyboard import PyKeyboardEvent
                  
                  
                  class KeyboardListener(PyKeyboardEvent):
                      """
                      Cette classe permet de regarder qu'elles sont les touches qui sont
                      pressées ou relâchée par l'utilisateur.
                      """
                      def __init__(self):
                          super(KeyboardListener, self).__init__()
                  
                      def tap(self, keycode, character, press):
                          """
                          Cette fonction détermine l'action a effectuer en fonction
                          de la touche pressée ou relâchée.
                  
                          Args:
                              keycode (int): Code du touche.
                              character (str): Nom de la touche.
                              press (bool): True si la touche est pressée, False si relachée.
                  
                          """
                          if press:
                              print("La touche", character, "est pressée.")
                          else:
                              print("La touche", character, "est relâchée.")
                  
                  
                  # Création de l'espion et lancement de l'écoute
                  keyboard = KeyboardListener()
                  keyboard.run()
                  



                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 décembre 2015 à 12:37:00

                    Merci de ton aide, cependant j'ai un problème j'ai recopier ton code a l'identique or lorsque j'essaye de l'éxécuter j'ai une erreur : 

                    Traceback (most recent call last):
                      File "/home/pi/Desktop/b.py", line 15, in <module>
                        keyboard = KeyboardListener()
                      File "/home/pi/Desktop/b.py", line 7, in __init__
                        super(KeyboardListener, self).__init__()
                      File "/usr/local/lib/python2.7/dist-packages/pykeyboard/x11.py", line 210, in __init__
                        self.ctx = self.display2.record_create_context(
                      File "/usr/lib/pymodules/python2.7/Xlib/display.py", line 216, in __getattr__
                        raise AttributeError(attr)



                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 décembre 2015 à 13:10:52

                      Ah oui, en effet. C'est parce que j'utilise une version 3 de python.

                      Change la fonction __init__ par :

                      def __init__(self):
                          PyKeyboardEvent.__init__(self)

                       Je n'utilise jamais python2.7 et je n'ai pas pu tester le changement. Mais je pense que ça doit être bon.

                      -
                      Edité par Kynarth 28 décembre 2015 à 13:12:44

                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 décembre 2015 à 15:45:04

                        Ok merci je sais pas pourquoi mais sur Raspian ils ont installé les deux Python 2 et Python 3 et par default des que je clique sur un .py il l'ouvre avec Python 2. Ca ne m'avait jamais déranger. Bizarrement avec Python 2 et la réctification lors que l'éxécution : "No module named pykeyboard" etrange puisque j'ai installer pyuserinput ...

                        J'ai donc dessider d'uttiliser Python 3 avec le premiers script que tu m'a donné a la une autre erreur :)

                        Traceback (most recent call last):
                          File "/home/pi/Desktop/b3.py", line 2, in <module>
                            from pykeyboard import PyKeyboardEvent
                          File "/usr/local/lib/python3.2/dist-packages/pykeyboard/__init__.py", line 37, in <module>
                            from .x11 import PyKeyboard, PyKeyboardEvent
                          File "/usr/local/lib/python3.2/dist-packages/pykeyboard/x11.py", line 31, in <module>
                            from .x11_keysyms import KEYSYMS
                          File "/usr/local/lib/python3.2/dist-packages/pykeyboard/x11_keysyms.py", line 18
                            u'\u0020': 'space',
                        SyntaxError: invalid syntax



                        -
                        Edité par Xou75 28 décembre 2015 à 17:58:16

                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 décembre 2015 à 21:41:55

                          C'est normal pour le cas de python2. Tu as surement installer PyUserInput seulement pour python3. Après pour l'erreur qu'il te fait avec python3 je sèche ^^'
                          • Partager sur Facebook
                          • Partager sur Twitter
                            1 janvier 2016 à 13:17:53

                            Merci pour votre aide, j'ai finalement uttiliser Tkinter pour parvenir a mes fin puisque que je n'ai pas réussie à faire refonctionner PyUserInput
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Détecter les touches pressées sur clavier

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown