3

私はPythonにかなり慣れておらず、firmataを使って作業しています。arduinoで遊んでみようとしています。

これが私がしたいことです:

  • デジタル出力としてLEDを使用してarduinoを設定します
  • ポテンショメータをアナログ0に設定します

  • PyQtタイマーを設定して、
    アプリケーションのポテンショメータの位置を更新します

  • PyQtでしきい値を設定してLEDをオンにします(アナログ入力の解像度は1024ビットなので、
    しきい値として800と言います)

私はこのfirmataライブラリを使用しています:リンク

これが私が問題を抱えているコードです:

PyQt4からsysをインポートします。firmataからQtCore、QtGuiをインポートします。

 # Arduino setup
 self.a = Arduino('COM3')
 self.a.pin_mode(13, firmata.OUTPUT)

 # Create timer
    self.appTimer = QtCore.QTimer(self)

    self.appTimer.start(100)
    self.appTimer.event(self.updateAppTimer())


def updateAppTimer(self):
    self.analogPosition = self.a.analog_read(self, 0)
    self.ui.lblPositionValue.setNum()

エラーメッセージが表示されます:

トレースバック(最後の最後の呼び出し):ファイル "D:\ Programming \ Eclipse \ IO Demo \ src \ control.py"、行138、myapp = MainWindow()ファイル "D:\ Programming \ Eclipse \ IO Demo \ src \ control.py "、56行目、init self.appTimer.event(self.updateAppTimer())ファイル" D:\ Programming \ Eclipse \ IO Demo \ src \ control.py "、60行目、updateAppTimer self.analogPosition = self.a.analog_read(self、0)TypeError:analog_read()は正確に2つの引数を取ります(3つ指定)

'self'を削除すると、同じエラーメッセージが表示されますが、引数が1つだけ指定されています。

私が気付いていないPythonは暗黙のうちに何をしていますか?

ブロッククォート

4

2 に答える 2

0

自己を渡す必要はありませんでした。なぜ初めて失敗したのか、なぜ自己がすでに含まれているのか、私にはわかりません。

于 2010-03-25T22:40:12.960 に答える
0

コードでは、「a」はクラスインスタンスであるため、それにバインドされているすべてのメソッドには、最初のパラメータとして渡されたセルフポインタがすでにあります。Pythonへようこそ、いつかあなたはそれが欲しいです:)

逆に、任意のメソッドを非バインドとして呼び出すことができます(派生クラスのすべてのコンストラクターで呼び出すと確信しています)。構文は次のとおりです。

instance = Type()
#bound method.
instance.methodName(params)

#unbound method call, 'instance' is the instance of some object, pointer to witch
#you want to pass to method. These calls are similar.
Type.methodName(instance, params)
于 2010-03-26T14:34:05.980 に答える