Arduino.ru
Функция пропорционально переносит значение (value) из текущего диапазона значений (fromLow .. fromHigh) в новый диапазон (toLow .. toHigh), заданный параметрами.
Функция map() не ограничивает значение рамками диапазона, как это делает функция constrain(). Contrain() может быть использован до или после вызова map(), если необходимо ограничить допустимые значения заданным диапазоном.
Обратите внимание, что «нижняя граница» может быть как меньше, так и больше «верхней границы». Это может быть использовано для того чтобы «перевернуть» диапазон:
y = map(x, 1, 50, 50, 1);
Возможно использование отрицательных значений:
y = map(x, 1, 50, 50, -100);
Функция map() оперирует целыми числами. При пропорциональном переносе дробная часть не округляется по правилами, а просто отбрасывается.
Параметры
- value: значение для переноса
- fromLow: нижняя граница текущего диапазона
- fromHigh: верхняя граница текущего диапазона
- toLow: нижняя граница нового диапазона, в который переноситься значение
- toHigh: верхняя граница нового диапазона
Возвращаемое значение
Значение в новом диапазоне
Пример
/* Переносим значение с аналогового входа (возможные значения от 0 до 1023) в 8 бит (0..255) */ void setup() <> void loop()
Дополнительно
Математически функция map() может быть записана так:
long map(long x, long in_min, long in_max, long out_min, long out_max) < return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; >
Как работает map arduino
Преобразовывает значение переменной из одного диапазона в другой. Т.е. значение переменной value, равное fromLow, будет преобразовано в число toLow, а значение fromHigh — в toHigh. Все промежуточные значения value масштабируются относительного нового диапазона [toLow; toHigh].
Функция не ограничивает значение переменной заданными пределами, поскольку ее значения вне указанного диапазона иногда несут полезную информацию. Для ограничения диапазона необходимо использовать функцию constrain() либо до, либо после функции map().
Обратите внимание, что нижние пределы указываемых диапазонов (fromLow, toLow) численно могут быть больше верхних пределов (fromHigh, toHigh). В этом случае функция map() может использоваться для создания обратного диапазона чисел, например:
y = map(x, 1, 50, 50, 1);
Функция может обрабатывать отрицательные числа, поэтому этот пример
y = map(x, 1, 50, 50, -100);
также работает корректно.
Функция map() использует целочисленные вычисления, поэтому не возвращает дробных значений, как это иногда ожидается. При этом дробная часть числа просто отбрасывается, без округления или вычисления средних значений.
Параметры
value: переменная, значение которой необходимо преобразовать
fromLow: нижний предел текущего диапазона переменной value
fromHigh: верхний предел текущего диапазона переменной value
toLow: нижний предел нового диапазона переменной value
toHigh: верхний предел нового диапазона переменной value
Возвращаемые значения
Пример
/* Преобразование аналогового значения в 8-битное число (от 0 до 255) */ void setup() <> void loop()
Дополнение
Для интересующихся математикой приводим исходный код функции:
long map(long x, long in_min, long in_max, long out_min, long out_max) < return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; >
Как работает map arduino
Doubts on how to use Github? Learn everything you need to know in this tutorial.
Last Revision: Searching.
Last Build: 2023/11/20
Description
Re-maps a number from one range to another. That is, a value of fromLow would get mapped to toLow, a value of fromHigh to toHigh, values in-between to values in-between, etc.
Does not constrain values to within the range, because out-of-range values are sometimes intended and useful. The constrain() function may be used either before or after this function, if limits to the ranges are desired.
Note that the «lower bounds» of either range may be larger or smaller than the «upper bounds» so the map() function may be used to reverse a range of numbers, for example
y = map(x, 1, 50, 50, 1);
The function also handles negative numbers well, so that this example
y = map(x, 1, 50, 50, -100);
is also valid and works well.
The map() function uses integer math so will not generate fractions, when the math might indicate that it should do so. Fractional remainders are truncated, and are not rounded or averaged.
Syntax
map(value, fromLow, fromHigh, toLow, toHigh)
Parameters
value : the number to map.
fromLow : the lower bound of the value’s current range.
fromHigh : the upper bound of the value’s current range.
toLow : the lower bound of the value’s target range.
toHigh : the upper bound of the value’s target range.
Returns
The mapped value. Data type: long .
The Arduino map() function
The map() function makes it easy to convert numbers from one range to another. Here’s a simple example of its usage.
The map() function makes it easy to convert a value from one range into a proportional value of another range.
Let’s use an example that involves a potentiometer and an electrical motor.
We can sample the potentiometer with one of Arduino’s analog inputs, which have a resolution of 1024 values (10 bits). For this purpose, we use the analogRead() function.
To control the motor, we use Pulse Width Modulation which has a resolution of 256 values (8 bits). For this purpose, we use the analogWrite() function.
Therefore, whichever value we measure in the analog inputs, we have to convert it to a proportional value inside the PWM range of values.
Using the map function, this is as simple as this:
int mappedVal = map(analogRead(0),0,1023,0,254);
Say that the analogRead() function read the value «328» from the potentiometer. The call to the map() function will look like this (I have replaced the call to analogRead() with the explicit value «328»):
int mappedVal = map(328,0,1023,0,253);
The result of the mapping will be 81, which will be stored in the mappedVal variable.
Would you like to try this yourself? Here’s my Tinkercad project. It contains a virtual Arduino Uno with a simple sketch that contains the map() function example.