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)
我正在尝试创建一个设置来使 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)