在运行GUI时操纵Raspbery PI的直流电机速度

时间:2018-03-22 21:58:42

标签: python user-interface raspberry-pi3 gpio

Raspberry Pi初学者

我正在编程GUI应用程序(使用 PyQt5 )来控制直流电机。 到目前为止,我可以通过电机驱动器控制电机并在终端中更改它的速度(使用 PWM )。

当我想在我的GUI应用程序中使用电机控制器代码时会出现问题,因为当我运行电机运动功能时,我的time.sleep(x)会停止整个GUI应用程序,因此我无法对电机进行更改。速度。

我发现线程可能会解决我的问题,但我不知道如何在线程运行时修改速度。

这是我的电机运行代码:

from PyQt5 import QtWidgets,uic, QtCore

...

def start():
    while True:
        #run motor here


dlg.btn_start.clicked.connect(start)

...

用于GUI的Python:

str_replace("\XE2\X84\XA2", "™", $new_text);

我希望我没有比现在更复杂, 谢谢大家的答案!

祝你好运!

1 个答案:

答案 0 :(得分:0)

<强> 解决方案:

我使用Python多处理功能。

我的程序现在分为两个过程:

1.GUI过程,运行GUI和信号,当滑块更改时,该信号运行速度变化功能。每当滑块的位置发生变化时,该值都会保存到文本文件中。

2.Motor process 是一直在读取同一文件并将值从文件应用到电机速度的过程。如果该值设置为0,则电机关闭。

我认为这不是唯一的解决方案,当然不是最好的,但它对我有用。

我希望你们中的一些人也会希望!

干杯!

当然代码:

from PyQt5 import QtWidgets,uic, QtCore
from PyQt5.QtWidgets import QMessageBox,QApplication, QWidget, QInputDialog, QLineEdit, QFileDialog
from PyQt5.QtCore import QTimer,QTime
from PyQt5.QtGui import QIcon
import time
from multiprocessing import Process, Queue, Value

app = QtWidgets.QApplication([])
dlg = uic.loadUi("Motor.ui")


def startMotor():
    try:
        while True:
            time.sleep(0.01)
            file = open("test.txt", "r") 
            a=file.read()
            file.close()
            if int(a) == 0:
                print("OFF")
                #motor is off
            else:
                #motor is ON
                print("ON, speed is:", a)
    except:
        print("Abort...")

def runProgram():
    dlg.show()
    app.exec()


def changeSpeed():
    dlg.label.setText(str(dlg.slider.value()))

    file = open("test.txt","w") 
    file.write(str(dlg.slider.value()))
    file.close() 

#when slider's value is changed
dlg.slider.valueChanged.connect(changeSpeed)


if __name__ == '__main__':
    #On Program load    
    p1 = Process(target=startMotor,args=())
    p2 = Process(target=runProgram,args=())

    p1.start()
    p2.start()

    p1.join()
    p2.join()

如果有人有兴趣学习PyQt5设计的基础知识,请查看我的YouTube频道,其中我将解释基础知识: Link