更改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不同)。但是,這是預期的,因為您正在降低解析度。
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP