我的While True循环卡在python中

时间:2015-06-23 01:34:06

标签: python while-loop raspberry-pi infinite-loop raspbian

您好我一直在为我的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);

4 个答案:

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