PyQt5 Progress mit ext Variablen Updaten

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
starstrike
User
Beiträge: 14
Registriert: Donnerstag 3. Oktober 2019, 09:16

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
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
starstrike
User
Beiträge: 14
Registriert: Donnerstag 3. Oktober 2019, 09:16

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
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@starstrike: Da passen die Klammern in der Zeile davor nicht, da fehlt eine.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
starstrike
User
Beiträge: 14
Registriert: Donnerstag 3. Oktober 2019, 09:16

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
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

`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.
starstrike
User
Beiträge: 14
Registriert: Donnerstag 3. Oktober 2019, 09:16

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
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

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`?
starstrike
User
Beiträge: 14
Registriert: Donnerstag 3. Oktober 2019, 09:16

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
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
starstrike
User
Beiträge: 14
Registriert: Donnerstag 3. Oktober 2019, 09:16

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.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kann man ohne Code nix zu sagen. Und zwar *allen* Code.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Was sagt denn dein Sensor? Kann der bis 200 messen?
starstrike
User
Beiträge: 14
Registriert: Donnerstag 3. Oktober 2019, 09:16

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)

		

__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

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_())
starstrike
User
Beiträge: 14
Registriert: Donnerstag 3. Oktober 2019, 09:16

Das Programm zeigt mir bei genau dem Code maximal 100°C an. Jemand eine Idee?
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Antworten