2016-05-23 6 views
1

Ich habe Probleme beim Programmieren der Logik von 2 PIR Sensoren, um eine Nachricht in der Konsole zu drucken, wenn ein Benutzer beide Hände auf die PIR Sensoren legt PIR-Sensoren an den Raspberry Pi mit GPIO, GND und 5V-Port. Der Code, den ich momentan habe, druckt eine Nachricht in der Konsole aus, wenn jemand dort hinüber winkt, aber ich habe Schwierigkeiten, den Code zu ändern, um eine Fehlermeldung auszugeben, wenn jemand seine Hand auf beide PIR-Sensoren schwenkt.NameError: Name 'TRUE' ist nicht definiert PIR Sensoren

enter image description here

Wir können Eingabe von dem Sensor mit GP4 lesen und GP17

Dies ist die Fehlermeldung erhalte ich, wenn ich meinen Code ausführen.

Traceback (most recent call last): 
    File "peter.py", line 22, in <module> 
    if current_state2(TRUE) and current_state(TRUE) != previous_state2(FALSE) and previous_state(FALSE): 
NameError: name 'TRUE' is not defined 

Dies ist der Code

import RPi.GPIO as GPIO 
    import time 

    sensor = 4 
    sensor2 = 17 
    GPIO.setmode(GPIO.BCM) 
    GPIO.setup(sensor, GPIO.IN, GPIO.PUD_DOWN) 
    GPIO.setup(sensor2, GPIO.IN, GPIO.PUD_DOWN) 

    previous_state = False 
    current_state = False 

    previous_state2 = False 
    current_state2 = False 

    while True: 
     time.sleep(0.1) 
     previous_state = current_state 
     previous_state2 = current_state2 
     current_state = GPIO.input(sensor) 
     current_state2 = GPIO.input(sensor2) 
     if current_state2(TRUE) and current_state(TRUE) != previous_state2(FALSE) and previous_state(FALSE): 

      new_state = "HIGH" if current_state else "LOW" 
      new_state2 = "HIGH" if current_state2 else "LOW" 

      print("GPIO pin %s is %s" % (sensor, new_state, sensor2, new_state2)) 

Das Programm ist ziemlich einfach. Die GPIO-Pins des Raspberry Pi ermöglichen es uns, Pin 4 als Eingabe zu verwenden; Es kann dann erkennen, wenn das PIR-Modul Strom sendet. Der Pin prüft ständig auf Änderungen, verwendet dafür eine True-Schleife. Dies ist eine Endlosschleife, so dass das Programm kontinuierlich ausgeführt wird, es sei denn, wir stoppen es manuell mit Strg + C. Verwenden Sie dann zwei boolesche Variablen (Wahr oder Falsch) für den vorherigen und aktuellen Zustand des Pins, wobei der vorherige Zustand der aktuelle Zustand war die vorhergehende Zeit um die Schleife

Antwort

1

In Python "True" verwenden, nicht "TRUE":

if True: 
     print("True") 
else: 
     print("False") 

auch ändern:

if current_state2(TRUE) and current_state(TRUE) != previous_state2(FALSE) and previous_state(FALSE): 

An:

if current_state2==True and current_state != previous_state2 and previous_state==False: 
+0

Entferne ich while und weise eine "if" Anweisung zu? –

+0

Rasmus Friis Kjeldsen, Die Anweisung muss umlaufen, also entferne ich die while-Anweisung? –

+0

Nein, behalte das nur! –