【问题标题】:Check function call in Python in classes在类中检查 Python 中的函数调用
【发布时间】:2021-03-27 14:50:49
【问题描述】:

我正在尝试编写一个类来使用 Raspberry Pi 控制步进电机。

我的班级示例:

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 循环停止。

【问题讨论】:

  • 不要明白你的意思,你永远不会调用stop函数,因为RotateCW函数永远不会结束,因为你在它里面有一个无限循环while True,甚至time.sleep(5)也没有运行。
  • 是的,事实上我试图改变 rotatecw 函数中的 while 参数

标签: python python-3.x raspberry-pi raspberry-pi3 raspberry-pi4


【解决方案1】:

您可以将duration 参数添加到RotateCW() 并在while 循环中检查它:

    def RotateCW(self, duration):
        stop_time = time.time() + duration
        while time.time() < stop_time:
            ...

【讨论】:

  • 是的,这是一种可能,但我在旋转函数内的 while 参数中搜索“检查函数调用”。但是感谢您的建议
猜你喜欢
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 2022-01-06
  • 2018-09-28
相关资源
最近更新 更多