【发布时间】:2017-10-12 18:55:56
【问题描述】:
我正在用raspberry pi 和python 做一个停车传感器
这是代码:
import RPi.GPIO as GPIO
import time
#from picamera import PiCamera
from time import sleep
from gpiozero import MotionSensor
import smtplib
sender = '*****@gmail.com'
reciever = '*****@gmail.com'
def BlueLED (): #Blue LED Function
GPIO.output(27, GPIO.HIGH)
time.sleep(3)
GPIO.output(27, GPIO.LOW)
def RedLED (): #Red LED Function
GPIO.output(22,GPIO.HIGH)
time.sleep(3)
GPIO.output(22, GPIO.LOW)
def Buzzer (): #Buzzer Function
GPIO.output(17, GPIO. HIGH)
time.sleep(3)
GPIO.output(17, GPIO.LOW)
def email(sender,reciever,msg):
try :
server = smtplib.SMTP('smtp.gmail.com',587)
server.ehlo()
server.starttls()
server.login(sender,'******')
server.sendmail(sender,reciever,msg)
server.close()
print('Email sent!')
except :
print('Error')
try :
GPIO.setmode(GPIO.BCM)
#camera = PiCamera()
pir = MotionSensor(4)
GPIO.setwarnings(False)
GPIO.setup(27, GPIO.OUT) #blueLED
GPIO.setup(22, GPIO.OUT) #redLED
GPIO.setup(17, GPIO.OUT) #buzzer
GPIO.setup(18, GPIO.OUT) #tempsensor
GPIO.setup(21, GPIO.IN, pull_up_down = GPIO.PUD_UP) #entry button
count = 0
while True :
if (pir.motion_detected):
print('Motion Detected')
#Calling the buzzer function
#Buzzer()
#The content that is going to be sent via email
msg = """Subject : Car Park
(Picture) """
email(sender,reciever,msg)
print('\nPlease press the button for the gate to open')
while True :
if(GPIO.input(21) == False):
if (count < 5):
BlueLED()
print('\nThere are ',(5-count), ' parking spaces empty ')
else :
RedLED()
print('\nSorry but the parking is full')
count = count + 1
except Exception as ex :
print('Error occured',ex)
我的问题是第一个 while 循环不起作用,即如果触发了运动传感器,则没有任何反应,但您可以重新按下按钮并增加计数。我猜想有一个简单的解决方案,但似乎没有想到。希望得到您的帮助,谢谢
【问题讨论】:
-
很不清楚你的问题是什么。 “我的问题是第一个 while 循环不起作用”是什么意思?
-
因为我有两个 while 循环,循环整个程序的那个不是无限循环。(即使这是它应该做的)。这意味着当运动传感器触发任何类型的运动时,什么都不会发生。是的,控制计数器和按钮的第二个 while 循环工作正常。因此,当您按下按钮时,即使这不会发生,计数器也会增加,因为应该首先触发运动传感器,然后才能按下按钮。希望这很清楚
标签: python while-loop infinite-loop