在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/
廣告