2017-10-09 151 views
0

我看到奇怪的行为,现在想了解这是否与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,这是正确的。

+0

我猜map函数只返回一个long类型。所以即使你将它转换为浮点数,小数位已经消失了。您必须使用浮点返回来创建您自己的映射函数。 –

+0

试过这个:float voltage2 =(float)batteryIn * 5.000/1024.000;更准确地说,获得相同的值 – haykp

+0

,现在变为1.7V。 – haykp

回答

4

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; 
+0

没有帮助,现在获得1.7V,而不是1.5V(对于这两种解决方案)((( – haykp

+0

)最有可能的问题是与arduino连接,任何想法如何我可以调试/修复它? – haykp

+0

这段代码解决了你没有得到的问题小数点后获得1.7V而不是1.5V是另一个问题,我怀疑你的Arduino没有使用5V供电,这个代码假设使用电压表来检查GND和VCC之间的电压。 –