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

Tkinter Python Discussion :

Faire clignoter une LED 3 fois


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai Avatar de Boudha25
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Points : 24
    Points
    24
    Par défaut Faire clignoter une LED 3 fois
    Bonjour,

    Je veux faire clignoter une led rouge 3 fois sans blocage. Je ne veux pas utiliser time.sleep. J'ai écrit 2 fonctions que j'appelle avec la fonction after(). Je suis capable de faire clignoter la led, mais je ne suis pas capable de le faire seulement 3 fois. Voici un extrait fonctionnel de mon code. J'aimerais que la fonction allumeRouge ne soit plus appelé après 3 fois. Je ne veux pas faire de Break, car j'ai d'autre code qui doit continuer a fonctionner. Merci.
    Code : 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
     
    from tkinter import * 
    import RPi.GPIO as GPIO
     
    def allumeRouge():#Fonction sans bloquage time.sleep.
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(16, GPIO.OUT)
        GPIO.output(16, GPIO.HIGH)
        fenetre.after(200, eteintRouge) #Attend 200 millisecondes et apelle la fonction eteintRouge().
     
    def eteintRouge():
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(16, GPIO.OUT)
        GPIO.output(16, GPIO.LOW)
        value = compteur_clignottement_led.get()#Lit la valeur du compteur.
        print(value)
        if value < 4:
            compteur_clignottement_led.set(value +1)#Incrémente la valeur du compteur a chaque passe.
            fenetre.after(200, allumeRouge)
            if value == 3:#Si la valeur est a 3.
                compteur_clignottement_led.set(value=0)#Remet le compteur a 0.
     
    # creation de la fenettre principale.   
    fenetre = Tk()
     
    label = Label(fenetre, text="Antenne RFID", font="Arial 20 bold")
    label.pack()
     
    # Titre de la fenettre principale. 
    fenetre.title("Antenne")           
     
    btn = Button(fenetre, text ="Cliquez ici!", command = allumeRouge)
    btn.pack()
     
    compteur_clignottement_led=IntVar(value=0)
     
    fenetre.mainloop()

  2. #2
    Membre à l'essai Avatar de Boudha25
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Points : 24
    Points
    24
    Par défaut Clignotement 3 fois
    L'erreur était d'encapsuler le 2e if dans le premier. La condition ne se produisait jamais. En sortant le 2e if du premier et en donnant un chiffre plus haut, le 2e if remplit sa condition et s'exécute. Je ne sais pas si c'est la meilleure solution, mais elle fonctionne.

  3. #3
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 869
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Une approche:
    Code : 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
    import tkinter as tk
    import itertools
     
     
    from tkinter import * 
    #import RPi.GPIO as GPIO
     
    def allumeRouge(compt=3):
        print('Allume')
        fenetre.after(1000, eteintRouge)
        if compt:= compt - 1:
            print(compt)
            fenetre.after(2000, allumeRouge, compt)
     
    def eteintRouge():
        print('Eteint')
     
    # creation de la fenettre principale.   
    fenetre = Tk()
     
    label = Label(fenetre, text="Antenne RFID", font="Arial 20 bold")
    label.pack()
     
    # Titre de la fenettre principale. 
    fenetre.title("Antenne")           
     
    btn = Button(fenetre, text ="Cliquez ici!", command = allumeRouge)
    btn.pack()
     
     
     
    fenetre.mainloop()
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 277
    Points : 36 762
    Points
    36 762
    Par défaut
    Salut,

    Ne faut pas oublier l'utilisateur nerveux qui va cliquer plusieurs fois de suite sur le Button:
    Code : 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
    import tkinter as tk
    from tkinter.constants import *
     
    def do_flip():
     
        btn['state'] = DISABLED
        colors = 'grey', 'blue'
     
        def _flip(count=7):
            label['bg'] = colors[count % 2]
            if count > 0:
                label.after(300, _flip, count-1)
            else:
                btn['state'] = NORMAL
     
        _flip()
     
    root = tk.Tk()
    label = tk.Label(root, width=10, height=3, bg='grey')
    label.pack()
     
    btn = tk.Button(root, text='start', command=do_flip)
    btn.pack()
    tk.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 05/04/2019, 23h18
  2. Faire clignoter une LED
    Par akybienvenu dans le forum Arduino
    Réponses: 5
    Dernier message: 28/03/2016, 15h01
  3. [ATmega169] Faire clignoter une LED
    Par Mazzetho dans le forum Autres architectures
    Réponses: 2
    Dernier message: 30/12/2010, 17h04
  4. Réponses: 3
    Dernier message: 26/11/2010, 16h27
  5. Ajout de fonction : faire clignoter une led
    Par Nono69690 dans le forum C
    Réponses: 16
    Dernier message: 06/06/2009, 13h37

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