我想写一个类,用树莓圆周率来控制步进电机
我的班级示例:
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循环停止
您可以将
duration
参数添加到RotateCW()
并在while循环中检查它:相关问题 更多 >
编程相关推荐