2017-07-24 2 views
-2

Je suis un noob absolu en python et surtout en programmation aussi. (Alors soyez critiques je l'espère, je peux apprendre de cela aussi)Python, comment vérifier si a> = b pendant 5 secondes? J'ai utilisé des boucles while et j'ai des retards dans d'autres fonctions

Je suis en train de créer mon « programme » sur un Raspberry Pi 3, avec Raspbian OS

Mon problème est le suivant:

Je voudrais tester "si a> = b pendant 5 secondes" (où "a" est une valeur que j'ai lue de la série dans une autre fonction)

si oui faire quelque chose sinon faire autre chose, être vraiment simple ...

Je suis prêt "party" à le résoudre une fois dans mon code avec une boucle while dans l'une de mes fonctions, mais quand j'ai copié le "time waiting while loop" sur mon autre fonction, ça a commencé à générer un énorme delay (c'est à peu près le même temps que mes boucles supplémentaires)

J'espère vraiment que quelqu'un pourrait me suggérer une autre façon de vérifier « si a> = b pendant 5 secondes » autre qu'une boucle while

ou si quelqu'un aurait du temps libre pour vérifier mon code et dire moi quelles erreurs j'ai fait (probablement beaucoup d'erreurs noob)

Voici mon code qui ne contient pas les 2 boucles critiques (une seule avec 30 secondes de retard)

`https://pastebin.com/RmEcLRJA` 

Et voici l'autre avec 2 boucles supplémentaires alors que, ce qui semble retarder les mesures (de mes variables xwatts) avec environ 6-14 secondes au total (j'ai donné trois secondes de retard dans chaque boucle while)

`https://pastebin.com/HB99vH9c` 

PS désolé pour les liens mon code est tranquille longtemps pour coller ici deux fois

Ma valeur "a" est une valeur en constante évolution, elle se met à jour en moins de 1 seconde, j'ai besoin de savoir si a> = b pendant 5 secondes constamment, si elle tombe pour 1 lecture seulement (0,1 sec), il doit redémarrer les 5 secondes « timer »

+4

Bienvenue dans SO, vous obtiendrez plus de réponse si vous créez un exemple minimal: https://stackoverflow.com/help/mcve – Y0da

+0

Stack Overflow rend généralement le code défilant si c'est trop long, c'est un petit truc amusant. Bien que si vous voulez faire des liens, vous utilisez une syntaxe '[]' '()', où dans les '[]' s tiennent le texte que vous voulez montrer comme lien hypertexte et les '()' s tiennent le lien réel, [as so] (https://stackoverflow.com/editing-help#code). Bien que si vous pouvez créer un exemple plus petit qui montre mieux ce que vous luttez, ce sera plus facile pour les lecteurs de vous aider. –

+0

Oui, ce format de lien ne fonctionne pas avec les liens pasebin ... –

Répondre

0

Vous pouvez utiliser un tout:

import time 
end_time = time.time() + 5 
while 'Wait 5 seconds': 
    if a >= b: 
     ... 

    if time.time() > end_time: 
     break 

enlever également tous time.sleep() dans le code résoudra votre retard problème.

+0

N'est-ce pas dû à tous vos 'time.sleep()'? Avez-vous dessiné votre logique? Peut-être que c'est juste un problème d'algorithme. – Y0da

+0

Si je lance la version à 1 boucle en boucle, cela fonctionne parfaitement, donc je pense que ce n'est pas causé par le "time".sleep() "alors depuis que j'utilise simple" if "sans" while loops "pour compter le temps il mesure en temps réel en fait –

+0

Ma valeur" a "est une valeur en constante évolution, elle se met à jour en moins d'1 seconde, j'ai besoin pour savoir si a> = b pendant 5 secondes constamment, si elle baisse pour 1 lecture seulement (0,1 sec), elle doit redémarrer la "minuterie" de 5 secondes –