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

Урок 14/31-1: Arduino Millis (без задержки) и функции map | SunFounder Robojax

Урок 14/31-1: Arduino Millis (без задержки) и функции map | SunFounder Robojax

Это руководство знакомит с функцией Arduino millis() — фундаментальным инструментом для проектов, основанных на времени, которым требуется неблокирующее выполнение кода. В отличие от delay(), которая останавливает всю программу, millis() отслеживает время, прошедшее с момента запуска платы, что позволяет вашему Arduino эффективно выполнять несколько задач одновременно. Вы можете использовать этот метод для создания:

  • Неблокирующих мигающих светодиодов, работающих во время выполнения другого кода.
  • Событий по таймеру, запускаемых датчиками или кнопками, например, света, который выключается через 5 секунд после нажатия кнопки.
  • Простых систем регистрации данных, записывающих значения датчиков через регулярные промежутки времени.
  • Систем пользовательского интерфейса, реагирующих на ввод без зависаний.
Собранная машина Sunfounder

Понимание функции millis()

Функция millis() — это встроенная команда Arduino, которая возвращает количество миллисекунд с момента начала выполнения текущей программы на плате Arduino. Она начинается с нуля при включении питания и увеличивается каждую миллисекунду. Вы можете вызывать эту функцию в любой точке вашего кода, чтобы получить текущее значение «времени работы». Например, через 1 секунду она вернёт 1000; через 5 секунд — 5000. Ключевое преимущество в том, что она не приостанавливает ваш код, поэтому вы можете проверять время, пока другие задачи продолжают выполняться.

Почему стоит избегать delay()?

Функция delay() — это простой способ приостановить программу, но она является блокирующей. Когда вы вызываете delay(5000), Arduino прекращает выполнение всего остального кода на 5 секунд, замораживая любые подключённые компоненты. Это проблематично для проектов, которым необходимо реагировать на ввод или непрерывно обновлять выходные данные. Использование millis() позволяет проверять, прошло ли определённое количество времени, не останавливая остальную часть программы, что делает её идеальной для многозадачности.

Необходимое оборудование

  • Плата Arduino (Uno, Mega и т. д.)
  • USB-кабель для программирования и питания

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

Для этого примера не требуется внешних подключений. Arduino нужно только подключить к компьютеру через USB для загрузки кода и просмотра вывода в мониторе последовательного порта.

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

Этот первый пример — простая демонстрация того, как работает millis(). Код инициализирует монитор последовательного порта и выводит значение millis() в бесконечном цикле.

void setup() {
  Serial.begin(9600);//инициализация монитора последовательного порта
  Serial.println("Introduction to millis");
  delay(2000);
}

void loop() {
  Serial.println(millis());
}

Функция setup() запускает последовательную связь на скорости 9600 бод и выводит приветственное сообщение. delay(2000) здесь используется только для демонстрации, чтобы показать, что millis() начинает отсчёт с момента запуска программы. Функция loop() непрерывно выводит текущее значение millis(). Когда вы откроете монитор последовательного порта, вы увидите, как время в миллисекундах быстро увеличивается. Это иллюстрирует, что millis() — это счётчик, который никогда не останавливается, обеспечивая непрерывную временную привязку для вашей программы.

Это фундаментальный строительный блок. В видео инструктор демонстрирует, как использовать это значение для запуска действий через заданный период, например, проверки, прошло ли 5000 миллисекунд (5 секунд), перед выполнением определённого блока кода. Это делается путём сохранения текущего значения millis() в переменной и последующего сравнения в основном цикле.

Управление светодиодом с процентным значением с помощью функции map() рассматривается в Уроке 14/31-4: Пример 1 кода Arduino map().

Живая демонстрация проекта

В видео инструктор загружает этот код и открывает монитор последовательного порта. Вы можете видеть, что вывод начинается после начальной задержки в 2 секунды, показывая значение около 1999. Затем числа быстро увеличиваются, демонстрируя непрерывный отсчёт миллисекунд. Этот живой просмотр подтверждает, что функция работает, и даёт чёткое визуальное понимание того, как отслеживается время.

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

Главы

  • [00:00] Введение в millis()
  • [01:19] Что такое millis() и зачем её использовать
  • [03:06] Практическая демонстрация millis()
  • [05:46] Использование millis() для запуска события по таймеру
  • [08:29] Пример с кнопкой
  • [12:14] Расширенный пример тайминга с кнопкой
  • [17:20] Введение в функцию map()
  • [19:47] Пример кода map() со светодиодом
  • [22:41] Создание пользовательской функции map

Изображения

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
916-Lesson 14/31-1: Arduino coding millis() example 1
Язык: C++
/*
Lesson 14/31: Arduino coding millis() 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/>.
 */
/*
 * Example-1 of using millis() with Arduino
 * Written by Ahmad Shamshiri on July 27, 2019
 * in Ajax, Ontario, Canada
 * Watch video instructio for millis() :https://youtu.be/u2HsiTS8niQ
 */


void setup() {
  Serial.begin(9600);//initialize serial monitor
  Serial.println("Introduction to millis");
  delay(2000);
  


}

void loop() {

  Serial.println(millis());

}// loop end

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

Файлы📁

Библиотеки Arduino (zip)