Обработка нажатия тактовой кнопки по 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 -