我有此代码,但我遇到了问题,当第一个if语句运行时,我无法运行第二个if语句,直到最后一个延迟结束为止,并且如果第二个if语句开始,则无法运行第一句话,反之亦然
那么解决这个问题的代码应该是什么,我尝试了def却又无法满足我的需求
import RPi.GPIO as GPIO
import time
import lcddriver
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
display=lcddriver.lcd()
GPIO.cleanup()
# Configure Relay Output Pins
Relay1=31
Relay2=32
GPIO.setup(Relay1,GPIO.OUT)
GPIO.setup(Relay2,GPIO.OUT)
# Configure Relay Input Pins
IN1=29
IN2=15
GPIO.setup(IN1,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(IN2,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
while (1):
if GPIO.input(IN1)==1:
GPIO.output(Relay1,1)
display.lcd_clear()
display.lcd_display_string(" Input 1 ", 1)
display.lcd_display_string(" Opened ", 2)
time.sleep(0.5)
GPIO.output(Relay1,0)
display.lcd_clear()
time.sleep(1)
if GPIO.input(IN2)==1:
GPIO.output(Relay2,1)
display.lcd_clear()
display.lcd_display_string(" Input 2 ", 1)
display.lcd_display_string(" Opened ", 2)
time.sleep(0.5)
GPIO.output(Relay2,0)
time.sleep(1)
display.lcd_clear()
GPIO.cleanup()
答案 0 :(得分:1)
那是因为您不在多进程程序中 仅使用CPU的一个线程 如果确实需要同时运行两个if语句,则应更改代码,以使需要运行的部分位于同一if语句中
If condition1:
Part1
If condition2:
Part2
将成为
If condition3:
Part1
Part2
这是一个算法错误,您不应该在两个if之间将块分开
我建议使用这样的功能
def do_part_two():
Part2
def do_part_one():
Part1
If condition1:
Part1
do_part_two()
If condition2:
Part2
do_part_one()
但我仍然鼓励您更改if,以便您处于我的第一个解决方案中
NB: 您可以创建一个延迟函数并在需要时调用
def delay(x):
time.sleep(x)