Обработка нажатия тактовой кнопки по GPIO
-
На Raspberry есть программа Pronterface. Нужно частично управление перенести на блок тактовых кнопок. Возникла проблема с кнопкой подключения принтера. За подключение принтера в GUI отвечает кнопка Connect, прописанная в коде как connectbtn.
wx.CallAfter(self.connectbtn.SetLabel, ("Connect"))
wx.CallAfter(self.connectbtn.SetToolTip, wx.ToolTip(("Connect to the printer")))
wx.CallAfter(self.connectbtn.Bind, wx.EVT_BUTTON, self.connect)
wx.CallAfter(self.gui_set_disconnected)Нажатие на кнопку вызывает def connect:
def connect(self, event = None):
self.log(("Connecting..."))
port = None
if self.serialport.GetValue():
port = str(self.serialport.GetValue())
else:
scanned = self.scanserial()
if scanned:
port = scanned[0]
baud = 115200
try:
baud = int(self.baud.GetValue())
except:
self.logError(("Could not parse baud rate: ")
+ "\n" + traceback.format_exc())
if self.paused:
self.p.paused = 0
self.p.printing = 0
wx.CallAfter(self.pausebtn.SetLabel, _("Pause"))
wx.CallAfter(self.printbtn.SetLabel, _("Print"))
wx.CallAfter(self.toolbarsizer.Layout)
self.paused = 0
if self.sdprinting:
self.p.send_now("M26 S0")
if not self.connect_to_printer(port, baud, self.settings.dtr):
return
if port != self.settings.port:
self.set("port", port)
if baud != self.settings.baudrate:
self.set("baudrate", str(baud))
if self.predisconnect_mainqueue:
self.recoverbtn.Enable()
Нужно продублировать эту кнопку тактовой кнопкой, подключенной к GPIO, чтобы вызвать connect. Но с использованием цикла это не работает. Возможно это сделать без использования цикла while?
Делал вот так:
GPIO.output(25,True)while True: if GPIO.input(23): self.connect() else: break time.sleep(0.1)
Полный код программы (без модулей) по ссылке ниже.
rghost.ru/8P2SXKC58