2017-08-28 2 views
1
condition = float(29.0) 

while True: 
     GPIO.output(17, GPIO.HIGH) 
     if temp_c < condition: 
       break 

La valeur temp_c est un flottant et change toutes les secondes. Lorsque la valeur temp_c est supérieure à 29,0, je souhaite que la sortie GPIO soit activée. Qu'est-ce qui ne va pas?Quel est le problème dans ce code python? ça a l'air bien

+1

Bien que je ne connaisse pas GPIO, il semble que plus d'informations soient nécessaires pour résoudre votre problème. –

+2

Où 'temp_c' est-il défini? Cela ne change pas dans la boucle while. –

Répondre

0

Vous définissez la broche 17 à HIGH, mais elle ne remonte pas à LOW. Vous devez définir explicitement revenir au niveau bas lorsque la condition est atteinte:

while True: 
    GPIO.output(17, GPIO.HIGH) 
    if temp_c < condition: 
     GPIO.output(17, GPIO.LOW) 
      break 

Mais le flux d'exécution n'est pas vraiment bon. Seraient mieux:

GPIO.output(17, GPIO.HIGH) 
while temp_c >= condition: 
    pass 
GPIO.output(17, GPIO.LOW) 

Ici, quelques choses doivent noter:

  • Si une broche est réglée à un niveau donné, il reste à ce niveau. Il n'est pas nécessaire de le configurer à plusieurs reprises, comme vous l'avez fait en appelant GPIO.output(17, GPIO.HIGH) dans votre boucle while;
  • Vous souhaitez attendre qu'une condition spécifique soit remplie. Par conséquent, il vous suffit de boucler tant qu'il n'est pas satisfait. Ceci est simplement fait par while not condition: pass, ou while not condition: continue (pass est une déclaration vide). Cela permet de se débarrasser du while True, qu'il est préférable d'éviter (bien que parfois nécessaire dans des contextes particuliers).
+0

cela ne fonctionne pas. La première fois que je l'ai couru, l'épingle est restée allumée et la deuxième fois, elle ne s'est pas allumée. – NullCoderExists

0

Vous appelez la fonction de sortie à chaque fois et de briser la boucle si la température est inférieure à 29. Si vous voulez que la valeur élevée si la température est supérieure à 29:

condition = float(29.0) 

while True: 
     if temp_c > condition: 
      GPIO.output(17, GPIO.HIGH) 
      break 
+0

ne fonctionne pas. rien ne se passe – NullCoderExists

0

Vous devrez tourner hors de la broche GPIO afin de voir tout changement.

Voici un correctif immédiat à votre problème:

if temp_c < condition: 
    GPIO.output(17, GPIO.LOW) 
    break 

Mais vous ne devez pas définir l'état de la broche à chaque itération. Une mise en œuvre plus efficace de ce que vous voulez serait ceci:

condition = float(29.0) 
GPIO.output(17, GPIO.HIGH) 
while True : 
    if temp_c < condition : 
     GPIO.output(17, GPIO.LOW) 
     break 

Vous pouvez le rendre plus efficace en déplaçant la condition if à la condition while, mais vous devez le faire en gardant à l'esprit le reste de votre temps bloc de code.

+0

Ne fonctionne pas. Rien ne se passe lorsque temp_c atteint 30 – NullCoderExists

+0

'if temp_c> condition', et non l'inverse – stevieb

+0

Votre question initiale était' Quand la valeur temp_c est supérieure à 29.0, je voudrais que la sortie GPIO soit activée. ' la réponse change la broche GPIO à «off» quand la valeur temp_c va «below» 29.0. – AbhiramH