Функция map()

arduino-logo

Описание функции map

Функция map() в Arduino пропорционально преобразует значение из одного диапазона в значение другого диапазона. Нижний предел может быть как меньше верхнего предела, так и больше. А также можно использовать отрицательные числа.

При преобразовании используется следующая формула для расчета значения:

\[y=\frac{(x-in_{min})\times(out_{max}-out_{min})}{(in_{max}-in_{min})}+out_{min}\]

Синтаксис

long map(long x, long in_min, long in_max, long out_min, long out_max)

Параметры

  • x — значение, которое нужно преобразовать из одного диапазона в другой.
  • in_min — нижний предел диапазона, из которого необходимо перенести значение.
  • in_max — верхний предел диапазона, из которого необходимо перенести значение.
  • out_min — нижний предел диапазона, в который необходимо перенести значение.
  • out_max — верхний предел диапазона, в который необходимо перенести значение.

Что возвращает

Значение из нового диапазона.


Пример использования функции map

К аналоговому контакту А0 подключен делитель напряжения для получения уровня освещенности. На одном плече фотодиод, на другом — резистор. К контакту 6 подключена адресная светодиодная лента (WS2812B). Будем получать значение с АЦП (от 0 до 1023) и преобразовывать в значение с диапазона от 0 до 255. Полученное значение установим в качестве уровня яркости светодиодной ленты:

#include <Adafruit_NeoPixel.h>    // Подключаем библиотеку Adafruit NeoPixels

#define PIN            6          // Номер контакта для адресной светодиодной ленты
#define NUMPIXELS      30         // Количество светодиодов

uint16_t a;
uint8_t  b;

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);   // Создание объекта класса Adafruit NeoPixels

void setup() {
  Serial.begin(9600);                       // Инициализация последовательного порта
  pinMode(A0, INPUT);                       // Контакт А0 настраиваем на вход
  pixels.begin();                           // Инициализируем объект для работы с WS2812B
  pixels.fill(0x0000FF, 0, NUMPIXELS);      // Устанавливаем все светодиоды в синий цвет
  pixels.show();                            // Применяем последнее изменение для WS2812B
  pixels.setBrightness(200);                // Устанавливаем яркость 200 (от 0 до 255)
}

void loop() {
  a = analogRead(A0);                       // Считываем значение с аналогового входа A0 (с фотодиода)
  b = map(a, 0, 1023, 0, 255);              // Преобразуем полученное значение из диапазона от 0 до 1023 в значение с диапазона от 0 до 255
  pixels.setBrightness(b);                  // Устанавливаем яркость. В качестве параметра передаем полученное ранее значение
  pixels.show();                            // Обновляем LED
  delay(1000);                              // Ждем 1 секунду
}

Код функции map

(hardware/arduino/avr/cores/arduino/WMatch 1.8.10)

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;
}

Загрузки

Где купить

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии