我正在尝试创建一个设置以使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
现在,当它启动时,频率变化部分似乎有些错误,因为它不是一直在阅读,或者我必须按下正确的时间。无论何时按下,断线都没有问题。
答案 0 :(得分:2)
应该只有一个kbfunc()
电话。将结果存储在变量中。
例如:如果密钥不是Esc
,则在您的代码中,您将再次阅读键盘。
答案 1 :(得分:1)
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)