Arduino为1.5V电池显示错误的电压
问题描述:
我看到奇怪的行为,现在想了解这是否与Arduino UNO或我的代码有关。Arduino为1.5V电池显示错误的电压
我使用Arduino来测量简单的1.5V电池的电压。
所以我看到,串行监视器显示1V电压而不是1.5V(但电压表显示从电池1.5V)。
当我串联连接2节电池串行监视器显示3V。
有人可以请解释发生了什么事。
这是我的Arduino代码:
float voltage;
float batteryIn;
void setup(){
Serial.begin(9600);
}
void loop(){
batteryIn = analogRead(0);
float voltage2 = (float)map(batteryIn, 0, 1023, 0, 5);
Serial.println(voltage2);
delay(50);
}
所以显示1V单电池(但应为1.5V)。
2串联电池显示3V,这是正确的。
答
map
函数只能与long
类型一起运行,这意味着它接受long
参数并返回long
。
将整数转换为浮点值不会使它神奇地具有十进制值。
您需要实现一个使用浮动操作的map函数。
float mapf(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min)/(in_max - in_min) + out_min;
}
float voltage2 = mapf(batteryIn, 0, 1023, 0, 5);
你的情况,你也可以简化表达和在线使用。
float voltage2 = batteryIn * 5.0/1023.0;
我猜map函数只返回一个long类型。所以即使你将它转换为浮点数,小数位已经消失了。您必须使用浮点返回来创建您自己的映射函数。 –
试过这个:float voltage2 =(float)batteryIn * 5.000/1024.000;更准确地说,获得相同的值 – haykp
,现在变为1.7V。 – haykp