python 需要使用 getch 更快地响应

python need faster response with getch

我正在尝试创建一个设置来使 LED 闪烁并能够控制频率。 现在我只是打印 10s 作为测试的占位符。 一切都运行并做应该做的事,但 getch 让我失望。

freq = 1
while freq > 0:
    time.sleep(.5/freq) #half dutycycle / Hz
    print("1")
    time.sleep(.5/freq) #half dutycycle / Hz
    print("0")

    def kbfunc():
        return ord(msvcrt.getch()) if msvcrt.kbhit() else 0
    #print(kbfunc())

    if kbfunc() == 27: #ESC
        break
    if kbfunc() == 49: #one
        freq = freq + 10
    if kbfunc() == 48: #zero
        freq = freq - 10

现在当它启动时,频率变化部分似乎有问题,因为它不是一直在读取,或者我必须恰到好处地计时。但是,无论何时按下断线都没有问题。

应该只有一个 kbfunc() 调用。将结果存储在变量中。

例如:在您的代码中,如果键不是 Esc,您将再次读取键盘。

from msvcrt import getch,kbhit
import time

def read_kb():
    return ord(getch()) if kbhit() else 0
def next_state(state):
    return (state + 1)%2 # 1 -> 0, 0 -> 1

freq = 1.0 # in blinks per second
state = 0
while freq > 0:
    print(state)
    state = next_state(state)

    key = read_kb()

    if key == 27: #ESC
        break
    if key == 49: #one
        freq = freq + 1.0
    if key == 48: #zero
        freq = max(freq - 1.0, 1.0)

    time.sleep(0.5/freq)