更改Arduino中analogRead的分辨率
默认情况下,Arduino中的analogRead遵循10位分辨率(不同开发板可能有所不同)。但是,有时您可能不需要这么高的分辨率。通常,人们希望将分辨率设置为8位,以节省存储空间。这是因为8位值只需要占用一个字节的存储空间,而高于8位的任何值都需要占用两个字节的存储空间。
幸运的是,Arduino有一个内置函数可以更改模拟到数字转换的分辨率。该函数是analogReadResolution(),它以位为单位将分辨率作为参数。
因此,如果您希望设置8位分辨率,则可以运行analogReadResolution(8)。下面给出了一个示例实现:
示例
void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: analogReadResolution(8); Serial.println(analogRead(A0)); //Will perform ADC using 8-bit resolution analogReadResolution(10); Serial.println(analogRead(A0)); //Will perform ADC using 10-bit resolution }
注意:如果您要求的分辨率高于开发板支持的分辨率,则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不同)。但是,这是预期的,因为您正在降低分辨率。
广告