ラズパイGPIO,MCP3208を用いてADコンバータの作成に取り組んでいます。
GUIで、MCP3208より読み込んだ値を表示させたく
Qt Designerを用いて以下のコードを作成致しました。
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'ADC.ui' # # Created by: PyQt5 UI code generator 5.10.1 # # WARNING! All changes made in this file will be lost! import time import sys #from datetime import datetime # 現在時刻 import spidev from PyQt5 import QtCore, QtGui, QtWidgets ############################################################################# VrefAD = 5.0 # 基準電圧入力 Sampling = 10 class Ui_Dialog(object): # ================================================================ # def __init__(self): self._timer = QtCore.QTimer() self._timer.timeout.connect(self.run) spi = spidev.SpiDev() spi.open(0,0) spi.max_speed_hz = 1000000 # ================================================================ # def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(400, 337) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setGeometry(QtCore.QRect(30, 290, 341, 32)) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.gridLayoutWidget = QtWidgets.QWidget(Dialog) self.gridLayoutWidget.setGeometry(QtCore.QRect(30, 10, 231, 191)) self.gridLayoutWidget.setObjectName("gridLayoutWidget") self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setObjectName("gridLayout") self.lcdNumber_2 = QtWidgets.QLCDNumber(self.gridLayoutWidget) self.lcdNumber_2.setObjectName("lcdNumber_2") self.gridLayout.addWidget(self.lcdNumber_2, 1, 1, 1, 1) self.label_2 = QtWidgets.QLabel(self.gridLayoutWidget) self.label_2.setObjectName("label_2") self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1) self.lcdNumber_1 = QtWidgets.QLCDNumber(self.gridLayoutWidget) self.lcdNumber_1.setObjectName("lcdNumber_1") self.gridLayout.addWidget(self.lcdNumber_1, 0, 1, 1, 1) self.label_3 = QtWidgets.QLabel(self.gridLayoutWidget) self.label_3.setObjectName("label_3") self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1) self.label_4 = QtWidgets.QLabel(self.gridLayoutWidget) self.label_4.setObjectName("label_4") self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1) self.lcdNumber_4 = QtWidgets.QLCDNumber(self.gridLayoutWidget) self.lcdNumber_4.setObjectName("lcdNumber_4") self.gridLayout.addWidget(self.lcdNumber_4, 3, 1, 1, 1) self.lcdNumber_3 = QtWidgets.QLCDNumber(self.gridLayoutWidget) self.lcdNumber_3.setObjectName("lcdNumber_3") self.gridLayout.addWidget(self.lcdNumber_3, 2, 1, 1, 1) self.label = QtWidgets.QLabel(self.gridLayoutWidget) self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 0, 0, 1, 1) self.btnStart = QtWidgets.QPushButton(Dialog) self.btnStart.setGeometry(QtCore.QRect(50, 220, 101, 31)) self.btnStart.setObjectName("btnStart") self.btnStop = QtWidgets.QPushButton(Dialog) self.btnStop.setGeometry(QtCore.QRect(180, 220, 101, 31)) self.btnStop.setObjectName("btnStop") self.actionOnStart = QtWidgets.QAction(Dialog) self.actionOnStart.setObjectName("actionOnStart") self.actionOnStop = QtWidgets.QAction(Dialog) self.actionOnStop.setObjectName("actionOnStop") self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) self.btnStart.clicked.connect(self.OnStart) self.btnStop.clicked.connect(self.OnStop) QtCore.QMetaObject.connectSlotsByName(Dialog) # ================================================================ # def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) self.label_2.setText(_translate("Dialog", "AD2")) self.label_3.setText(_translate("Dialog", "AD3")) self.label_4.setText(_translate("Dialog", "AD4")) self.label.setText(_translate("Dialog", "AD1")) self.btnStart.setText(_translate("Dialog", "S t a r t")) self.btnStop.setText(_translate("Dialog", "S t o p")) self.actionOnStart.setText(_translate("Dialog", "OnStart")) self.actionOnStop.setText(_translate("Dialog", "OnStop")) # ================================================================ # # START def OnStart(self): # **************************************************************** # # タイマー開始 self._timer.start(Sampling) # ================================================================ # # def run(self): # **************************************************************** # # AD ADC = MCP3208_Class(ref_volts = VrefAD) # AD1 ReadVoltAD1 = ADC.GetVoltage(ch=0) # AD2 ReadVoltAD2 = ADC.GetVoltage(ch=1) # AD3 ReadVoltAD3 = ADC.GetVoltage(ch=2) # AD4 ReadVoltAD4 = ADC.GetVoltage(ch=3) # **************************************************************** # # 値を読み取った値を表示する # AD1 self.lcdNumber_1.display('{:.3f}'.format(ReadVoltAD1)) # AD2 self.lcdNumber_2.display('{:.3f}'.format(ReadVoltAD2)) # AD3 self.lcdNumber_3.display('{:.3f}'.format(ReadVoltAD3)) # AD4 self.lcdNumber_4.display('{:.3f}'.format(ReadVoltAD4)) # print("") # print(datetime.now().strftime("%Y/%m/%d %H:%M:%S") + ", AlphaAD1 = " + str('{:.3f}'.format(AlphaAD1)) + ", AlphaAD2 = " + str('{:.3f}'.format(AlphaAD2)) + ", AlphaAD3 = " + str('{:.3f}'.format(AlphaAD3)) + ", AlphaAD4 = " + str('{:.3f}'.format(AlphaAD4))) # print(datetime.now().strftime("%Y/%m/%d %H:%M:%S") + ", BeatAD1 = " + str('{:.3f}'.format(BeatAD1)) + ", BeatAD2 = " + str('{:.3f}'.format(BeatAD2)) + ", BeatAD3 = " + str('{:.3f}'.format(BeatAD3)) + ", BeatAD4 = " + str('{:.3f}'.format(BeatAD4))) # print(datetime.now().strftime("%Y/%m/%d %H:%M:%S") + ", AD1 = " + str('{:.3f}'.format(ReadVoltAD1)) + "[V], AD2 = " + str('{:.3f}'.format(ReadVoltAD2)) + "[V], AD3 = " + str('{:.3f}'.format(ReadVoltAD3)) + "[V], AD4 = " + str('{:.3f}'.format(ReadVoltAD4)) + "[V]") # **************************************************************** # # self._timer.start(Sampling) # ================================================================ # # STOP def OnStop(self): ADC.Cleanup() self._timer.stop() ############################################################################# #MCP3208から値を取得するクラス class MCP3208_Class: """コンストラクタ""" def __init__(self, ref_volts): self.ref_volts = ref_volts self.spi = spidev.SpiDev() self.spi.open(0,0) """電圧取得""" def GetVoltage(self,ch): raw = self.spi.xfer2([1,(8+ch)<<4,0]) raw2 = ((raw[1]&3) << 8) + raw[2] volts = (raw2 * self.ref_volts ) / float(1023) volts = round(volts,4) return volts """終了処理""" def Cleanup(self): self.spi.close() ############################################################################# if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) Dialog = QtWidgets.QDialog() ui = Ui_Dialog() ui.setupUi(Dialog) Dialog.show() sys.exit(app.exec_())
時間が経過すると以下のエラーメッセージが表示され終了してしまいます。
backend.pyの部分がエラー該当部だと思うのですが、
場所がライブラリの場所だと思い、
知識なく手を出してしまうと、今後どのような影響が出るか分からず、
何も行うことが出来ません。
大変申し訳ありませんが、
アドバイスを頂けないでしょうか?
Backend terminated (returncode: -6)
Fatal Python error: Aborted
Current thread 0x76fbc010 (most recent call first):
File "/home/pi/Python/Check20180917/ADC_qt5_rpi_20180917.py", line 185 in <module>
File "/usr/lib/python3/dist-packages/thonny/shared/thonny/backend.py", line 588 in execute_source
File "/usr/lib/python3/dist-packages/thonny/shared/thonny/backend.py", line 427 in _execute_source_ex
File "/usr/lib/python3/dist-packages/thonny/shared/thonny/backend.py", line 374 in _execute_file
File "/usr/lib/python3/dist-packages/thonny/shared/thonny/backend.py", line 155 in _cmd_Run
File "/usr/lib/python3/dist-packages/thonny/shared/thonny/backend.py", line 119 in handle_command
File "/usr/lib/python3/dist-packages/thonny/shared/thonny/backend.py", line 97 in mainloop
File "/usr/lib/python3/dist-packages/thonny/shared/backend_launcher.py", line 41 in <module>
Resetting ...
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/18 14:01
2018/09/18 14:35