【发布时间】:2016-01-06 18:38:33
【问题描述】:
我正在编写一个 python 脚本,该脚本将使用 cwiid 库通过 Wiimote 控制 LED。该程序识别 wiimote 并能够启动循环,但是当用户按遥控器上的“B”时它不会让我停止循环。这是相关代码,如果需要,我可以提供脚本的其余部分。谢谢。
buttons = wii.state['buttons']
...
if (buttons & cwiid.BTN_A):
print 'Button A pressed'
print 'Press B to cancel loop'
keepRunning = True
while keepRunning:
blink(32)#5v green
blink(38)#5v yellow
blink(36)#5v blue
blink(40)#5v red
blink(37)#3v3 green
blink(35)#3v3 yellow
blink(33)#3v3 blue
blink(31)#3v3 red
if (buttons & cwiid.BTN_B):
keepRunning = False
time.sleep(button_delay)
这是每个 Stuart 的答案的固定循环
if (buttons & cwiid.BTN_A):
print 'Button A pressed'
print 'Press B to cancel loop'
keepRunning = True
while keepRunning:
blink(32)#5v green
blink(38)#5v yellow
blink(36)#5v blue
blink(40)#5v red
blink(37)#3v3 green
blink(35)#3v3 yellow
blink(33)#3v3 blue
blink(31)#3v3 red
buttons = wii.state['buttons']#added in this line
if (buttons & cwiid.BTN_B):
keepRunning = False
time.sleep(button_delay)
【问题讨论】:
-
另外,没有必要在嵌套的
if语句中再次检查buttons,因为第一个if保证了这一点。 -
如果我保持代码不变,只是切换 keepRunning = False 来中断,它不起作用,所以程序永远不会进入第二个 if 语句。如果我删除按钮,那么我的第二个 if 语句是 if(cwiid.BTN_B): break 或 keepRunning = False 那么程序将运行一次循环(击中所有闪烁)然后无论是否按下 B 都终止
-
您确定
cwiid.BTN_B正确映射到B? -
不知道这个库,但大概你需要检查
wii.state['buttons'] & cwiid.BTN_B而不是将wii.state['buttons']的值存储在一个变量中,当用户按下不同的按钮时它不会改变。跨度> -
@N.Wouda 是的,我已经在同一个程序中测试过了。