【发布时间】: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