diff --git a/README.md b/README.md index cddf8b0..a3bd0b0 100644 --- a/README.md +++ b/README.md @@ -36,3 +36,51 @@ idVendor和idProduct是CH341设备的供应商和产品ID,可以通过lsusb命 sudo udevadm control --reload-rules sudo udevadm trigger ``` + +# 运行示例 + +## 上电 +传感器不同版本的固件上电时间存在差异,建议在传感器上电3s后再运行读取程序 +## demo根目录下运行如下命令执行程序 +``` +python cap_read.py +``` +程序运行结果: +``` +capChannelDat=[3020838, 3006548, 2986382, 2929380, 2995152, 2992100, 2988970, 2996232, 2904946, 2947736, 2895000, 2842188, 2999608, 2922258, 2776718, 7950022] +nf[0] = 0.0 +tf[0] = 0.0 +tfDir[0] = 0 +nf[1] = 0.0 +tf[1] = 0.0 +tfDir[1] = 0 +sProxCapData[0] = 0 +sProxCapData[1] = 0 +mProxCapData[0] = 0 +``` +* capChannelDat为电容通道原始值 +* nf、tf、tfDir分别为一组三维力的法向力、切向力和切向力方向 +* sProxCapData为自电容接近值 +* mProxCapData为互电容接近值 + +## 连接手指数量设定 +手指连接板最大支持5个传感器连接,不足5个传感器连接会影响读取频率,可以修改如下宏定义配置连接数量: +``` +DEF_MAX_FINGER_NUM = 2 # 需要连接的手指数量,最大5个 +``` +## iic接口顺序和iic地址定义 +此demo中的iic地址和插入转接板的接口位置是固定对应关系,iic地址和iic接口顺序对照关系如下: +![alt text](image.png) +如果插入的传感器和对应接口的iic地址不同,在初始化阶段会强制将传感器的iic地址设置为图中对应的地址: +``` +def checkSensor(self): + # 广播的方式读取当前传感器地址,并默认将iic地址配置为和pca相同的地址 + addrRead = self.snsCmd.getAddr(0) + if addrRead != self.pcaIdx: + if self.pcaIdx != self.snsCmd.setAddr(addrRead, self.pcaIdx): + print(f"set addr false, setaddr={self.pcaIdx}") + return False + else: + addrRead = self.pcaIdx + print(f"update iic addr, new addr ={addrRead}") +``` diff --git a/cap_read.py b/cap_read.py index 1cc9bfb..11a9b51 100644 --- a/cap_read.py +++ b/cap_read.py @@ -12,6 +12,8 @@ DEF_CDC_SYNC_MS = 1000 #电容同步间隔 DEF_GET_CAP_MS = (30) #读取电容间隔 DEF_PRO_CYC = 100 +DEF_MAX_FINGER_NUM = 2 # 需要连接的手指数量,最大5个 + # 定义一个全局的队列,用于线程间通信 capReadQueue = queue.Queue() @@ -30,7 +32,7 @@ class ClassCapRead: # 最大连接5个手指 self.fingers = list() # 传感器列表 - for i in range(2): + for i in range(DEF_MAX_FINGER_NUM): self.fingers.append(ClassFinger(2+i, self.ch341)) self.currCh341State = 0 # 当前ch341连接状态 diff --git a/class_finger.py b/class_finger.py index 95a65fa..d19304f 100644 --- a/class_finger.py +++ b/class_finger.py @@ -173,7 +173,7 @@ class ClassFinger: for i in range(self.projectPara.s_prox_num): print(f"sProxCapData[{i}] = {self.readData.sProxCapData[i]}") for i in range(self.projectPara.m_prox_num): - print(f"sProxCapData[{i}] = {self.readData.mProxCapData[i]}") + print(f"mProxCapData[{i}] = {self.readData.mProxCapData[i]}") break else: