當你從類比輸入腳取得類比數值時,預設情況下它們的範圍是從0
到1023
。
這是因為類比讀取的解析度是10位元,2的10次方等於1024。
小提示:在基於ARM的Arduino設備上,如Arduino Zero、Arduino Due和Arduino MKR系列,你可以映射高達12位元,但預設值是0。在這些設備上,你可以調用
analogReadResolution(12)
來將解析度設置為12位元,從而可以從0到4095範圍內進行映射,而不是1023。
由Arduino語言提供的map()
函數可以將這個值範圍映射到不同的範圍。
以下是函數的簽名:
int <newvalue> = map(<value>, <original_min>, <original_max>, <new_min>, <new_max>);
需要注意的是,該函數返回一個整數值,小數部分會被截斷。
例如,你可能希望將我們之前提到的1024個原始數值映射到只有10個值的集合,因為你可能有一些只處理10個步驟的邏輯。
你可以這樣做:
int acquiredValue = analogRead(A1);
int value = map(acquiredValue, 0, 1023, 0, 9);
以下是一個完整的示例:
void setup() {
Serial.begin(9600);
}
void loop() {
int acquiredValue = analogRead(A1);
int value = map(acquiredValue, 0, 1023, 0, 9);
Serial.println(value);
}
現在,不再有1024個可能的輸入值,而是只有10個可能的值範圍,從0到9。