Arduino:Справочник языка Arduino/Функции/Математические функции/map(): различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
м (Замена текста — «<syntaxhighlight lang="c">» на «<syntaxhighlight lang="c" enclose="div">»)
 
Нет описания правки
 
(не показаны 3 промежуточные версии 2 участников)
Строка 10: Строка 10:
Обратите внимание, что '''"нижняя граница"''' может быть как меньше, так и больше '''"верхней границы"'''. Это может быть использовано для того чтобы '''"перевернуть" диапазон"''':
Обратите внимание, что '''"нижняя граница"''' может быть как меньше, так и больше '''"верхней границы"'''. Это может быть использовано для того чтобы '''"перевернуть" диапазон"''':


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
y = map(x, 1, 50, 50, 1);
y = map(x, 1, 50, 50, 1);
</syntaxhighlight>
</syntaxhighlight>
Строка 16: Строка 16:
Возможно использование отрицательных значений:
Возможно использование отрицательных значений:


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
y = map(x, 1, 50, 50, -100);
y = map(x, 1, 50, 50, -100);
</syntaxhighlight>
</syntaxhighlight>
Строка 24: Строка 24:
== Параметры ==
== Параметры ==


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
value: значение для переноса
value: значение для переноса
fromLow: нижняя граница текущего диапазона
fromLow: нижняя граница текущего диапазона
Строка 38: Строка 38:
== Пример ==
== Пример ==


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
/* Переносим значение с аналогового входа (возможные значения от 0 до 1023) в 8 бит (0..255) */
/* Переносим значение с аналогового входа (возможные значения от 0 до 1023) в 8 бит (0..255) */
void setup() {}
void setup() {}
Строка 54: Строка 54:
Математически функция '''map()''' может быть записана так:
Математически функция '''map()''' может быть записана так:


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
long map(long x, long in_min, long in_max, long out_min, long out_max)
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
{
Строка 66: Строка 66:


<references />
<references />
{{Навигационная таблица/Портал/Arduino}}
[[Категория:Справочник языка Arduino]]
[[Категория:Справочник языка Arduino]]
[[Категория:Функции языка Arduino]]
[[Категория:Функции языка Arduino]]

Текущая версия от 11:28, 8 июля 2023

Проверка/Оформление/Редактирование: Мякишев Е.А.


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

Функция пропорционально переносит значение (value) из текущего диапазона значений (fromLow .. fromHigh) в новый диапазон (toLow .. toHigh), заданный параметрами.

Функция map() не ограничивает значение рамками диапазона, как это делает функция constrain(). constrain() может быть использован до или после вызова 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()
{
  int val = analogRead(0);
  val = map(val, 0, 1023, 0, 255);
  analogWrite(9, val);
}

Дополнительно

Математически функция 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;
}

См.также

Внешние ссылки