更改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不同)。但是,這是預期的,因為您正在降低解析度。

更新於: 2021年3月23日

3K+瀏覽量

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.