3

我对 python 很陌生,并且正在使用firmata 我正在尝试使用 arduino 。

这是我想要发生的事情:

  • 使用 LED 将 arduino 设置为数字输出
  • 将电位器设置为模拟 0

  • 设置 PyQt 定时器以更新
    应用程序中的电位器位置

  • 在 PyQt 中设置一个阈值来打开 LED(模拟输入具有 1024 位分辨率,所以说 800 作为
    阈值)

我正在使用这个固件库:链接

这是我遇到问题的代码:

从 PyQt4 导入 sys 导入 QtCore,从 Firmata 导入 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()

我收到错误消息:

Traceback(最近一次调用最后):文件“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

不需要通过自我。我不知道为什么它第一次失败,或者为什么 self 已经包含在内。

于 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 回答