2017-10-04 17 views
-1

J'ai réussi à assembler ce bit ci-dessous en regardant d'autres scripts de capteur pir pour contrôler un ensemble de bandes de teinte. C'est probablement un million de meilleures façons de le faire, mais c'est là où je suis.Script simple en python pour le capteur de mouvement pir

Le problème est que ce script remplace tout ce que je fais de dire mon application de téléphone. Si j'allume les lumières de mon téléphone et qu'il n'y a aucun mouvement à côté du capteur, les lumières s'éteindront après une ou deux secondes. Ce que je veux éviter, je voudrais que ce script puisse être envahi par les contrôles ailleurs. Est-ce que quelqu'un pourrait m'aider avec ça?

Modifier; le time.sleep (60 * 30) est utilisé parce que je veux que la lumière reste allumée pendant 30 minutes après qu'il y ait eu un mouvement en face du capteur pir. Il y a probablement une meilleure solution quelque part?

Les deux scripts en cours d'exécution sont simplement un couple de scripts indiquant au pont de teinte d'allumer/d'éteindre les lumières. Laissez-moi savoir si ceux-ci sont nécessaires pour une raison quelconque et je les posterai.

import RPi.GPIO as GPIO 
import time 
GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BOARD) 
GPIO.setup(15, GPIO.IN) 
while True: 
i=GPIO.input(15) 
caseCommand = getinput() 
if (i==0) and (caseCommand == 0): 
    print "No movement detected - Turning lights off",i 
    exec(open("./LightsOff.py").read(), globals()) 
    time.sleep(1) 
if (i==1) or(caseCommand == 1): 
    print "Movement detected - Turning lights on",i 
    exec(open("./LightsOn.py").read(), globals()) 
    time.sleep(60 * 30) 

Modifier: le code est maintenant comme ci-dessus. Mais je ne sais pas comment écrire cette fonction. évidemment ce qui précède me donne une erreur sur la fonction ..

Répondre

0

votre programme fait exactement ce qu'il devrait faire !!!

s'il y a un mouvement (i = GPIO.input (15)) allume la lumière et si aucun mouvement il éteint la lumière !!!

vous devez mettre un cas supplémentaire dans votre déclaration if !!!

par exemple:

caseCommand = getinput() # getinput() is a function you should write, it should get the input from your phone or whatever and can return 0 or 1 

# your if statement should change 
if (i==0) and (caseCommand == 0): # both have to be 0 to turn off 
# turn lights off 
if (i==1) or(caseCommand == 1): # any one of them should turn the light on 
# turn light on 

ici est un exemple plus détaillé:

import RPi.GPIO as GPIO 
import time 
GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BOARD) 
GPIO.setup(15, GPIO.IN) 

def getinput(): 
    path = "pathtoyourfile\yourfilename.txt" 
    return_valu= "" 
    with open(path ,"r") as f: 
     for l in f: 
      return_value = l #it will get the last line incase you have more than one line 
    return return_value 


while True: 
    i=GPIO.input(15) 
    caseCommand = getinput() 
    if (i==0) and (caseCommand == 0): 
     print "No movement detected - Turning lights off",i 
     exec(open("./LightsOff.py").read(), globals()) 
     time.sleep(1) 
    if (i==1) or(caseCommand == 1): 
     print "Movement detected - Turning lights on",i 
     exec(open("./LightsOn.py").read(), globals()) 
     time.sleep(60 * 30) 

    # add a time.sleep 2 or 3 second so while loop takes a break and you can write on the file 
    time.sleep(2) 
+0

Stuck on écrit ladite fonction. Edited post ci-dessus avec le code actuel ... – Kimzr

+0

un exemple simple: créer un fichier texte sur votre bureau, lire le texte de votre fonction getinput(), dire si vous écrivez 1 dans le fichier texte, il doit allumer, 0 éteindre –