用Wiimote按钮按下Python退出循环

2024-03-29 09:40:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个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)

根据斯图尔特的回答,这里是固定回路

  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)

Tags: 脚本ifbuttongreenblueredstateprint
1条回答
网友
1楼 · 发布于 2024-03-29 09:40:22

wii.state['buttons']似乎是一个数字,因此将它存储在变量buttons中意味着当用户按下不同的按钮组合时,它不再被更新。你知道吗

要解决这个问题,只需每次将buttons替换为对wii.state['buttons']的直接引用。你知道吗

您可能需要考虑检查是否在每个blink之后按下B,如下所示:

from itertools import cycle
...
if wii.state['buttons'] & cwiid.BTN_A:
    print 'Button A pressed'
    print 'Press B to cancel loop'
    for colour in cycle([32, 38, 36, 40, 37, 35, 33, 31]):
        blink(colour)
        if wii.state['buttons'] & cwiid.BTN_B:
            break
    time.sleep(button_delay)

相关问题 更多 >