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

Python Discussion :

Affichage d'une variable ADC en temps réel dans un label


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Par défaut Affichage d'une variable ADC en temps réel dans un label
    Bonjour,

    J'ai besoin d'afficher une variable (ADC d'un capteur) en temps réel dans un label en le lançant avec un bouton puis pouvoir l'arrêter avec un autre. Évidemment, je souhaite pouvoir relancer la lecture si nécessaire.

    J'ai essayer de mettre en place votre solution mais je ne réussis pas à la faire fonctionner. Pouvez vous m'aider ?

    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
    38
    39
     
    class genemesure(threading.Thread):
        def __init__(self):
            threading.Thread.__init__(self)
            self._etat = False
            self._pause = False
     
        def run(self):
            self._etat = True
            while self._etat:
                if self._pause:
                    time.sleep(10)
                    continuer
                read_adc0 = readadc(adcnum, SPICLK, SPIMOSI, SPIMISO, SPICS)
                # conversion de la valeur brute lue en milivolts = ADC * ( 3300 / 1024 )
                millivolts = read_adc0 * ( 3300.0 / 1024.0)
                time.sleep(0.5)
                resultat.set(millivolts)
     
     
        def stop(self):
            self._etat = False
     
        def pause(self) :
            self._pause = True
     
        def continuer(self):
            self._pause = False
     
     
    etat=genemesure()
     
    #Relie a un bouton pour demarrer la mesure
    def genere ():
        etat.start()
     
    #Relie a un bouton pour arreter(mettre en pause dans notre cas) la mesure
    def arrete ():
        etat.pause()
    Il me dit que le thread ne peut être démarrer qu'une fois et que "continuer" n'est pas définit.

    Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par Tomchlo Voir le message
    J'ai essayer de mettre en place votre solution mais je ne réussis pas à la faire fonctionner. Pouvez vous m'aider ?
    Tous les GUI savent ordonnancer des taches répétitives. Les threads ne sont utiles que lorsque ces taches mettent tellement de temps à s'exécuter que çà bloque/gèle l'interface utilisateur (et dans votre code, ce qui prendra certainement du temps sont les time.sleep que vous pouvez éviter).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Il y a aussi ceci à corriger:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    time.sleep(10)
                    self.continuer()

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Par défaut
    En faite, je suis parti de ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    read_adc0 = readadc(adcnum, SPICLK, SPIMOSI, SPIMISO, SPICS)
                # conversion de la valeur brute lue en milivolts = ADC * ( 3300 / 1024 )
    millivolts = read_adc0 * ( 3300.0 / 1024.0)
    resultat.set(millivolts)
     
    resultat = StringVar()
    entree = Label(fenetre, textvariable=resultat, bg="white", width=30)
    entree.pack()
    A cette étape, il m'affiche le "resultat" dans le Label 1 fois.

    Si je rajoute une boucle "while" dans le but de mettre à jour le Label, il ne m'affiche rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    read_adc0 = readadc(adcnum, SPICLK, SPIMOSI, SPIMISO, SPICS)
                # conversion de la valeur brute lue en milivolts = ADC * ( 3300 / 1024 )
    millivolts = read_adc0 * ( 3300.0 / 1024.0)
    while (millivolts <= 0) :
          resultat.set(millivolts)
     
    resultat = StringVar()
    entree = Label(fenetre, textvariable=resultat, bg="white", width=30)
    entree.pack()

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par Tomchlo Voir le message
    Si je rajoute une boucle "while" dans le but de mettre à jour le Label, il ne m'affiche rien
    C'est la mainloop du GUI qui va mettre à jour le Label... et pendant qu'une boucle while tourne, il n'a pas la main donc pas de mise à jour.
    Ca serait bien de lire un tuto. pour comprendre comment fonctionne un GUI.
    La mécanique à utiliser pour réaliser une animation est illustrée dans ce chapitre.
    Et vous avez une bonne documentation tkinter sur "after" ici.

    De plus, lorsque vous postez du code, çà serait mieux qu'il fonctionne.
    Si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    read_adc0 = readadc(adcnum, SPICLK, SPIMOSI, SPIMISO, SPICS)
                # conversion de la valeur brute lue en milivolts = ADC * ( 3300 / 1024 )
    millivolts = read_adc0 * ( 3300.0 / 1024.0)
    resultat.set(millivolts)
     
    resultat = StringVar()
    entree = Label(fenetre, textvariable=resultat, bg="white", width=30)
    entree.pack()
    La StringVar étant crée après l'assignation de la valeur récupérée, çà ne peut pas marcher. De même:
    Si vous écrivez une boucle comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (millivolts <= 0) :
          resultat.set(millivolts)
    il faut vous assurer que la condition qui permettra de terminer cette boucle sera réalisée un jour (ce qui suppose assigner d'autres valeurs à la variable millivolts pour qu'elle devienne > 0).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Affichage d'une variable en "temps réel"
    Par Thund dans le forum Débuter
    Réponses: 9
    Dernier message: 18/11/2013, 12h06
  2. Affichage de l'heure en temps réel dans une interface
    Par T-MAT dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 26/12/2008, 19h08
  3. Réponses: 4
    Dernier message: 16/06/2006, 03h29
  4. [Dates] Affichage d'une variable
    Par claudesou dans le forum Langage
    Réponses: 3
    Dernier message: 29/05/2006, 10h08
  5. Réponses: 4
    Dernier message: 14/12/2005, 08h33

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