您好我一直在为我的python代码中的主文件创建一个无限的While True循环。我正在研究Raspberry Pi,我的目标是每当其中一个GPIO引脚检测到输入时,它就会打印出一个字符串。然而,当我按下一个按钮时,它将无限地打印它,它停止的唯一方法是按Ctrl-C。虽然它一遍又一遍地打印相同的字符串,但没有其他按钮会改变发生的事情。我做错了什么,我忘记了某个地方的一步?
import RPi.GPIO as GPIO
import time
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(26, GPIO.IN)
GPIO.setup(19, GPIO.IN)
GPIO.setup(13, GPIO.IN)
GPIO.setup(6, GPIO.IN)
input_A = GPIO.input(26)
input_B = GPIO.input(19)
input_C = GPIO.input(13)
input_D = GPIO.input(6)
while True:
if input_A == True:
print('A was pushed')
if input_B == True:
print('B was pushed')
if input_C == True:
print('C was pushed')
if input_D == True:
print('D was pushed')
sleep(1.5);
答案 0 :(得分:7)
您需要不断更新while循环中的input_*
变量
while True:
input_A = GPIO.input(26)
input_B = GPIO.input(19)
input_C = GPIO.input(13)
input_D = GPIO.input(6)
if input_A == True:
print('A was pushed')
if input_B == True:
print('B was pushed')
if input_C == True:
print('C was pushed')
if input_D == True:
print('D was pushed')
sleep(1.5);
答案 1 :(得分:1)
在每个if语句下的break
语句中。当你在它的时候,将第二个改为最后一个ifs to elifs。
while True:
if input_A == True:
print('A was pushed')
break
elif input_B == True:
print('B was pushed')
break
elif input_C == True:
print('C was pushed')
break
elif input_D == True:
print('D was pushed')
break
答案 2 :(得分:1)
宣布
时input_A = GPIO.input(26)
input_B = GPIO.input(19)
input_C = GPIO.input(13)
input_D = GPIO.input(6)
您正在为那些不会改变的变量赋值,因为您没有在循环内更新它们。
因此,您需要在循环中添加一行来更新输入A B C和D.
答案 3 :(得分:0)
为什么不尝试为每个if语句引入一个中断。它应该阻止它无限循环。
并更新您的变量,即输入应该在while循环中。
e.g
var arr = ['foo','bar','fizz', 'buzz'];
var match = false;
for (var i = 0; i < arr.length; i++) {
if (arr[i].includes('z')) {
match = true;
i = arr.length;
}
}
match; //=> true