改变Arduino中analogRead的分辨率

默认情况下,Arduino 中的analogRead遵循10 位分辨率(这对于不同的板可能有所不同)。但是,有时,您可能不需要这么高的分辨率。通常,人们希望将分辨率设置为 8 位,以节省存储空间。这是因为 8 位值将只占用一个字节的存储空间,而高于此值的任何值都将占用两个字节的存储空间。

幸运的是,Arduino 有一个内置功能来改变模数转换的分辨率。函数是analogReadResolution(),它接受参数作为以位为单位的分辨率。

因此,如果您希望设置 8 位分辨率,您可以运行analogReadResolution(8)。下面给出了一个示例实现 -

示例

void setup() {

   // 把你的设置代码放在这里,运行一次:

   Serial.begin(9600);

}

void loop() {

   // 把你的主要代码放在这里,重复运行:

   analogReadResolution(8);

   Serial.println(analogRead(A0)); //将使用 8 位分辨率执行 ADC

   analogReadResolution(10);

   Serial.println(analogRead(A0)); //将使用 10 位分辨率执行 ADC

}

注意:如果您需要比您的电路板支持的分辨率更高的分辨率,那么 Arduino 只会将可用的最高分辨率映射到您的电路板要求。

例如,假设您的主板支持 10 位 (0-1024) 的最大分辨率。现在,如果您希望获得 12 位分辨率,那么 Arduino 将获得 10 位的值,然后将其放大到 12 位。如果您使用 10 位分辨率获得的值是 512,则 Arduino 将输出 512*4096/1024 = 2048。从技术上讲,Arduino 将在最不重要的位置添加填充 0 以匹配请求的分辨率。

同样,如果您选择的分辨率低于您的电路板支持的最低分辨率,那么 Arduino 将砍掉最低有效位。例如,如果电路板支持 10 位的最小分辨率,而您要求 8 位分辨率,那么结果的二进制表示的最后两位数字将被截去,得到一个 8 位数字。假设您得到的 10 位分辨率的数字是 491。在二进制中,它表示为 0b111101011。为了给你一个 8 位的输出,最后两位数字将被砍掉,结果数字(0b1111010)将被返回,其十进制值为 122。如你所见,损失了一些精度(491/1023与 122/255 不同)。但是,这是意料之中的,因为您正在降低分辨率。

以上是 改变Arduino中analogRead的分辨率 的全部内容, 来源链接: utcz.com/z/327567.html

回到顶部