RaspberryPiを使用してステッピングモーターを制御するpythonクラスを作成しようとしています。ほとんど機能しますが、「 'instancemethod'オブジェクトには属性がありません'__getitem__'
リストをクラス変数として定義するたびにエラーが発生します。エラーメッセージには、このコードが原因としてリストされていますが、seq [self.StepCounter] [pin]!= 0:の場合、何も問題はありません。ただし、インスタンス変数またはグローバル変数として定義すれば機能します。これは私のコードです:GPIOとしてRPi.GPIOをインポートしますimport time debug = True
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)
誰かがそれの何が悪いのか教えて、その理由を説明してもらえますか?ありがとう
あなたは完全なトレースバックを投稿しませんでしたが、私は推測することができます:
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:
seq
を最初の行のメソッドstepper.clockwise
と同じに設定します。次に、数行後にインデックスを作成しようとします:seq[self.StepCounter]
。しかし、メソッドのself.StepCounter
番目の要素を取得するとはどういう意味ですか?
理由はありません。
'instancemethod' object has no attribute '__getitem__'
clockwise
をリストの名前とメソッドの名前の両方として使用しないでください。最後に実行された定義のみが保持されるため、seq = stepper.clockwise
に到達するまでに、それはメソッドであり、リストではありません。