Arduino显示1.5V电池的电压错误

时间:2017-10-09 08:57:10

标签: arduino arduino-uno

我看到了奇怪的行为,现在想要了解这是否与Arduino UNO或我的代码有关。

我正在使用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,这是正确的。

1 个答案:

答案 0 :(得分:4)

map函数仅以>>> from numpy import nextafter >>> nextafter( 0.1, -1) 0.099999999999999992 >>> nextafter( 0.1, +1) 0.10000000000000002 >>> nextafter( 1 , -1) 0.99999999999999989 >>> nextafter( 1 , +1) 1.0 >>> nextafter(10 , -1) 9.9999999999999982 >>> nextafter(10 , +1) 9.9999999999999982 类型运行,这意味着它接受long个参数并返回long
将整数转换为浮点值,不会让它神奇地具有十进制值。

您需要实现一个使用浮点运算的map函数。

long
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);