IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Raspberry Pi Discussion :

Simuler appui touche clavier sur GPIO


Sujet :

Raspberry Pi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 40
    Points : 16
    Points
    16
    Par défaut Simuler appui touche clavier sur GPIO
    Bonjour à tous,

    Petit souci, j'ai un raspberry qui doit remplacer mon clavier sur un équipement.

    J'ai réussi à trouver la matrice de mon clavier grâce à des interruptions.

    J'arrive à allumer mon matériel et l'éteindre par un script python (bouton tout seul placé sur une ligne et colonne rien qu'à lui)...

    Par contre je n'arrive pas à appuyer sur une touche en script ... J'ai pourtant un cable pour chaque ligne et chaque colonne sur le RPI...

    Pourriez vous me dire ce qui me manque dans ma démarche, je sèche un peu là ...

    Je vous remercie d'avance...

    Bien cordialement,

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Après divers essais et un passage sous oscilloscope, je m'aperçois que mon script simule bien l'appui sur le bouton mais je pense que l'appui est beaucoup trop long ...

    J'utilise un "time.sleep" mais ça ne réagit pas comme j'espérais...

    J'ai trouvé une fonction "usleep", mais marche-t-elle sur python 3 ? Ou comment faire pour passer mon temps en micro secondes ?

    Je vous remercie d'avance,

    Cordialement,

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    après de nombreux essais infructueux, je vous laisse mon code qui est censé appuyer sur une touche (L2,C4 qui équivaut à ma touche F sur le clavier que je posséde), ce code a fonctionné pour démarrer/éteindre mon équipement (qui possède une ligne et une colonne à lui seul), mais là pas moyen... Sauriez vous pourquoi ?

    Je vous remercie de toute aide qui pourra être utile,

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #!/usr/bin/python3
    # -*- coding:utf-8 -*-
     
    #import des modules
    import RPi.GPIO as GPIO
    import time
     
     
    #Choix du mode de numérotation (BOARD ou BCM) et configuration des GPIO en input
    GPIO.setmode(GPIO.BOARD)
    chan_list = [12, 13, 15, 19, 37, 16, 11, 36]
    GPIO.setup(chan_list,GPIO.IN)
     
    #Détection d'un événement descendant sur une ligne et appui sur une touche
    if GPIO.wait_for_edge(13, GPIO.FALLING):
    	print("L2 détecté")
    	GPIO.setup(36, GPIO.OUT, initial=GPIO.LOW)
    	print("Bouton F passé en niveau bas")
    	#time.sleep()
    	GPIO.output(36, GPIO.HIGH)
    	print("Bouton F passé en niveau haut")
    	GPIO.setup(36,GPIO.IN)

    Merci d'avance,

    Cordialement,

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Quelle valeur as-tu passé en paramètre de time.sleep() ? Cette fonction accepte des flottants inférieurs à 0. Ainsi, time.sleep(0.2) fait une pause de 200 millisecondes.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Merci pour le coup de main, mais le problème est réglé !

    En passant l'oscilloscope, j'ai calculé qu'il me fallait un appui de 3.2 millisecondes et je n'arrivais pas à le faire, j'ai procédé avec une boucle, et je me suis aperçu que le matériel prend l'impulsion entre 2 et 3 passages du signal ...

    Bref, j'ai solutionné, je vous passe le code si jamais ça peut servir dans le futur.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #!/usr/bin/python3
    # -*- coding:utf-8 -*-
     
    #import des modules
    import RPi.GPIO as GPIO
    import time
     
     
    #Choix du mode de numérotation (BOARD ou BCM) et configuration des GPIO en input et output
    GPIO.setmode(GPIO.BOARD)
    chan_list = [12, 13, 15, 19, 37, 16]
    GPIO.setup(chan_list,GPIO.IN)
    col_list = [18, 22, 32, 36]
    GPIO.setup(col_list, GPIO.OUT, initial=GPIO.HIGH)
    i = 0
     
    #Boucle détectant le passage en état bas de la colonne et déclenchement de la colonne pour simuler un appui bouton (3 pulses pour confirmer appui)
    while i < 3:
    	if GPIO.wait_for_edge(16, GPIO.FALLING):
    		GPIO.output(22, 0)
    		for p in range(0,1560):
    			GPIO.output(22, 0)
    		GPIO.output(22, 1)
    		i=i+1
     
    GPIO.cleanup()

    Bien cordialement,
    M.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/01/2009, 00h50
  2. [Win32] Récupérer un appui touche clavier
    Par elsargento dans le forum MFC
    Réponses: 19
    Dernier message: 06/05/2006, 11h05
  3. Simuler une touche clavier
    Par micky13 dans le forum Langage
    Réponses: 9
    Dernier message: 17/04/2006, 20h08
  4. [Applet]simuler une touche clavier
    Par mat10000 dans le forum Interfaces Graphiques en Java
    Réponses: 19
    Dernier message: 12/12/2003, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo