/

Arduino專案:map()函數

Arduino專案:map()函數

當你從類比輸入腳取得類比數值時,預設情況下它們的範圍是從01023

這是因為類比讀取的解析度是10位元,2的10次方等於1024。

小提示:在基於ARM的Arduino設備上,如Arduino Zero、Arduino Due和Arduino MKR系列,你可以映射高達12位元,但預設值是0。在這些設備上,你可以調用analogReadResolution(12)來將解析度設置為12位元,從而可以從0到4095範圍內進行映射,而不是1023。

由Arduino語言提供的map()函數可以將這個值範圍映射到不同的範圍。

以下是函數的簽名:

1
int <newvalue> = map(<value>, <original_min>, <original_max>, <new_min>, <new_max>);

需要注意的是,該函數返回一個整數值,小數部分會被截斷。

例如,你可能希望將我們之前提到的1024個原始數值映射到只有10個值的集合,因為你可能有一些只處理10個步驟的邏輯。

你可以這樣做:

1
2
int acquiredValue = analogRead(A1);
int value = map(acquiredValue, 0, 1023, 0, 9);

以下是一個完整的示例:

1
2
3
4
5
6
7
8
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。