Seite 1 von 1
PyQt5 Progress mit ext Variablen Updaten
Verfasst: Donnerstag 10. Oktober 2019, 03:49
von starstrike
Hallo zusammen,
nach stundenlangem rumprobieren und lesen wende ich mich an euch.
Ich habe ein Programm Namens Tempauslesen.py geschrieben. Dieses Funktioniert und berechnet mir die aktuelle Raumtemp über einen Pt100.
Nun möchte ich den Wert in einer ProgressBar wiedergeben und jede Sekunde aktualisiert bekommen. Leider bekomme ich das einfach nicht ans Laufen.
Code: Alles auswählen
import sys
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar
from PyQt5.QtCore import Qt
import Tempauslesen
class Example(QMainWindow):
def __init__(self):
super(Example,self).__init__()
self.pbar = QProgressBar(self)
self.pbar.setGeometry(30,40,200,25)
self.pbar.setValue(Temp0)
self.setWindowTitle("QT Progressbar Example")
self.setGeometry(32,32,320,200)
self.show()
self.timer = QTimer()
self.timer.timeout.connect(self.handleTimer)
self.timer.start(1)
def handleTimer(self)
value = self.pbar.value(Temp0)
if value <300:
value = value+0
self.pbar.setValue(value)
else:
self.timer.stop()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
der Importbefehl funktioniert und über print('Temp0') bekomme ich auch in der Gui anwendung die aktuelle Raumtemp angezeigt.
Leider fehlt mir der richtige Weg.
Vielleicht kann mir jemand weiterhelfen.
Gruß aus NRW
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Donnerstag 10. Oktober 2019, 07:09
von Sirius3
Das kann nicht funktionieren, denn `Temp0` wird nirgends definiert. Wenn Du hier Code postest, dann so, dass er auch funktioniert.
Variablennamen werden wie Modulnamen komplett klein geschrieben (PyQt ist da wegen seines C++-Hintergrunds eine Ausnahme). Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht Tabs.
In `handleTimer` wird ein `pbar.value` aufgerufen, das so nicht funktioniert. Und auch wenn es `setValue` wäre, der Rückgabewert macht keinen Sinn. Was soll zudem die 300?
Und auch wenn Temp0 irgendwoher magisch kommt, wo wird der Wert aktualisiert?
Jede Millisekunde einen neuen Temperaturwert ist etwas viel. Mehr als 50 Aktualisierungen pro Sekunde nimmt das Auge eh nicht wahr. Und auch dann wird sich die Temperatur zwischen zwei Messungen nicht merklich ändern.
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Donnerstag 10. Oktober 2019, 07:59
von __blackjack__
@starstrike: Das kann nicht der Code sein den Du tatsächlich laufen lässt, denn der kommt nicht am Compiler vorbei, weil da bei einer Methodendefinition der Doppelpunkt fehlt.
Man sollte auch keine kryptischen Abkürzungen verwenden. Also nicht `pbar` wenn man `progress_bar` meint.
``value = value + 0`` macht keinen Sinn.
`handleTimer()` und `value` in dieser Methode könnten wesentlich besser benannt werden.
Die Argumente bei `super()` sind überflüssig.
Die `show()`-Methode ruft man nicht in der `__init__()` des Widgets auf das damit angezeigt werden soll.
Du importierst das `Temperaturauslesen`-Modul, machst Dann aber gar nichts damit. Da sollte ja eine Funktion definiert sein, mit der man die aktuelle Temperatur auslesen kann. Die musst Du dann auch regelmässig aufrufen um den Wert dann darstellen zu können.
Das könnte dann ungefähr so aussehen:
Code: Alles auswählen
#!/usr/bin/env python3
import sys
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar
import temperatur_auslesen
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.progress_bar = QProgressBar(self)
self.progress_bar.setGeometry(30, 40, 200, 25)
self.setWindowTitle("QT Progressbar Example")
self.setGeometry(32, 32, 320, 200)
self.timer = QTimer()
self.timer.timeout.connect(self.update_temperature)
self.timer.start(1000)
def update_temperature(self):
temperature = temperatur_auslesen.get_temperature()
if temperature < 300:
self.progress_bar.setValue(temperature)
else:
self.timer.stop()
def main():
app = QApplication(sys.argv)
example = Example()
example.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Donnerstag 10. Oktober 2019, 17:05
von starstrike
Hallo zusammen,
danke für die Hilfe.
Mein Tempauslesen.py Programm:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM) #Verwendung der GPIO-Zahlen anstelle der
#Pin-Nummer
HIGH = True #High-Pegel
LOW = False #Low-Pegel
def readAnalogData(adcChannel, SCLKPin, MOSIPin, MISOPin, CSPin):
# Pegel vorbereiten
GPIO.output (CSPin, HIGH)
GPIO.output (CSPin, LOW)
GPIO.output(SCLKPin, LOW)
sendcmd = adcChannel
sendcmd |= 0b00011000
# Senden der Bitkombination (Es finden nur 5 Bit Beruecksichtigung)
for i in range(5):
if (sendcmd & 0x10): # Bit an Pos 4 pruefen. Zaehlung bei 0
GPIO.output(MOSIPin, HIGH)
else:
GPIO.output(MOSIPin, LOW)
# Negative Flanke des Clocksignals generieren
GPIO.output(SCLKPin, HIGH)
GPIO.output(SCLKPin, LOW)
sendcmd <<= 1 # Bitfolge eine Position nach links schieben
#Empfangen der Daten des ADC
adcvalue = 0 #Ruecksetzen des gelesenen Wertes
for i in range(11):
GPIO.output(SCLKPin, HIGH)
GPIO.output(SCLKPin, LOW)
adcvalue <<=1 #1 Position nach links schieben
if (GPIO.input(MISOPin)):
adcvalue |= 0x01
time.sleep(2)
return adcvalue
# Variablendefinition
ADC_Channel0 = 0 # Analog/Digital-Channel
SCLK = 11 # Serial-Clock
MOSI = 10 # Master-Out-Slave-In
MISO = 9 # Master-In-Slave-Out
CS = 8 # Chip-Select
# Pin-Programmierung
GPIO.setwarnings(False)
GPIO.setup(SCLK, GPIO.OUT)
GPIO.setwarnings(False)
GPIO.setup(MOSI, GPIO.OUT)
GPIO.setwarnings(False)
GPIO.setup(MISO, GPIO.IN)
GPIO.setwarnings(False)
GPIO.setup(CS, GPIO.OUT)
def Temperatur1():
Temp0_Umrechnen0 = readAnalogData(ADC_Channel0, SCLK, MOSI, MISO, CS)
Temp0_R_AmPT100_0 = ((Temp0_Umrechnen0*0.0032)*330)/(3.3*(1-((Temp0_Umrechnen0*0.0032)/3.3)))
Temp0= (Temp0_R_AmPT100_0-100)/0.39
so und jetzt das neue mit der Statusbar:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar
class Example(QMainWindow):
def __init__(self):
super(Example,self).__init__()
self.progress_bar = QProgressBar(self)
self.progress_bar.setGeometry(30, 40, 200, 25)
self.setWindowTitle("QT Progressbar Example")
self.setGeometry(32, 32, 320, 200)
self.timer = QTimer()
self.timer.timeout.connect(self.update_temperature)
self.timer.start(1000)
def update_temperature(self):
import Tempauslesen
temperature = Tempauslesen.Temperatur1()
if temperature < 300:
self.progress_bar.setValue(str(temperature)
else:
self.timer.stop()
def main():
app = QApplication(sys.argv)
example = Example()
example.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Ich bekomme die ganze Zeit bei else: einen Fehler den ich nicht loswerde. (invalid Syntax)
vielleicht weiss jemand weiter =)
gruß aus NRW
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Donnerstag 10. Oktober 2019, 17:08
von __blackjack__
@starstrike: Da passen die Klammern in der Zeile davor nicht, da fehlt eine.
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Donnerstag 10. Oktober 2019, 17:16
von Sirius3
Da gibt's nicht nur einen Syntaxfehler sondern auch noch eine ganze Menge Einrückfehler. Der Syntaxfehler ist in der Zeile davor zu suchen.
Alle Importe sollten am Anfang der Datei stehen. Warnings sollten behoben werden und nicht 5mal ignoriert werden. Dazu benutzt man am besten eine Setup- und eine Cleanup-Funktion, die aus der main heraus aufgerufen werden. Module sollten ohne Nebeneffekte importierbar sein.
Was sollen denn die vielen Nullen bei `Temp0_Umrechnen0`? Das ist eigentlich ein Spannungswert, der dann in einen Widerstand umgerechnet wird, der dann in eine Temperatur umgerechnet wird. Funktionen sollten nach Tätigkeiten benannt werden `Temperatur1` ist das nicht, und die 1 macht auch keinen Mehrwert.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs, und man sollte nicht versuchen, = mit Leerraum schön untereinander anzuordnen, denn dann passiert leicht sowas, wie Du da bei CS hast. Auch Konstanten sollten nicht aus kryptischen Abkürzungen bestehen, wenn man dann auch noch Kommentare braucht, um die Abkürzung zu erklären.
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Donnerstag 10. Oktober 2019, 17:34
von starstrike
danke für die schnellen Antworten.
Ich möchte schlussendlich 8 verschiedene Temperaturen auslesen. Das funktioniert auch. Deswegen Temp0 die Temperatur von Channel0...
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar
import Tempauslesen
class Example(QMainWindow):
def __init__(self):
super(Example,self).__init__()
self.progress_bar = QProgressBar(self)
self.progress_bar.setGeometry(30, 40, 200, 25)
self.setWindowTitle("QT Progressbar Example")
self.setGeometry(32, 32, 320, 200)
self.timer = QTimer()
self.timer.timeout.connect(self.update_temperature)
self.timer.start(1000)
def update_temperature(self):
temperature = Tempauslesen.Temperatur1()
if temperature < 300:
self.progress_bar.setValue(str(temperature))
else:
self.timer.stop()
def main():
app = QApplication(sys.argv)
example = Example()
example.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Ich dreh langsam durch, wenn ich das mit 4 Punkten einrücke, bekomme ich nur noch Fehler. was eine Katastrophe
aktuell bekomme ich diesen Fehlercode:
qt5ct: using qt5ct plugin
Traceback (most recent call last):
File "Übung.py", line 41, in <module>
main()
File "Übung.py", line 35, in main
example = Example()
File "Übung.py", line 21, in __init__
self.timer.timeout.connect(self.update_temperature)
AttributeError: 'Example' object has no attribute 'update_temperature'
liebe Grüße aus NRW
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Donnerstag 10. Oktober 2019, 17:53
von Sirius3
`def update_temperature` ist gar nicht eingerückt,danach rückst Du noch immer mit Tabs ein. Wenn Du mehrere Temperaturen per Channel lesen willst, dann ist das ein Argument, und kein Zusatz an den Funktionsnamen.
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Donnerstag 10. Oktober 2019, 18:48
von starstrike
so ich habe jetzt alles hoffentlich vernünftig eingerückt.
Tempauslesen.py :
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM) #Verwendung der GPIO-Zahlen anstelle der
#Pin-Nummer
HIGH = True #High-Pegel
LOW = False #Low-Pegel
def readAnalogData(adcChannel, SCLKPin, MOSIPin, MISOPin, CSPin):
# Pegel vorbereiten
GPIO.output (CSPin, HIGH)
GPIO.output (CSPin, LOW)
GPIO.output(SCLKPin, LOW)
sendcmd = adcChannel
sendcmd |= 0b00011000
# Senden der Bitkombination (Es finden nur 5 Bit Beruecksichtigung)
for i in range(5):
if (sendcmd & 0x10): # Bit an Pos 4 pruefen. Zaehlung bei 0
GPIO.output(MOSIPin, HIGH)
else:
GPIO.output(MOSIPin, LOW)
# Negative Flanke des Clocksignals generieren
GPIO.output(SCLKPin, HIGH)
GPIO.output(SCLKPin, LOW)
sendcmd <<= 1 # Bitfolge eine Position nach links schieben
#Empfangen der Daten des ADC
adcvalue = 0 #Ruecksetzen des gelesenen Wertes
for i in range(11):
GPIO.output(SCLKPin, HIGH)
GPIO.output(SCLKPin, LOW)
adcvalue <<=1 #1 Position nach links schieben
if (GPIO.input(MISOPin)):
adcvalue |= 0x01
time.sleep(2)
return adcvalue
# Variablendefinition
ADC_Channel0 = 0 # Analog/Digital-Channel
#ADC_Channel1 = 1
#ADC_Channel2 = 2
#ADC_Channel3 = 3
#ADC_Channel4 = 4
#ADC_Channel5 = 5
#ADC_Channel6 = 6
#ADC_Channel7 = 7
SCLK = 11 # Serial-Clock
MOSI = 10 # Master-Out-Slave-In
MISO = 9 # Master-In-Slave-Out
CS = 8 # Chip-Select
# Pin-Programmierung
GPIO.setwarnings(False)
GPIO.setup(SCLK, GPIO.OUT)
GPIO.setwarnings(False)
GPIO.setup(MOSI, GPIO.OUT)
GPIO.setwarnings(False)
GPIO.setup(MISO, GPIO.IN)
GPIO.setwarnings(False)
GPIO.setup(CS, GPIO.OUT)
Temp0_Umrechnen0 = readAnalogData(ADC_Channel0, SCLK, MOSI, MISO, CS)
Temp0_R_AmPT100_0 = ((Temp0_Umrechnen0*0.0032)*330)/(3.3*(1-((Temp0_Umrechnen0*0.0032)/3.3)))
Temp0= (Temp0_R_AmPT100_0-100)/0.39
class Temperatur1():
def Temperatur0(self):
Temperatur0 = Temp0
#Temp0_Umrechnen0 = readAnalogData(ADC_Channel0, SCLK, MOSI, MISO, CS)
#Temp0_R_AmPT100_0 = ((Temp0_Umrechnen0*0.0032)*330)/(3.3*(1-((Temp0_Umrechnen0*0.0032)/3.3)))
#Temp0= (Temp0_R_AmPT100_0-100)/0.39
#Temp1_Umrechnen1 = readAnalogData(ADC_Channel1, SCLK, MOSI, MISO, CS)
#Temp1_R_AmPT100_1 = ((Temp1_Umrechnen1*0.0032)*330)/(3.3*(1-((Temp1_Umrechnen1*0.0032)/3.3)))
#Temp1= (Temp1_R_AmPT100_1-100)/0.39
#Temp2_Umrechnen2 = readAnalogData(ADC_Channel2, SCLK, MOSI, MISO, CS)
#Temp2_R_AmPT100_2 = ((Temp2_Umrechnen2*0.0032)*330)/(3.3*(1-((Temp2_Umrechnen2*0.0032)/3.3)))
#Temp2= (Temp2_R_AmPT100_2-100)/0.39
#Temp3_Umrechnen3 = readAnalogData(ADC_Channel3, SCLK, MOSI, MISO, CS)
#Temp3_R_AmPT100_3 = ((Temp3_Umrechnen3*0.0032)*330)/(3.3*(1-((Temp3_Umrechnen3*0.0032)/3.3)))
#Temp3= (Temp3_R_AmPT100_3-100)/0.39
#Temp4_Umrechnen4 = readAnalogData(ADC_Channel4, SCLK, MOSI, MISO, CS)
#Temp4_R_AmPT100_4 = ((Temp4_Umrechnen4*0.0032)*330)/(3.3*(1-((Temp4_Umrechnen4*0.0032)/3.3)))
#Temp4= (Temp4_R_AmPT100_4-100)/0.39
#Temp5_Umrechnen5 = readAnalogData(ADC_Channel5, SCLK, MOSI, MISO, CS)
#Temp5_R_AmPT100_5 = ((Temp5_Umrechnen5*0.0032)*330)/(3.3*(1-((Temp5_Umrechnen5*0.0032)/3.3)))
#Temp5= (Temp5_R_AmPT100_5-100)/0.39
#Temp6_Umrechnen6 = readAnalogData(ADC_Channel6, SCLK, MOSI, MISO, CS)
#Temp6_R_AmPT100_6 = ((Temp6_Umrechnen6*0.0032)*330)/(3.3*(1-((Temp6_Umrechnen6*0.0032)/3.3)))
#Temp6= (Temp6_R_AmPT100_6-100)/0.39
#Temp7_Umrechnen7 = readAnalogData(ADC_Channel7, SCLK, MOSI, MISO, CS)
#Temp7_R_AmPT100_7 = ((Temp7_Umrechnen7*0.0032)*330)/(3.3*(1-((Temp7_Umrechnen7*0.0032)/3.3)))
#Temp7= (Temp7_R_AmPT100_7-100)/0.39'''
#print (Temp0),('C Channel0')
#print (Temp1),('C Channel1')
#print (Temp2),('C Channel2')
#print (Temp3),('C Channel3')
#print (Temp4),('C Channel4')
#print (Temp5),('C Channel5')
#print (Temp6),('C Channel6')
#print (Temp7),('C Channel7')'''
und das hier meine Statusbar:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar
from Tempauslesen import Temperatur1
class Example(QMainWindow):
def __init__(self):
super(Example,self).__init__()
self.progress_bar = QProgressBar(self)
self.progress_bar.setGeometry(30, 40, 200, 25)
self.setWindowTitle("QT Progressbar Example")
self.setGeometry(32, 32, 320, 200)
self.timer = QTimer()
self.timer.timeout.connect(self.update_temperature)
self.timer.start(1000)
def update_temperature(self):
temperature = Tempauslesen.Temperatur1()
if temperature < 500:
self.progress_bar.setValue(temperature)
else:
self.timer.stop()
def main():
app = QApplication(sys.argv)
example = Example()
example.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Als Error beim ausführen von meiner Statusbar:
qt5ct: using qt5ct plugin
Traceback (most recent call last):
File "Übung.py", line 25, in update_temperature
temperature = Tempauslesen.Temperatur1()
NameError: global name 'Tempauslesen' is not defined
Aborted
Ich vermute, dass ich in Tempauslesen.py die Klasse Temperatur1 oder def Temperatur0 eine falsche, oder keine Temperatur speichere.
Oder in der Statusbar falsch importiere ggf. den Temperaturwert nicht in "temperature" geladen bekomme.
Vielleicht weiss ja jemand weiter...
Gruß aus NRW
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Donnerstag 10. Oktober 2019, 19:07
von Sirius3
Du mußt nicht in irgendeinem Modul nach dem Fehler suchen, sondern dort, wo der Fehler auftritt. Wo, denkst Du, ist der Name `Tempauslesen` definiert?
Was bedeutet `Tempauslesen.Temperatur1`?
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Samstag 12. Oktober 2019, 17:12
von starstrike
Hallo zusammen,
Ich habe es hinbekommen! Es musste einiges geändert in beiden Dateien.
Das Gui Programm sieht nun wie folgt aus:
Code: Alles auswählen
from PyQt5 import QtCore, QtGui, QtWidgets
from Tempauslesen_Test import Temperatur1
from PyQt5.QtCore import QTimer
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(300, 300)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar.setGeometry(QtCore.QRect(80, 120, 118, 24))
self.progressBar.setMaximum(0)
self.progressBar.setMaximum(200)
#self.progressBar.setProperty(0)
self.progressBar.setObjectName("progressBar")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 300, 28))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.timer = QTimer()
self.timer.timeout.connect(self.update_temperature)
self.timer.start(1)
def update_temperature(self):
temperature = Temperatur1()
if temperature < 500:
self.progressBar.setValue((temperature)*2)
else:
self.timer.stop()
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Temperatur1"))
self.progressBar.setFormat(_translate("MainWindow", "%p°C"))
if __name__ == "__main__":
while True:
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
update_temp()
Funktioniert!
Es gibt nur ein Problem, er zeigt mir die Temperatur nur von 0-100°C an.
Ich möchte aber, dass er sie bis 200°C anzeigt. Dies habe ich bei Max Value auch angegeben...
Leider finde ich dazu nichts im Internet.
Gruß aus NRW
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Samstag 12. Oktober 2019, 17:20
von __deets__
Zum einen hast du zweimal den Maximalwert angegeben. Erst mit 0, dann mit 200. Ich nehme mal an, das erste mal soll Minimal sein?
Und zum zweiten multiplizierst du den Temperaturwert mit 2, bevor du ihn als Progress-Bar-Value setzt. Womit also 100 zu 200 wird, und dein Maximalwert erreicht ist.
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Samstag 12. Oktober 2019, 17:29
von starstrike
Danke! Zu viel rumprobiert. Es gibt jetzt nur noch einmal ein Maximum von 200. Und die Multiplikation ist raus.
Trotzdem zeigt er nur bis maximal 100°C an.
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Samstag 12. Oktober 2019, 17:51
von __deets__
Kann man ohne Code nix zu sagen. Und zwar *allen* Code.
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Samstag 12. Oktober 2019, 17:52
von Sirius3
Was sagt denn dein Sensor? Kann der bis 200 messen?
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Samstag 12. Oktober 2019, 18:11
von starstrike
Mein Sensor kann bis 180 messen.
Aktuell habe ich am MPC3008 einen 10KOhm Poti angeschlossen und es einfacher zu testen.
ich kann im reinen Tempauslesen programm , die Temp auf 100 bis 200 stellen und dann die Statusbar öffnen.
Aber alles über 100 wird nicht angezeigt.
0-100 funktioniert 1a
Tempauslesen_Test.py :
Code: Alles auswählen
#!/usr/bin/env python
import time
import RPi.GPIO as GPIO
import sys
GPIO.setmode(GPIO.BCM) #Verwendung der GPIO-Zahlen anstelle der
#Pin-Nummer
HIGH = True #High-Pegel
LOW = False #Low-Pegel
def readAnalogData(adcChannel, SCLKPin, MOSIPin, MISOPin, CSPin):
# Pegel vorbereiten
GPIO.output (CSPin, HIGH)
GPIO.output (CSPin, LOW)
GPIO.output(SCLKPin, LOW)
sendcmd = adcChannel
sendcmd |= 0b00011000
# Senden der Bitkombination (Es finden nur 5 Bit Beruecksichtigung)
for i in range(5):
if (sendcmd & 0x10): # Bit an Pos 4 pruefen. Zaehlung bei 0
GPIO.output(MOSIPin, HIGH)
else:
GPIO.output(MOSIPin, LOW)
# Negative Flanke des Clocksignals generieren
GPIO.output(SCLKPin, HIGH)
GPIO.output(SCLKPin, LOW)
sendcmd <<= 1 # Bitfolge eine Position nach links schieben
#Empfangen der Daten des ADC
adcvalue = 0 #Ruecksetzen des gelesenen Wertes
for i in range(11):
GPIO.output(SCLKPin, HIGH)
GPIO.output(SCLKPin, LOW)
adcvalue <<=1 #1 Position nach links schieben
if (GPIO.input(MISOPin)):
adcvalue |= 0x01
time.sleep(0.5)
return adcvalue
# Variablendefinition
ADC_Channel = 0 # Analog/Digital-Channel
SCLK = 11 # Serial-Clock
MOSI = 10 # Master-Out-Slave-In
MISO = 9 # Master-In-Slave-Out
CS = 8 # Chip-Select
# Pin-Programmierung
GPIO.setwarnings(False)
GPIO.setup(SCLK, GPIO.OUT)
GPIO.setwarnings(False)
GPIO.setup(MOSI, GPIO.OUT)
GPIO.setwarnings(False)
GPIO.setup(MISO, GPIO.IN)
GPIO.setwarnings(False)
GPIO.setup(CS, GPIO.OUT)
def Temperatur1():
Umrechnen1 = readAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS)
Umrechnen2 = ((Umrechnen1*0.0032)*330)/(3.3*(1-((Umrechnen1*0.0032)/3.3)))
Temp1= (Umrechnen2-100)/0.39
return Temp1
if __name__ == "__main__":
while True:
Temperatur = Temperatur1()
print(Temperatur)
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Samstag 12. Oktober 2019, 20:12
von __deets__
Funktioniert fuer mich alles einwandfrei.
Code: Alles auswählen
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QTimer
import itertools
MAXTEMP = 100
TEMPIT = itertools.cycle(list(range(MAXTEMP)) + list(range(MAXTEMP, 0, -1)))
def determine_temperature():
return next(TEMPIT)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(300, 300)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar.setGeometry(QtCore.QRect(80, 120, 118, 24))
self.progressBar.setMaximum(0)
self.progressBar.setMaximum(200)
#self.progressBar.setProperty(0)
self.progressBar.setObjectName("progressBar")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 300, 28))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.timer = QTimer()
self.timer.timeout.connect(self.update_temperature)
self.timer.start(1)
def update_temperature(self):
temperature = determine_temperature()
if temperature < 500:
self.progressBar.setValue((temperature))
else:
self.timer.stop()
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Temperatur1"))
self.progressBar.setFormat(_translate("MainWindow", "%p°C"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Sonntag 13. Oktober 2019, 14:14
von starstrike
Das Programm zeigt mir bei genau dem Code maximal 100°C an. Jemand eine Idee?
Re: PyQt5 Progress mit ext Variablen Updaten
Verfasst: Sonntag 13. Oktober 2019, 15:10
von __deets__
Natürlich tut es das. Hast du das mal angeschaut ? Da gibts eine Einstellung für. Und wenn du die auf 200 setzt, dann geht das auch auf die volle Breite. Es liegt also an dem Teil der die Temperatur ermittelt.