2017-05-10 2 views
0

J'ai mis ensemble (avec beaucoup de questions de recherche de ce site, merci) du code qui affichera, en partie, les tensions de broche d'entrée de framboise pi sur les widgets qlcdnumber dans mon qt creator gui. Le code fonctionne parfaitement, l'interface graphique apparaît, et la tension de broche est imprimée sur le terminal (temporaire) et les boutons sont fonctionnels dans l'interface, en tournant les autres broches vers le haut et vers le bas. Je ne reçois aucune erreur, mais le problème est que le signal ne sera pas affiché sur le lcd gui. J'ai recherché tout ce que je peux pour ne pas réussir et je me sens comme si je devine maintenant. J'apprécierais n'importe quelle entrée et instruction. J'ai beaucoup appris mais j'ai encore beaucoup de chemin à faire alors toute aide serait super. J'utilise Raspbian et Qt4/Qt Creator 3.2.1lcdnumber signal et slot

Voici le code entier et encore une fois merci pour toute instruction:

import sys 
import RPi.GPIO as GPIO 
import time 
import re 
from PyQt4 import QtGui, uic, QtCore 
import spidev 

GPIO.setmode(GPIO.BCM) 
GPIO.setwarnings(False) 

o2zero = 26 
o2span = 19 
cozero = 13 
cospan = 6 
co2zero = 5 
co2span = 21 

status = "nil" 

o2_channel = 0 
o2_temp_channel = 1 
spi = spidev.SpiDev() 
spi.open(0,0) 

class MyWindow(QtGui.QMainWindow): 
def __init__(self): 
    super(MyWindow, self).__init__() 
    uic.loadUi('mainwindow.ui', self) 

    self.o2_zero_up.clicked.connect(self.o2zeroup) 
    self.o2_zero_down.clicked.connect(self.o2zerodown) 
    self.o2_span_up.clicked.connect(self.o2spanup) 
    self.o2_span_down.clicked.connect(self.o2spandown) 
    self.co_zero_up.clicked.connect(self.cozeroup) 
    self.co_zero_down.clicked.connect(self.cozerodown) 
    self.co_span_up.clicked.connect(self.cospanup) 
    self.co_span_down.clicked.connect(self.cospandown) 
    self.co2_zero_up.clicked.connect(self.co2zeroup) 
    self.co2_zero_down.clicked.connect(self.co2zerodown) 
    self.co2_span_up.clicked.connect(self.co2spanup) 
    self.co2_span_down.clicked.connect(self.co2spandown) 
    self.close_button.clicked.connect(self.gpiocleanup) 

    self.thread = O2_Channel() 
    self.thread.o2_concentration.connect(self.onChangeValue) 
    self.thread.start() 

    self.show() 

def onChangeValue(self, values): 
    o2_volts = values 


def o2zeroup(self): 
    GPIO.setup(o2zero, GPIO.OUT) 
    GPIO.output(o2zero, 1) 
def o2zerodown(self): 
    GPIO.setup(o2zero, GPIO.OUT) 
    GPIO.output(o2zero, 0) 

def o2spanup(self): 
    GPIO.setup(o2span, GPIO.OUT) 
    GPIO.output(o2span, 1) 
def o2spandown(self): 
    GPIO.setup(o2span, GPIO.OUT) 
    GPIO.output(o2span, 0) 

def cozeroup(self): 
    GPIO.setup(cozero, GPIO.OUT) 
    GPIO.output(cozero, 1) 
def cozerodown(self): 
    GPIO.setup(cozero, GPIO.OUT) 
    GPIO.output(cozero, 0) 

def cospanup(self): 
    GPIO.setup(cospan, GPIO.OUT) 
    GPIO.output(cospan, 1) 
def cospandown(self): 
    GPIO.setup(cospan, GPIO.OUT) 
    GPIO.output(cospan, 0) 

def co2zeroup(self): 
    GPIO.setup(co2zero, GPIO.OUT) 
    GPIO.output(co2zero, 1) 
def co2zerodown(self): 
    GPIO.setup(co2zero, GPIO.OUT) 
    GPIO.output(co2zero, 0) 

def co2spanup(self): 
    GPIO.setup(co2span, GPIO.OUT) 
    GPIO.output(co2span, 1) 
def co2spandown(self): 
    GPIO.setup(co2span, GPIO.OUT) 
    GPIO.output(co2span, 0) 

def gpiocleanup(self): 
    GPIO.cleanup() 

def closeEvent(self, event): 
    self.thread.stop() 
    self.thread.quit() 
    self.thread.wait() 
    self.thread.deleteLater() 
    print ("GPIO CleanUP") 
    GPIO.cleanup() 
    event.accept() 

def ReadChannel(channel): 
    adc = spi.xfer2([1,(8+channel)<<4,0]) 
    data = ((adc[1]&3) << 8) + adc[2] 
    return data 

def ConvertVolts(data, places): 
    volts = (data * 3.3)/float(1023) 
    volts = round(volts,places) 
    return volts  

class O2_Channel(QtCore.QThread): 

o2_concentration = QtCore.pyqtSignal(int) 

def __init__(self): 
    QtCore.QThread.__init__(self) 
    self.mRunning = True 

def run(self): 
    while self.mRunning: 

     o2_level = ReadChannel(o2_channel) 
     o2_volts = ConvertVolts(o2_level,2) 

     print("{}".format(o2_volts)) 
     self.o2_concentration.emit(o2_volts) 
     delay = .2       
     time.sleep(delay) 

def stop(self): 
    self.mRunning = False 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    window = MyWindow() 
    sys.exit(app.exec_()) 

Répondre

0

Dans un autre poste, eyllanesc me mis en place avec le signal et Je devais montrer le signal à mon gui lcd mais je ne le comprenais pas assez pour savoir exactement ce qu'il faisait. J'ai passé les derniers jours à lire à ce sujet et enfin voir ce qu'il a fait. Tout fonctionne et fonctionne comme je le veux.

Pour toute personne qui pourrait avoir la même confusion que j'avais, ici était mon principal problème:

def onChangeValue(self, values): 
o2_volts = values 

Je suis nouveau à ce que je ne savais pas que je devais mettre réellement ma valeur spécifiée en place du mot "valeurs" dans le code ci-dessus. Un peu embarrassant mais faisant partie de l'apprentissage je suppose. L'autre problème était ici:

o2_concentration = QtCore.pyqtSignal(int) 

Je ne savais pas, mais après avoir fixé les « valeurs », l'écran fonctionnait mais était en train de lire 0 et je suppose qu'il ne fonctionnait pas. En utilisant une photocellule pour obtenir la tension, j'obtenais .25 lors de l'impression à la borne mais 0 à l'écran LCD. De nouveau étant nouveau, je ne pensais pas (int) ne pas être correct pour ce que je voulais. Le changer pour (float) a résolu le problème. Tout fonctionne bien.

Le script my a augmenté depuis le post original, mais si quelqu'un aimerait le voir, je serais heureux de le poster.

Ceci est un site merveilleux. Merci pour tout.