我是Python和RPi的新手。我会尽量使我的问题和示例代码尽可能通用。
我正在进行这种实现,我需要三个线程进行通信:
第一个线程只等待两个标志之一,全局变量flag1
和flag2
变为TRUE
。
第二个线程等待来自用户的输入。如果用户输入“a”,则标志仍为FALSE
。但是,如果用户输入任何其他字符串,flag1
将变为TRUE
。
当按下按钮时,第三个线程会查看GPIO引脚并将flag2
设置为TRUE
。
import threading
import time
import RPI.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_UP) #set GPIO 11 to PULL-UP input
flag1 = FALSE
flag2 = FALSE
def thread1():
global flag1
global flag2
while 1:
while flag1 == TRUE:
print "flag1"
flag1 = FALSE ##clear this flag
while flag2 == TRUE:
print "flag2"
flag2 = FALSE ##clear this flag
time.sleep(0.0001)
def button():
global flag1
if (GPIO.input(11) == True): #button is NOT pressed
flag1 = FALSE
else:
flag2 = TRUE
time.sleep(0.0001)
def input():
global flag2
x = "a"
while (flag1 == FALSE) and (flag2 == FALSE):
y = raw_input("input: ")
if x == y:
print "input is a"
flag1 = FALSE
else:
print "input is not a"
flag1 = TRUE
t1 = threading.Thread(target = thread1)
t2 = threading.Thread(target = button)
t3 = threading.Thread(target = input)
t1.start()
t2.start()
t3.start()
while True:
time.sleep(0.0001)
在提出这个问题之前,我独立编写了线程并且它们工作正常。但是我现在在将它们组合在一个程序中并使它们进行通信时遇到了麻烦。我认为我的问题是由于raw_input()
函数的顺序性质。有替代方案吗?如果有帮助的话,我正在使用Python 2.7.3。任何提示或“编程优化”也将不胜感激。谢谢!
PS:我输入的硬件模拟带回车符的键盘。