Я задавал этот вопрос раньше, и пользователь был достаточно хорош, чтобы ответить на него. Я воспользовался его предложениями и обнаружил, что код вообще не работает, после исследования и возни с ним я зашел в тупик. Вот что я хочу сделать:
Я хочу управлять двумя Arduino, используя последовательное соединение между Arduino и Raspberry Pi, и я использую Python для управления ими. Я использую интерфейс GUI и библиотеку tkinter для создания кнопок.
Первоначальная проблема заключалась в том, что информация будет проходить через Arduino только тогда, когда пользователь перестанет нажимать кнопку, и мне нужно было, чтобы информация отправлялась, как только кнопка была нажата, и непрерывно, пока кнопка не была отпущена. Участник предложил использовать lambda.
Хотя это не сработало, как было предложено, я чувствую, что у него могла быть правильная идея, вот код, который я придумал после его предложения.
import serial
running = True
ser = serial.Serial('/dev/ttyUSB0')
def send_data(self):
if self.char is not None:
ser.write(self.char)
#run again in 100ms. Here is where you control how fast
#to send the data. The first parameter to after is a number
#of milliseconds to wait befor calling the function
self.job=self.after(100,self.send_data)
class Application(Frame):
"""Defining the remote control buttons"""
def __init__(self,master):
self.char = []
self.job = []
self.send_data = []
"""Initialize the frame"""
Frame.__init__(self,master)
self.grid() # How many times has the user clicked the button
self.create_widgets()
def set_char(self,char):
self.char=char
def create_widgets(self):
"""Creates four buttons that move the servos"""
#Create the 'up' button
self.button1=Button(self,text="Up")
self.button1.bind("<ButtonPress-1>",lambda x:self.set_char('1'))
self.button1.bind("<ButtonRelease-1>",lambda x:self.set_char(None))
self.button1.grid()
send_data(self)
#Create the 'down' button
self.button2=Button(self,text="Down")
self.button2.bind("<ButtonPress>",lambda x:self.set_char('2'))
self.button2.bind("<ButtonRelease>",lambda x:self.set_char(None))
self.button2.grid()
#Create the 'left' button
self.button3=Button(self,text="Left")
self.button3.bind("<ButtonPress-3>",lambda x:self.set_char('3'))
self.button3.bind("<ButtonRelease-3>",lambda x:self.set_char(None))
self.button3.grid()
#creeate the 'right' button
self.button4=Button(self,text="Right")
self.button4.bind("<ButtonPress-4>",lambda x:self.set_char('4'))
self.button4.bind("<ButtonRelease-4>",lambda x:self.set_char(None))
self.button4.grid()
#Main
root = Tk()
root.title("Remote control")
root.geometry("250x250")
app = Application(root)
root.mainloop()
self.char = []
, но проверяетеNone
. И этоself.send_data = []
, но затем вы пытаетесь запланировать его как вызываемый метод вself.job=self.after(100,self.send_data)
. - person tdelaney   schedule 08.02.2016