
Описание функции 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; }