当你从一个模拟输入引脚获取模拟值时,默认情况下,它们被获取为范围在0 到1023 的值。
这是因为模拟读取的分辨率是10位,2^10就是1024。
提示:在基于ARM的Arduino设备上,如Arduino Zero、Arduino Due和Arduino MKR系列,你可以映射到12位,但默认是0。在这些设备上,你可以调用
analogReadResolution(12),将分辨率设置为12位,所以你可以从0到4095而不是1023
Arduino语言提供的map() 函数允许你将该数值范围映射到一个不同的范围。
这里是函数的签名。
int <newvalue> = map(<value>, <original_min>, <original_max>, <new_min>, <new_max>);
值得注意的是,该函数返回的是一个整数值,小数部分被剪掉。
例如,你可能想把我们提到的你可以通过模拟输入获得的1024个原始值映射成一组只有10个的值,因为你可能有一些逻辑只处理10步。
你可以像这样做。
int acquiredValue = analogRead(A1);
int value = map(acquiredValue, 0, 1023, 0, 9);
这里有一个完整的例子。
void setup() {
Serial.begin(9600);
}
void loop() {
int acquiredValue = analogRead(A1);
int value = map(acquiredValue, 0, 1023, 0, 9);
Serial.println(value);
}
现在,你的输入不是有1024个可能的值,而是有一组受限制的10个可能的值,从0到9。