Урок 14/31-5: Пример 2 функции map() в Arduino
В этом руководстве демонстрируется, как использовать функцию Arduino map() для управления яркостью светодиода с помощью процентного значения (0–100%) вместо исходного диапазона 0–255, требуемого функцией analogWrite(). Это фундаментальный метод, который упрощает ваш код и делает его гораздо более интуитивным, поскольку вы можете мыслить в процентах, а не в произвольных байтовых значениях.
Этот навык необходим для любого проекта, где требуется масштабировать показания датчиков или управляющие сигналы. Например, вы можете использовать его для:
- Управления яркостью светодиода или скоростью двигателя на основе показаний потенциометра.
- Преобразования выходного сигнала датчика температуры (например, 0–1023) в диапазон Цельсия или Фаренгейта.
- Сопоставления аналогового входа джойстика для управления положением серводвигателя.
- Создания простого пользовательского интерфейса, где процентное значение используется для установки уровня мощности устройства.
К концу этого урока вы сможете писать более чистый и поддерживаемый код, который легче читать и изменять.
Оборудование/Компоненты
В этом проекте используется минимальный набор компонентов, что делает его идеальным для начинающих. Вам понадобятся:
- Плата Arduino (например, Uno).
- Светодиод.
- Резистор на 220 Ом.
- Соединительные провода.
- Макетная плата (необязательно, но рекомендуется).
Руководство по подключению
Подключение для этого проекта очень простое, как показано в видео (в видео на 20:47). Светодиод подключается к контакту 3 Arduino через токоограничивающий резистор на 220 Ом.
Подключите анод (более длинную ножку) светодиода к контакту 3 через резистор. Подключите катод (более короткую ножку) светодиода к контакту заземления (GND) на Arduino.
Объяснение кода
В этом примере основное внимание уделяется пользовательской функции, которая упрощает управление яркостью светодиода. Код построен вокруг пользовательской функции под названием pwmValue(), которая является ключом к интуитивности кода.
Давайте разберем настраиваемые части кода:
int LEDpin = 3; //определяем контакт для светодиода
Эта строка определяет контакт Arduino, к которому подключен светодиод. Вы можете изменить число 3 на любой другой контакт с поддержкой ШИМ на вашей плате Arduino.
Ядром проекта является пользовательская функция pwmValue(). Эта функция принимает процентное значение в качестве входных данных и преобразует его в диапазон 0–255, используемый функцией analogWrite(). Именно здесь функция map() выполняет свою магию.
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
}
Чтобы использовать эту функцию, просто вызовите её с желаемым процентным значением яркости. Функция вернет правильное значение для analogWrite(). Например, pwmValue(60) вернет 153, что соответствует 60% от 255. Функция также включает проверку безопасности, чтобы убедиться, что входное процентное значение находится в диапазоне от 0 до 100, возвращая 0, если оно выходит за этот диапазон.
В функции setup() вы можете увидеть, как это используется:
int b=5;//60% яркости
Serial.println( pwmValue(b) );//выводим это в последовательный монитор
analogWrite(LEDpin, pwmValue(b));// включаем светодиод с яркостью 60%
Здесь переменная b устанавливается в желаемое процентное значение яркости. Затем функция pwmValue(b) используется как для вывода преобразованного значения в последовательный монитор, так и для установки яркости светодиода. Чтобы изменить яркость светодиода, вам нужно только изменить значение b. Функция map() выполняет все необходимые вычисления за вас.
Живой проект/Демонстрация
В видео ведущий демонстрирует проект, изменяя значение переменной b и загружая код в Arduino. Когда b установлено на 60, код преобразует его в 153, и светодиод загорается с яркостью 60%. Изменение b на 90 преобразуется в 229, делая светодиод заметно ярче. Установка значения 100 преобразуется в 255, что является максимальной яркостью. Демонстрация ясно показывает, как функция map() позволяет управлять светодиодом с помощью интуитивного процентного значения, в то время как последовательный монитор подтверждает точное значение 0–255, отправляемое на контакт (в видео на 21:29).
Связанные проекты из этого видео
- Урок 14/31-1: Arduino Millis (без задержки) и функции map | SunFounder Robojax
- Урок 14/31-2: Пример 2 кода Arduino millis() с событием
- Урок 14/31-3: Пример 3 кода Arduino millis() с кнопкой
- Урок 14/31-4: Пример 1 кода Arduino map()
Главы
- [00:00] Введение в функции Millis и map
- [01:19] Что такое Millis и зачем его использовать
- [05:46] Использование Millis с событием для выполнения действия
- [08:35] Пример 2 Millis с кнопкой
- [12:14] Пример 3 Millis с проверкой двух нажатий кнопки
- [17:20] Введение в функцию map()
- [19:47] Пример кода для преобразования процента в яркость светодиода
- [20:47] Живая демонстрация функции map()
- [22:41] Создание пользовательской функции для обработки преобразования
/*
Lesson 14/31-5: Arduino coding map( ) example-2
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
int LEDpin = 3; //defind pin for LED
void setup() {
Serial.begin(9600);//initialzie serial monitor with 9600 baud
pinMode(LEDpin, OUTPUT);//set pin as output
int b=5;//60% brightness
Serial.println( pwmValue(b) );//print it on serial monitor
analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness
}
void loop() {
}
/*
* pwmValue(int percent)
* @param precent is value between 0 to 100
* @return it returns the mapped value from 0 to 255
* written by Ahmad Shamshiri on Dec 9, 2022
*
*/
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
} //pwmValue end
Вещи, которые могут вам понадобиться
-
АмазонкаSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Амазонка
-
Амазонка
-
Амазонка
-
Амазонка
-
Другой
Ресурсы и ссылки
-
Внешний
Файлы📁
Руководство пользователя
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB