【发布时间】:2014-02-17 09:16:05
【问题描述】:
我正在尝试创建一个 python 类来使用我的 Raspberry Pi 控制步进电机。它大部分都有效,但是每当我将列表定义为类变量时,我都会不断收到“'instancemethod'对象没有属性'__getitem__'错误。错误消息将这段代码列为罪魁祸首,但我什么也看不到如果 seq[self.StepCounter][pin]!=0: 则错误。但如果我将其定义为实例变量或全局变量,它将起作用。
这是我的代码:
导入 RPi.GPIO 作为 GPIO
进口时间
调试 = 真
class stepper:
clockwise = []
clockwise = range(0,4)
clockwise[0] = [1,0,0,0]
clockwise[1] = [0,1,0,0]
clockwise[2] = [0,0,1,0]
clockwise[3] = [0,0,0,1]
def __init__(self,pin1,pin2,pin3,pin4):
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
self.pin1 = pin1
self.pin2 = pin2
self.pin3 = pin3
self.pin4 = pin4
self.StepCounter = 0
self.pinarray = [pin1,pin2,pin3,pin4]
for pin in self.pinarray:
if debug == True:
print "Setup pin " + str(pin)
GPIO.setup(pin,GPIO.OUT)
GPIO.output(pin, False)
self.stepNum = 512.0
self.coilNum = 4.0
def setup(self,stepNum,coilNum):
self.stepNum = float(stepNum)
self.coilNum = float(coilNum)
self.partNum = self.coilNum * self.stepNum
def clockwise(self,speed):
seq = stepper.clockwise
self.WaitTime = (1.0 / (self.stepNum * self.coilNum)) * speed
for pin in range(0, 4):
xpin = self.pinarray[pin]
if seq[self.StepCounter][pin]!=0:
GPIO.output(xpin, True)
else:
GPIO.output(xpin, False)
self.StepCounter += 1
if (self.StepCounter==len(seq)):
self.StepCounter = 0
if (self.StepCounter<0):
self.StepCounter = len(seq)
time.sleep(self.WaitTime)
print "Adding Motor Instance"
motor = stepper(24,25,8,7)
print "Spinning Motor"
while "True":
motor.clockwise(5)
请有人告诉我它有什么问题并解释原因。谢谢
【问题讨论】:
-
不是说这会解决它,但为什么顺时针启动如此奇怪?只需在一个声明中执行:-P
-
你能给出确切的完整错误吗?
-
请顺时针初始化为:
clockwise = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],而不是你的烂摊子! ;-) -
你有两个属性叫做
clockwise,一个列表和一个方法。
标签: python raspberry-pi