我有以下代码,这些代码将在PyQt中单击“开始”按钮后启动:
def Start(self):
import time
import os
import RPi.GPIO as GPIO
import datetime
GPIO.setmode(GPIO.BCM)
DEBUG = 1
os.system('clear')
# SPI port on GPIO
SPICLK = 18
SPIMISO = 23
SPICS = 25
# set up the SPI interface pins
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPICS, GPIO.OUT)
GPIO.output(SPICS, True)
GPIO.output(SPICS, False) # bring CS low
while True:
adcout = 0
read_adc = 0
#s=time.clock()
for i in range(25):
GPIO.output(SPICLK, True)
GPIO.output(SPICLK, False)
adcout <<= 1
if (GPIO.input(SPIMISO)==1):
adcout |= 0x1
time.sleep(0.085)
if (GPIO.input(SPIMISO)==0):
read_adc = adcout
millivolts = read_adc * ( 2500.0 /(pow(2,22)))
read_adc = "%d" % read_adc
millivolts = "%d" % millivolts
if DEBUG:
print millivolts, "mV (ADC)"
Run Code Online (Sandbox Code Playgroud)
上面的程序用于ADC读取,它将在单击名为“开始”的按钮后启动,如下所示: self.pushButton.clicked.connect( self.Start)
我还有一个pushButton_2叫做“停止”的按钮,单击此按钮,以上过程应该会停止。请提出建议,这样我就可以做到这一点。
除了我在您对此主题提出的其他问题中建议的内容之外,无需执行其他任何操作:只需使用processEvents。只要您可以足够频繁地调用它(但不要太频繁),它就可以完全按照您的要求进行。使用您的第二个示例,以下对我来说很好用:
def Start(self):
if not self.started:
self.started = True
self.StartLoop()
def Stop(self):
if self.started:
self.started = False
def StartLoop(self):
DEBUG = 1
while self.started:
print "LED on "
time.sleep(0.05)
print "LED off "
time.sleep(0.085)
QtGui.qApp.processEvents()
Run Code Online (Sandbox Code Playgroud)