Изучение функции map().При просмотре
видео на канале Заметки Ардуинщика я обратил внимание на то, что АлексГайвер для преобразования численных диапазонов использует функцию map(). Он там в видео баловался сервомашинкой и я подумал, что эта функция инклудится библиотекой Servo. Но оказалось, нет. Эта функция штатно присутствует в среде разработки как любая другая математическая функция. И мне захотелось подробнее "пощупать" эту функцию. Для этого я из кода предыдущего скетча выкинул всё лишнее, оставив только чтение значения аналогового вывода А0. А также раскомментировал строки вывода инфы в монитор порта для просмотра значений после их обработки функцией map(). Вот исходный код скетча
Код: Выделить всё
void setup()
{
Serial.begin(9600);
}
void loop()
{
int val = analogRead(A0);
val = map(val, 0, 1023, 0, 75);
Serial.print("val=");
Serial.println(val, DEC);
delay(300);
}
О том, какие параметры может принимать функция map(), можно почитать
здесь. Первоначально я обозначил численный диапазон, из которого преобразовывать, от 0 до 1023. Именно эти значения считываются с аналогового вывода А0 и этот диапазон будет оставаться неизменным в нашей серии экспериментов. А вот диапазон, в который преобразовывать, будем менять и первоначально я его установил от 0 до 75. Вы это можете видеть в коде скетча. А вот, что выдал монитор порта при вращении ручки потенциометра от минимального значения до максимального (от крайнего левого положения до крайнего правого). Тут должен заметить, что схема подключения потенциометра осталась прежней от предыдущей схемы.
Всё получилось вполне предсказуемо. В мониторе значения изменилось от 0 до 75. Далее в функции map() меняем диапазон от -75 до 75.
В мониторе при том же вращении потенциометра слева направо я ожидал увидеть изменение значения от -75 до 75. Но сюрприз!
Оказалось, что функция map() отрицательные области переворачивает, то есть для неё отрицательные числа БОЛЬШЕ положительных. И для того, чтобы функция map() выдавала значения от минуса до плюса, диапазон нужно указывать следующим образом.
Вот теперь при вращении ручки слева направо и при изменении входного значения от 0 до 1023 на выходе функция map() выдаёт значения от -75 до 75.