在Arduino中將10位數對映到8位數


出於各種原因,在Arduino中經常需要進行對映。一個例子是將10位ADC輸出對映到8位以節省儲存空間。10位數需要佔用2個位元組的儲存空間,而8位數只需要佔用一個位元組,並且仍然可以保留10位數的大部分資訊。

Arduino有一個現成的map()函式可以實現這一點。

語法

map(value, fromLow, fromHigh, toLow, toHigh)

其中,value是要對映的值;fromLow和fromHigh是當前值的範圍邊界;toHigh和toLow是新值的範圍邊界。

因此,如果我需要將10位數對映到8位數,

語法

map(value, 0, 1023, 0, 255)

這是因為10位數的最小值為0,最大值為1023。對於8位數,最小值和最大值分別為0和255。

從語法中可以看出,可以使用此函式將數字從任何範圍對映到任何新範圍。不需要將自己限制為2的冪。

示例

以下示例說明了此函式的使用:

void setup() {
   // put your setup code here, to run once:
   Serial.begin(9600);
   Serial.println();

   int a = 200;
   Serial.println(map(a,0,500,0,1000));
   Serial.println(map(a,0,1023,0,255));
}

void loop() {
   // put your main code here, to run repeatedly:
}

輸出

序列埠監視器輸出:

如您所見,此函式可用於向上縮放和向下縮放給定數字。首先,我們將(0,500)範圍內的數字200向上縮放至(0,1000)範圍。正如預期的那樣,該函式返回400。在第二種情況下,我們將(0,1023)範圍內的200向下縮放至(0,255)範圍。該函式返回49,這與200*255/1023(=49.85)的整數部分匹配。

您可以參考Arduino的文件以獲取有關此函式的更多資訊:https://www.arduino.cc/reference/en/language/functions/math/map/

更新於:2021年5月31日

1K+瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告