Описание функции map
Функция map() в Arduino пропорционально преобразует значение из одного диапазона в значение другого диапазона. Нижний предел может быть как меньше верхнего предела, так и больше. А также можно использовать отрицательные числа.
При преобразовании используется следующая формула для расчета значения:
Синтаксис
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;
}



