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

Урок 14/31-4: Arduino программирование, пример map() 1

Урок 14/31-4: Arduino программирование, пример map() 1

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

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

  • Управления скоростью двигателя постоянного тока на основе показаний потенциометра.
  • Отображения сырого значения датчика температуры по шкале 0–100%.
  • Преобразования координат джойстика в углы сервопривода.
  • Регулировки яркости светодиода на основе датчика освещенности.
  • Преобразования аналогового показания 0–5 В в цифровое значение 0–1023 или наоборот.

Оборудование/Компоненты

Для выполнения этого проекта вам понадобятся следующие компоненты:

  • Плата Arduino (Uno, Nano и т. д.)
  • Светодиод
  • Резистор на 220 Ом
  • Соединительные провода
  • Макетная плата (необязательно, но рекомендуется)

Схема подключения

В видео инструктор демонстрирует проект, используя схему подключения из предыдущего урока о плавном затухании светодиода. Схема проста: подключите анод (длинную ножку) светодиода к резистору на 220 Ом, а другой конец резистора — к цифровому контакту 3 на Arduino. Подключите катод (короткую ножку) светодиода непосредственно к контакту заземления (GND) на Arduino.

Объяснение кода

Код для этого примера очень лаконичен, а основная логика находится в функции setup(). Давайте разберем части, которые пользователь может настраивать.

int LEDpin = 3; //определяем контакт для светодиода

Эта строка определяет контакт Arduino, к которому подключен ваш светодиод. В этом примере он установлен на контакт 3, который поддерживает ШИМ, что необходимо для аналогового вывода. Вы можете изменить это число, если подключите светодиод к другому ШИМ-контакту.

int b=8;//60% яркость

Это ключевая переменная, которую вы будете изменять для проверки различных уровней яркости. Она представляет желаемую яркость в процентах. В комментарии кода указано «60%», но для демонстрации в видео значение установлено на 8. Вы можете изменить его на любое целое число от 0 до 100. Например, установка b = 60 будет означать уровень яркости 60%.

int brightness = map(b, 0, 100, 0,255);

Это сердце урока. Функция map() берет ваше процентное значение (b) и преобразует его из исходного диапазона (от 0 до 100) в новый целевой диапазон (от 0 до 255). Результат сохраняется в переменной brightness, которая затем используется для записи аналогового значения на контакт светодиода.

analogWrite(LEDpin, brightness);// включаем светодиод с яркостью 60%

Наконец, эта строка отправляет преобразованное значение на контакт светодиода с помощью analogWrite(). Это устанавливает коэффициент заполнения светодиода, фактически управляя его яркостью. Прелесть этого подхода в том, что вам нужно только изменить переменную b для управления светодиодом, а функция map() выполняет все необходимые вычисления.

Живой проект/Демонстрация

В видео инструктор загружает код и демонстрирует эффект изменения переменной b. Когда b установлено на 8, монитор последовательного порта выводит преобразованное значение 20, и светодиод заметно тусклый. Изменение b на 90 дает преобразованное значение 229, делая светодиод значительно ярче. Установка b на 100 преобразуется в 255, что соответствует полной яркости. Эта практическая демонстрация наглядно показывает, как функция map() упрощает процесс управления аналоговыми выходами с помощью удобных процентных значений.

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

Главы

  • [00:00] Введение в курс Arduino от Robojax
  • [01:19] Что такое millis() и зачем его использовать
  • [05:46] Пример 1: Использование millis() для события по времени
  • [08:29] Пример 2: Использование millis() с кнопкой
  • [12:14] Пример 3: Обнаружение второго нажатия кнопки после задержки
  • [17:20] Введение в функцию map()
  • [19:47] Разбор кода для примера с map()
  • [20:41] Живая демонстрация функции map()

Изображения

Sunfounder car assembled
Sunfounder car assembled
919-Lesson 14/31-4: Arduino coding map() example 1
Язык: C++
/*
Lesson 14/31: Arduino coding map( ) example-1
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);//initialize serial monitor with 9600 baud
    pinMode(LEDpin, OUTPUT);//set pin as output
    int b=8;//60% brightness
    int brightness = map(b, 0, 100, 0,255);
    Serial.println(brightness);//print it on serial monitor
    analogWrite(LEDpin, brightness);// turn the LED on with 60% brightness   
 }

 void loop() {

 
 }
 

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

Файлы📁

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