Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 11, 2016 23:31:01

ricof
Зарегистрирован: 2016-04-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка нажатия тактовой кнопки (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.setmode(GPIO.BCM)
 GPIO.setup(23,GPIO.IN)
 while True:
        if GPIO.input(23):
             self.connect()
        else:
             break
        time.sleep(0.1)

Полный код программы (без модулей) ниже.

Прикреплённый файлы:
attachment pronterface.py (98,3 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version