Python GPIO按钮:AttributeError:&x27;int';对象没有属性';var1';
我正试图为树莓圆周率写代码。这个代码是用来连接我车上的车载诊断系统的。代码要做的就是等我按下GPIO引脚,录音就会停止。该引脚(27)用作切换,因此我可以通过按下它来启动/停止 我最初在类之外编写代码只是为了让它工作,但我从头开始重写代码以使其适应类,但GPIO事件不起作用 代码如下: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
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
您可以将其设置为可选,但…注意:粘贴代码时,某些缩进出错,因此假设缩进正确注意:粘贴代码时,某些缩进出错,因此假设缩进正确