在Arduino中将10位数映射到8位数
出于各种原因,在Arduino中经常需要进行映射。一个例子是将10位ADC输出映射到8位以节省存储空间。10位数需要占用2个字节的存储空间,而8位数只需要占用一个字节,并且仍然可以保留10位数的大部分信息。
Arduino有一个现成的map()函数可以实现这一点。
语法
map(value, fromLow, fromHigh, toLow, toHigh)
其中,value是要映射的值;fromLow和fromHigh是当前值的范围边界;toHigh和toLow是新值的范围边界。
因此,如果我需要将10位数映射到8位数,
语法
map(value, 0, 1023, 0, 255)
这是因为10位数的最小值为0,最大值为1023。对于8位数,最小值和最大值分别为0和255。
从语法中可以看出,可以使用此函数将数字从任何范围映射到任何新范围。不需要将自己限制为2的幂。
示例
以下示例说明了此函数的使用:
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println();
int a = 200;
Serial.println(map(a,0,500,0,1000));
Serial.println(map(a,0,1023,0,255));
}
void loop() {
// put your main code here, to run repeatedly:
}输出
串口监视器输出:

如您所见,此函数可用于向上缩放和向下缩放给定数字。首先,我们将(0,500)范围内的数字200向上缩放至(0,1000)范围。正如预期的那样,该函数返回400。在第二种情况下,我们将(0,1023)范围内的200向下缩放至(0,255)范围。该函数返回49,这与200*255/1023(=49.85)的整数部分匹配。
您可以参考Arduino的文档以获取有关此函数的更多信息:https://www.arduino.cc/reference/en/language/functions/math/map/
广告
数据结构
网络
关系型数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP