Функция map в Ардуино переносит значение из текущего диапазона в новый диапазон значений, заданный параметрами. Команда map() в Arduino IDE работает только с целыми числами. Дробная часть числа не округляется в соответствии с математическими правилами пропорционального переноса, а просто отбрасывается и не учитывается. Попробуем использовать функцию map и map float в Arduino с примерами программ.
СОДЕРЖАНИЕ ►
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- светодиоды и резисторы
- фоторезистор
- макетная плата
- коннекторы
Дополнительные материалы на эту тему:
Иногда значения, которые мы получаем на микроконтроллере при считывании данных с аналогового датчика, могут выходить за пределы нужного нам диапазона. И бывает необходимо перевести их в новый диапазон, чтобы правильно использовать данные в программе. Обратите внимание, что функция map Arduino IDE может также инвертировать диапазон, то есть «нижний предел» может быть больше «верхнего предела».
Функция map в Arduino описание, синтаксис

Синтаксис map:
- map(value, fromLow, fromHigh, toLow, toHigh)
Параметры map:
- value: значение для переноса
- fromLow: нижняя граница текущего диапазона
- fromHigh: верхняя граница текущего диапазона
- toLow: нижняя граница нового диапазона
- toHigh: верхняя граница нового диапазона
Пример программы с функцией map Arduino

Следующий пример программы демонстрирует применение функции мап. Светодиод должен светиться тем ярче, чем окружающее пространство темнее. То есть значение в функции analogWrite должно быть обратно пропорционально значению с датчика освещенности (фоторезистора) analogRead. Необходимо инвертировать для этого value и установить новые границы, чтобы значение изменилось с 0/1023 на 255/0.
Скетч с фоторезистором и командой map Arduino
#define LED 10
#define LDR A1
int val, led;
void setup() {
Serial.begin(9600);
pinMode(LDR, INPUT);
pinMode(LED, OUTPUT);
}
void loop() {
value = analogRead(LDR);
Serial.println(val);
led = map(val, 0, 1023, 255, 0);
analogWrite(LED, led);
delay(100);
}
Функция map float Arduino, дробные числа
В следующем примере данные с фоторезистора (значения от 0 до 1023) мы переведем в вольты (значения от 0 до 5) и выведем их на монитор порта. Чтобы значения были с дробным числом, для более точного измерения напряжения на аналоговом входе, следует использовать функцию float mapf в скетче. Не меняя схему из первого примера, загрузите следующую программу в микроконтроллер и откройте монитор порта Arduino IDE.
#define LED 10
#define LDR A1
int val, led;
void setup() {
Serial.begin(9600);
pinMode(LDR, INPUT);
pinMode(LED, OUTPUT);
}
void loop() {
val = analogRead(LDR);
float data = mapf(val, 0, 1023, 0, 5);
Serial.print(data);
Serial.println(" V");
led = map(val, 0, 1023, 255, 0);
analogWrite(LED, led);
delay(100);
}
float mapf(float value,float fromLow,float fromHigh,float toLow,float toHigh) {
float result;
result = (value - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow;
return result;
}
Заключение. При преобразовании переменной float с помощью map() дробная часть числа не округляется, а просто отбрасывается (не учитывается). Этот факт необходимо учитывать при работе с типом данных float в языке Arduino. Обратите внимание, что функция map использует деление на 2, что является очень затратной операцией. Поэтому функция работает очень медленно и не должна прерываться при запуске.
