关于模拟口读取数据的问题
我设计了一个读取电阻的电路,在模拟时都正常,但是在实践时发现没有接线的模拟口也能读取到数据,想请教大家是什么问题程序是借鉴别人的
//设置参考电阻
#define basis 20000.0
//定义测试端口
int AnPin[] = {A0, A1, A2, A3, A4, A5};
//定义读取模拟端口值以及计算后所得的电阻值
float val, r;//定义变量
String CommandString = ""; //定义存储命令变量
String Sendtext = ""; //定义存储说有传感器的值
//程序初始化
void setup()
{
Serial.begin(9600);//串口定义
}
void loop()
{
while (Serial.available() > 0)
{
CommandString += int(Serial.read()) - '0';
delay(3);
}
switch (CommandString)
{
case '1':
GetRES(CommandString);
Serial.println("case1");
CommandString = ""; //输出数据后清除命令内容
break;
case '2':
GetRES(CommandString);
Serial.println("case2");
CommandString = ""; //输出数据后清除命令内容
break;
case '3':
GetRES(CommandString);
Serial.println("case3");
CommandString = ""; //输出数据后清除命令内容
break;
case '4':
GetRES(CommandString);
Serial.println("case4");
CommandString = ""; //输出数据后清除命令内容
break;
case '5':
GetRES(CommandString);
Serial.println("case5");
CommandString = ""; //输出数据后清除命令内容
break;
case '6':
GetRES(CommandString);
Serial.println("case6");
CommandString = ""; //输出数据后清除命令内容
break;
case '7'://测试所有传感器
GetRES();
Serial.println("case7");
CommandString = ""; //输出数据后清除命令内容
break;
}
delay(2000);
}
//计算并输出值
void GetRES(char Port)
{
int PortNum = int(Port) - 49; //由于转换字符到ACSIC码值因此要减49
val = analogRead(AnPin); //读取端口的值到变量
Serial.println(val);
r = ((basis * 1023.0) / (1023.0 - val)) - basis;
Serial.println(r);
delay(100);
if (filter() >= 1000)
{
if (filter() >= 500.0 * 1000.0)
{
Serial.println("Infinity!!");
}
else
{
//Serial.print(filter() / 1000.0);//输出电阻值
Serial.print(int(filter() / 1000)); //1k为一个cm单位输出
Serial.print("cm");
}
}
else
{
Serial.print("2A");
}
}
//滤波公式
float filter()
{
float sum = 0;
for (int count = 0; count < N; count++)
{
sum += r;
delay(5);
}
return (float)(sum / N);
} 在setup里定义测量接口为高阻态OUTPUT,接口10K下拉,应该就正常了。 这不是你程序的事,说复杂了会太深,说的简单点这是AVR内部电路的事,因为这6个通道共用一个AD转换器,浮空的引脚上会有感生电压。其实这不会影响你需要的那两个引脚上的测量值的,如果你有强迫症。。。。那么将那几个没用到模拟口用10K电阻接到地或者接到5V电源。 sanyouhi 发表于 2015-10-19 16:54 static/image/common/back.gif
这不是你程序的事,说复杂了会太深,说的简单点这是AVR内部电路的事,因为这6个通道共用一个AD转换器,浮空 ...
谢谢,写的很详细,我现在直接接地,显示为0了 anduony 发表于 2015-11-1 20:01 static/image/common/back.gif
谢谢,写的很详细,我现在直接接地,显示为0了
不用谢。(凑够10个字符) 学习学习了
页:
[1]