在类中检查Python中的函数调用

2024-06-30 15:46:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个类,用树莓圆周率来控制步进电机

我的班级示例:

class Stepmotor:
    def __init__(...):
    ...
 
    def Rotate(..):
        while (function Stop is not called):
            'motor rotate'

    def Stop(..):
        'motor stop'

代码示例:

motor = Stepmotor(..)
motor.Rotate() ---> rotate motor for 5 second
time.sleep(5)
motor.Stop() ---> stop motor

下面是我使用Raspberry Pi的原始代码:

import RPi.GPIO as gpio
import time

class StepMot:
    gpio.setwarnings(False)
    gpio.setmode(gpio.BCM)
    a = []
    
    def __init__(self, in1, in2, in3, in4):
        global a
        a = [in1, in2, in3, in4]
        gpio.setup(in1, gpio.OUT)
        gpio.setup(in2, gpio.OUT)
        gpio.setup(in3, gpio.OUT)
        gpio.setup(in4, gpio.OUT)

    def gpio_controll(self, x, y, z, w):
        global a
        gpio.output(a[0], x)
        gpio.output(a[1], y)
        gpio.output(a[2], z)
        gpio.output(a[3], w)
        time.sleep(0.001)

    def RotateCW(self):
        while True:
            self.gpio_controll(0,0,0,0)
            self.gpio_controll(1,0,0,0)
            self.gpio_controll(1,1,0,0)
            self.gpio_controll(0,1,0,0)
            self.gpio_controll(0,1,1,0)
            self.gpio_controll(0,0,1,0)
            self.gpio_controll(0,0,1,1)
            self.gpio_controll(0,0,0,1)
            self.gpio_controll(1,0,0,1)

   def RotateACW(self):
        while True:
           self.gpio_controll(0,0,0,0)
           self.gpio_controll(1,0,0,1)
           self.gpio_controll(0,0,0,1)
           self.gpio_controll(0,0,1,1)
           self.gpio_controll(0,0,1,0)
           self.gpio_controll(0,1,1,0)
           self.gpio_controll(0,1,0,0)
           self.gpio_controll(1,1,0,0)
           self.gpio_controll(1,0,0,0)

   def Stop(self):
       for i in a:
           gpio.output(i, 0)
 

当我称RotateCW为“顺时针”时,即使在Stop调用后5秒,电机仍会继续旋转

我知道这是因为代码被阻塞在while True中,这是因为我直接在类中搜索解决方案。当在代码中调用Stop()RotateCW()中的while循环停止


Tags: 代码selfoutputgpiotimedefsetupout