改变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不同)。但是,这是意料之中的,因为您正在降低分辨率。