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