Daten von Arduino in GUI darstellen
Verfasst: Freitag 3. April 2015, 22:43
Hallo,
ich habe ein kleines Problem mit PyQt. Und zwar habe ich eine simple Arduino Schaltung aufgebaut, die mir über die Serielle Schnittstelle einen Spannungswert übergibt. Ebenfalls soll eine LED vom PC aus gesteuert werden. Soweit funktioniert auch alles bis auf eine Kleinigkeit. In der GUI wird das übertragene Signal nur beim Programmstart aktualisiert und danach nie mehr. Ich möchte jedoch, dass das Signal im Textfeld permanent, bzw. alle 100ms erneuert wird. Kann mir jemand auf die Sprünge helfen, wie sich das am einfachsten realisieren lässt?
Hier mein Code dazu:
Ich habe schon mit
experimentiert, aber da startet dann die GUI gar nicht mehr.
ich habe ein kleines Problem mit PyQt. Und zwar habe ich eine simple Arduino Schaltung aufgebaut, die mir über die Serielle Schnittstelle einen Spannungswert übergibt. Ebenfalls soll eine LED vom PC aus gesteuert werden. Soweit funktioniert auch alles bis auf eine Kleinigkeit. In der GUI wird das übertragene Signal nur beim Programmstart aktualisiert und danach nie mehr. Ich möchte jedoch, dass das Signal im Textfeld permanent, bzw. alle 100ms erneuert wird. Kann mir jemand auf die Sprünge helfen, wie sich das am einfachsten realisieren lässt?
Hier mein Code dazu:
Code: Alles auswählen
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
from window import Ui_MainWindow
import serial
import time
ser = serial.Serial('COM3', 9600, timeout=0)
class Main(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
#Connections
self.Connections()
self.Input()
def Connections(self):
self.ui.pushButton.clicked.connect(self.ON)
self.ui.pushButton_2.clicked.connect(self.OFF)
def Input(self):
#Hiermit wird die eingelesene Spannung in eine Textzeile geschrieben
self.ui.lineEdit.setText(str(ser.readline()))
#Steuerung der LED
def ON(self):
ser.write('1')
def OFF(self):
ser.write('0')
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = Main()
window.show()
sys.exit(app.exec_())
Code: Alles auswählen
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'qui.ui'
#
# Created: Fri Apr 03 22:38:30 2015
# by: PyQt4 UI code generator 4.9.6
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(800, 253)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.horizontalLayout_2 = QtGui.QHBoxLayout(self.centralwidget)
self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
self.lineEdit = QtGui.QLineEdit(self.centralwidget)
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
self.verticalLayout.addWidget(self.lineEdit)
self.horizontalLayout = QtGui.QHBoxLayout()
self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.horizontalLayout.addWidget(self.pushButton)
self.pushButton_2 = QtGui.QPushButton(self.centralwidget)
self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
self.horizontalLayout.addWidget(self.pushButton_2)
self.verticalLayout.addLayout(self.horizontalLayout)
self.horizontalLayout_2.addLayout(self.verticalLayout)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
self.pushButton.setText(_translate("MainWindow", "On", None))
self.pushButton_2.setText(_translate("MainWindow", "Off", None))
Code: Alles auswählen
def Input(self):
#Hiermit wird die eingelesene Spannung in eine Textzeile geschrieben
while True:
self.ui.lineEdit.setText(str(ser.readline()))