Код для поиска

Урок 14/31-5: Пример 2 функции map() в Arduino

Урок 14/31-5: Пример 2 функции map() в Arduino

В этом руководстве демонстрируется, как использовать функцию Arduino map() для управления яркостью светодиода с помощью процентного значения (0–100%) вместо исходного диапазона 0–255, требуемого функцией analogWrite(). Это фундаментальный метод, который упрощает ваш код и делает его гораздо более интуитивным, поскольку вы можете мыслить в процентах, а не в произвольных байтовых значениях.

Собранный автомобиль Sunfounder

Этот навык необходим для любого проекта, где требуется масштабировать показания датчиков или управляющие сигналы. Например, вы можете использовать его для:

  • Управления яркостью светодиода или скоростью двигателя на основе показаний потенциометра.
  • Преобразования выходного сигнала датчика температуры (например, 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).

Связанные проекты из этого видео

Главы

  • [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] Создание пользовательской функции для обработки преобразования

Изображения

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
920-Lesson 14/31-5: Arduino coding map() example 2
Язык: C++
/*
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
 

Вещи, которые могут вам понадобиться

Файлы📁

Руководство пользователя