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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : octobre 2016
    Messages : 20
    Points : 7
    Points
    7

    Par défaut Commande de LED au clavier en python avec pygame

    Bonjour
    Je désire allumer une del sur mon pi en appuyant sur une touche ( z ) du clavier
    Je rentre ce programme mais rien ne se passe


    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
    import pygame
    import RPi.GPIO as GPIO
    GPIO.setmode(GPIO.BOARD) 
    channel = 11
    GPIO.setup(channel, GPIO.OUT, initial=GPIO.LOW)
    pygame.init()
    while True:
    	events = pygame.event.get()
    	for event in events:
    		if event.type == pygame.KEYDOWN:
    			if event.key == pygame.K_z:
    				GPIO.output(channel, GPIO.HIGH)
    			else :
    				GPIO.output(channel, GPIO.LOW)

  2. #2
    Rédacteur/Modérateur

    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    janvier 2009
    Messages
    10 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : janvier 2009
    Messages : 10 424
    Points : 44 925
    Points
    44 925
    Billets dans le blog
    9

    Par défaut

    Salut,

    Il faut ouvrir une fenêtre après l'init() :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    fenetre= pygame.display.set_mode((640, 480))

    Le gestionnaire scrute des événements dans une fenêtre.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : octobre 2016
    Messages : 20
    Points : 7
    Points
    7

    Par défaut

    Bonjour
    J ai ajouté la ligne indiquée mais cela ne fonctionne toujours pas
    J ai bien une fenetre noire qui s ouvre en plus que précemment
    J ai aussi ajouté 3 print pour voir ou bloquer le programme
    Le print "ICI" apparait bien
    Ensuite le valide la touche z mais rien ne se passe

    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
     
    import pygame
    import RPi.GPIO as GPIO
    GPIO.setmode(GPIO.BOARD) 
    channel = 11
    GPIO.setup(channel, GPIO.OUT, initial=GPIO.LOW)
    pygame.init()
    fenetre= pygame.display.set_mode((640, 480))
    print("ICI")
    while True:
    	events = pygame.event.get()
    	for event in events:
    		if event.type == pygame.KEYDOWN:
    			if event.key == pygame.K_z:
    				GPIO.output(channel, GPIO.HIGH)
                                    print ("OK")
    			else :
    				GPIO.output(channel, GPIO.LOW)
                                    print ("N.OK")

  4. #4
    Rédacteur/Modérateur

    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    janvier 2009
    Messages
    10 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : janvier 2009
    Messages : 10 424
    Points : 44 925
    Points
    44 925
    Billets dans le blog
    9

    Par défaut

    Bonjour,

    As-tu tout de même des messages "OK" ou "N.OK" qui s'affichent ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : octobre 2016
    Messages : 20
    Points : 7
    Points
    7

    Par défaut

    non rien ne s affiche

  6. #6
    Rédacteur/Modérateur

    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    janvier 2009
    Messages
    10 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : janvier 2009
    Messages : 10 424
    Points : 44 925
    Points
    44 925
    Billets dans le blog
    9

    Par défaut

    Et si tu enlèves les lignes concernant le GPIO ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : octobre 2016
    Messages : 20
    Points : 7
    Points
    7

    Par défaut

    je viens d essayer
    Toujours rien

  8. #8
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    7 073
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 7 073
    Points : 9 844
    Points
    9 844

    Par défaut

    Le script sans GPIO fonctionne bien (j'ai ajouté l'événement QUIT quand tu cliques sur la croix de la fenêtre) :
    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
    import pygame
     
    pygame.init()
    fenetre= pygame.display.set_mode((640, 480))
    print("ICI")
     
     
    running = True
    while running:
        events = pygame.event.get()
     
        for event in events:
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_z:
                    print ("OK")
                else:
                    print ("N.OK")
            elif event.type == pygame.QUIT:
                running = False
    pygame.quit()
    tu as bien le focus sur la fenêtre ? Quel outil utilises-tu pour programmer en Python ? Idle ?

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : octobre 2016
    Messages : 20
    Points : 7
    Points
    7

    Par défaut

    Bonsoir
    Un grand merci pour ton aide

    Le programme fonctionne

    Sinon j utilise Python 3 (Idle)

    J ai acheté sur Amazon : ABOX Raspberry Pi 3 Modèle B Plus (3 B+) Starter Kit [ Version Dernière ] 32 Go Classe 10 SanDisk Micro SD Carte, 5V 3A Alimentation Interrupteur Marche/Arrêt Boîtier Noir

    Je te tiens au courant pour savoir si j arrive à allumer la diode sur le GPIO


    Qu entends tu par le focus sur la fenêtre ?

    Peux tu aussi m expliquer un peu la fin de ton programme car je n ai pas l habitude de placer un elif à ce niveau

  10. #10
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    7 073
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 7 073
    Points : 9 844
    Points
    9 844

    Par défaut

    Ce que je veux dire par "focus sur la fenêtre" : est-ce que la fenêtre est active quand tu appuies sur une touche du clavier ? Si tu cliques sur une autre fenêtre (par exemple la console Python) tu perds le focus de la fenêtre Pygame (la fenêtre Pygame est désactivée) et dans ce cas tu ne peux pas intercepter les événements du clavier.

    Mais visiblement tu n'as pas eu ce problème car le programme fonctionne.

    Documentation sur elif

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : octobre 2016
    Messages : 20
    Points : 7
    Points
    7

    Par défaut

    Dans la fenêtre il ne se passe rien

    Les messages apparaissent dans le shel de python

    par contre j arrive à fermer la fenêtre en cliquant sur la croix


    encore merci pour tous ces précieux renseignements

    je vois que j ai encore du pain sur la planche

  12. #12
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    7 073
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 7 073
    Points : 9 844
    Points
    9 844

    Par défaut

    Citation Envoyé par college62137 Voir le message
    Dans la fenêtre il ne se passe rien

    Les messages apparaissent dans le shel de python
    c'est normal. La commande print() c'est pour écrire dans la console Python.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : octobre 2016
    Messages : 20
    Points : 7
    Points
    7

    Par défaut

    Alors à quoi sert la fenêtre si rien n apparait à l intérieur ?

    Sinon y a t il d autres méthodes que l utilisation de pygame pour allumer une del à l aide du clavier ?

    Je teste le programme avec la del demain

  14. #14
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    7 073
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 7 073
    Points : 9 844
    Points
    9 844

    Par défaut

    Citation Envoyé par college62137
    Alors à quoi sert la fenêtre si rien n apparait à l intérieur ?
    à capturer les événements du clavier ! Regarde la documentation de Pygame !

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : octobre 2016
    Messages : 20
    Points : 7
    Points
    7

    Par défaut

    bonjour

    cette fois ci je désire réaliser le même programme avec mon arduino

    je tape sur a on allume une led

    je tape sur e on éteint la led

    je tape sur c je fais clignoter le led

    Je tape sur a
    il écrit bien touche A
    il allume la led
    mais il écrit non reconnue donc je pense que je fais mal le break


    Je tape sur e
    il écrit bien touche E
    il éteint la led
    mais il écrit non reconnue donc je pense que je fais mal le break

    Je tape sur c
    il écrit bien touche C
    il fait clignoter la led fois
    mais je voulais la faire clignoter à l infini je pense donc mon while( Serial.read() == -1 ne fonctionne pas

    Code C : 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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    int ledPin = 13;
     
     
    void setup()
    {
        Serial.begin(9600);
        pinMode(ledPin, OUTPUT);
    }
     
     
    void loop()
    {
        while (Serial.available())
        {
            char key = Serial.read();
            switch (key)
            {
            case 'a':
                Serial.println("touche A");
                digitalWrite(ledPin,HIGH);
                break;
     
            case 'e':
                Serial.println("touche E");
                digitalWrite(ledPin,LOW);
                break;
     
            case 'c':
                Serial.println("touche C");
                cligno();
                break;
     
     
            default:
                Serial.println(" non reconnue.");
                break;
            }
        }
    }
    void cligno ()
    {
        while (Serial.read() == -1)
        {
            digitalWrite(ledPin,HIGH);
            delay(1000);
            digitalWrite(ledPin,LOW);
            delay(1000);
            digitalWrite(ledPin,HIGH);
            delay(1000);
            digitalWrite(ledPin,LOW);
            delay(1000);
        }
    }

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : octobre 2016
    Messages : 20
    Points : 7
    Points
    7

    Par défaut

    Voila le programme final
    Il fonctionne
    J appuie sur la touche z il allume bien la del sur GPIO 11
    Il éteind la del si n importe quelle touche enfoncée

    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
    27
    import pygame
     
    pygame.init()
    fenetre= pygame.display.set_mode((640, 480))
     
    import RPi.GPIO as GPIO
    GPIO.setmode (GPIO.BOARD)
    led = 11
    GPIO.setup(led,GPIO.OUT, initial=GPIO.LOW)
    print("ICII")
     
     
    running = True
    while running:
        events = pygame.event.get()
     
        for event in events:
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_z:
                    print ("OK")
                    GPIO.output (led, GPIO.HIGH)
                else:
                    print ("N.OK")
                    GPIO.output (led, GPIO.LOW)
            elif event.type == pygame.QUIT:
                running = False
    pygame.quit()

Discussions similaires

  1. Commande de led avec le port serie
    Par valdano dans le forum MATLAB
    Réponses: 0
    Dernier message: 24/04/2013, 18h23
  2. [Glade]Exporter le code en Python avec Glade
    Par Sebmox dans le forum GTK+ avec Python
    Réponses: 2
    Dernier message: 06/08/2006, 00h02
  3. Commande pour désactiver le clavier
    Par Maglight dans le forum Delphi
    Réponses: 5
    Dernier message: 18/05/2006, 09h59
  4. Pb Python avec 'getservbyport()'
    Par tse_tilky_moje_imja dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 26/02/2006, 16h11
  5. Installer Python avec Apache
    Par vincent_nk dans le forum Déploiement/Installation
    Réponses: 8
    Dernier message: 28/01/2006, 18h21

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