如何同时运行2条if语句

时间:2018-06-23 04:21:56

标签: if-statement while-loop gpio

我有此代码,但我遇到了问题,当第一个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()

1 个答案:

答案 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)