中国领先的工业平台

返回贤集网 返回微头条
贤集网技术微头条APP获取

我的电路图如下,有一个4*4的电阻矩阵,我这里用面...

 小新1992

下载贤集网APP入驻自媒体

我的电路图如下,有一个4*4的电阻矩阵,我这里用面包板搭了个demo,利用mega2560的数字IO口列选电阻,然后四路adc一起测电压
采样原理如图二,电压探针的位置接四路adc,上面四路列选,当选中该列时置低电平,其余列置高电平
出现了一个问题,就是我在按压左下红色框框住的压敏电阻时(电阻和压力成反比,压力增大,电阻减小),红色电阻对应的那路adc不变,其他三个蓝色电阻对应的那三路adc测出来的电压变低了,我不是很理解为什么
有没有大佬可以教教我怎么测这个东西的电阻
// 测得电压
array([[4.99755859, 4.99755859, 4.99755859, 4.99755859],
       [4.99755859, 4.99755859, 4.99755859, 2.32177734],
       [4.99755859, 4.99755859, 4.99755859, 2.30712891],
       [4.99755859, 4.99755859, 4.99755859, 2.28271484]])
完整的测试代码如下

void encode(int i, int j, int val);

void setup()
{
Serial.begin(115200);

pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);

pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);

digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}

void loop()
{
for(int i=0;i<4;++i)
{
if(i > 0)
{
digitalWrite(1 + i, LOW);
}
else
{
digitalWrite(5, LOW);
}
digitalWrite(2 + i, HIGH);
for(int j=0;j<4;++j)
{
send(i, j, analogRead(A0 + j));
delay(50);
}
}
}

void send(int i, int j, int val)
{
Serial.print(i);
Serial.print(',');
Serial.print(j);
Serial.print(',');
Serial.println(val);
}

最新回复
发布回复
先要确保硬件没问题,你的接线没问题的话:列选从左到右依次为C1,C2,C3,C4位选从上到下一次为R1,R2,R3,R4则你的连接器,从上到下的排列顺序为:C3,C4,C2,C1,R1,R2,R3,R41,先检查,在没有任何按键按下的情况下,C1-C4,R1-R4的引脚都应为高电平2,你的R11-R14电阻的上端应该连接到3.3V或5V等,也就是高电平,你这里是接地的?如果接地就不对。3,在R11-R14均上拉的情况下,在你没有开始列扫描时,位输出必然都是高电平4,在满足上述情况下进行扫描,红色框内按键按下,在列1C1输出0电平时,R4输出低电平。其余必然为高。5,因此,问题只有2个可能:5.1,你的列扫描,列1输出的是高电平,列2-列4输出的是低电平,但是你没有按L2-L4相连的按键,所以该问题不存在5.2,因此只有这个可能,你的R11-R14公共端是下拉,也就是接地,这个是不对的,然后你的列1输出的也是高电平,只有这个可能。确认硬件没问题的情况下,再排查软件,因为你说电压变低,那AD读数是正常的?按键按下和松开4路AD都有变化?

为您推荐

热门交流