Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python GPIO按钮:AttributeError:&x27;int';对象没有属性';var1';_Python_Typeerror_Raspberry Pi3_Gpio - Fatal编程技术网

Python GPIO按钮:AttributeError:&x27;int';对象没有属性';var1';

Python GPIO按钮:AttributeError:&x27;int';对象没有属性';var1';,python,typeerror,raspberry-pi3,gpio,Python,Typeerror,Raspberry Pi3,Gpio,我正试图为树莓圆周率写代码。这个代码是用来连接我车上的车载诊断系统的。代码要做的就是等我按下GPIO引脚,录音就会停止。该引脚(27)用作切换,因此我可以通过按下它来启动/停止 我最初在类之外编写代码只是为了让它工作,但我从头开始重写代码以使其适应类,但GPIO事件不起作用 代码如下: import RPi.GPIO as GPIO import time import obd import numpy as np class obdScan: rec_loop = 0

我正试图为树莓圆周率写代码。这个代码是用来连接我车上的车载诊断系统的。代码要做的就是等我按下GPIO引脚,录音就会停止。该引脚(27)用作切换,因此我可以通过按下它来启动/停止

我最初在类之外编写代码只是为了让它工作,但我从头开始重写代码以使其适应类,但GPIO事件不起作用

代码如下:

import RPi.GPIO as GPIO
import time
import obd
import numpy as np


class obdScan:
     rec_loop = 0
     key_listen = 1
     rec_freq = 2 # per second
     my_data = []
     def __init__(self):
         try:
            self.conn = obd.OBD()
         except:
             print("connection failed")

    def stop_loop(self):
        self.rec_loop = (self.rec_loop +1)%2

    def closeall(self):
        self.rec_loop, self.key_listen = 0,0

    def measurement(self,val):
        device = obd.commands[1][val]
        value = self.conn.query(device).value.magnitude
        return value

    def record(self,devices):
        value=[]
        for i in range(len(devices)):
            value.append(self.measurement(devices[i]))
        self.my_data.append(value)
        time.sleep(1/self.rec_freq)
        print(["recording:", self.my_data[-1]])


if __name__ == "__main__":
    dat_file = "data.csv"
    GPIO.setmode(GPIO.BCM)

    GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)

    try:
        my_data = np.genfromtxt(dat_file, delimiter=',')
    except:
        my_data = [[], []]
    obd_connection = obdScan()

    GPIO.add_event_detect(27, GPIO.FALLING, callback=obd_connection.stop_loop)
    GPIO.add_event_detect(22, GPIO.FALLING, callback=obd_connection.closeall)

    print("ready")
    while obd_connection.key_listen:
        while obd_connection.rec_loop:
            obd_connection.record([13,7])
    else:
        print("done")
        try:
            data = np.append(my_data,obd_connection.my_data,axis=0)
        except:
            data = obd_connection.my_data
        np.savetxt(dat_file, data, delimiter=",")
我得到的错误是:


“TypeError:stop_loop()接受1个位置参数,但提供了2个”

GPIO.add_event\u detect()
显然使用包含通道的参数调用传递的回调,并且由于将类方法设置为回调,因此需要在其定义中添加额外的参数:

def stop_loop(self, channel):
    self.rec_loop = (self.rec_loop + 1) % 2

def closeall(self, channel):
    self.rec_loop, self.key_listen = 0, 0

您可以将其设置为可选,但…

GPIO.add\u event\u detect()
显然使用包含通道的参数调用传递的回调,并且由于您将类方法设置为回调,因此需要在其定义中添加额外的参数:

def stop_loop(self, channel):
    self.rec_loop = (self.rec_loop + 1) % 2

def closeall(self, channel):
    self.rec_loop, self.key_listen = 0, 0

您可以将其设置为可选,但…

注意:粘贴代码时,某些缩进出错,因此假设缩进正确注意:粘贴代码时,某些缩进出错,因此假设缩进正确