我有这样的代码:
import RPi.GPIO as GPIO
import sys
from time import sleep
import Tkinter as tk
GPIO.setmode(GPIO.BOARD)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)
def forward(event):
GPIO.output(13, GPIO.HIGH)
sleep(0.2)
GPIO.output(13, GPIO.LOW)
def back(event):
GPIO.output(15, GPIO.HIGH)
sleep(0.2)
GPIO.output(15, GPIO.LOW)
def right(event):
GPIO.cleanup()
def left(event):
print("a")
def key_input(event):
print 'Key:', event.char
key_press = event.char
sleep_time = 0.030
if key_press.lower() == 'w':
forward(sleep_time)
elif key_press.lower() == 's':
back(sleep_time)
elif key_press.lower() == 'a':
left(sleep_time)
elif key_press.lower() == 'd':
right(sleep_time)
root = tk.Tk()
root.bind('<KeyPress>', key_input)
root.mainloop()当我在我的b3上运行它时,我有很大的滞后。如何改进代码运行不滞后,或如何改变它,以控制电机与我的键盘?
我只想让我的车向前,向后,向右,向左.我搜索它,我发现最常用的方法是用tkinter.
这是未完成的代码,只适用于一个马达。我试着使用新闻/发布事件,但不起作用。谁来帮帮我!!
发布于 2017-05-12 13:47:54
您不应该在gui程序中使用time.sleep,这就是您的延迟的来源,您也在传递期望某个事件的时间,然后无论如何忽略它?
import RPi.GPIO as GPIO
import sys
import Tkinter as tk
GPIO.setmode(GPIO.BOARD)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.bind('<KeyPress>', self.KeyDown)
self.bind('<KeyRelease>', self.KeyUp)
def KeyDown(self, event):
if event.char:
k = event.char.lower()
if k == 'w':
GPIO.output(13, GPIO.HIGH)
elif k == 'a':
GPIO.output(15, GPIO.HIGH)
elif k == 's':
pass
elif k == 'd':
pass
def KeyUp(self, event):
if event.char:
k = event.char.lower()
if k == 'w':
GPIO.output(13, GPIO.LOW)
elif k == 'a':
GPIO.output(15, GPIO.LOW)
elif k == 's':
GPIO.cleanup()
elif k == 'd':
print("a")
if __name__ == '__main__':
app = App()
app.mainloop()如果你把新闻和发布事件分开,你可以在你按下键的时候打开马达,当你释放它的时候关闭它,这应该可以消除你的大部分滞后。
https://stackoverflow.com/questions/43821585
复制相似问题