Código de búsqueda

Lección 14/31-1: Arduino Millis (sin delay) y funciones map | SunFounder Robojax

Lección 14/31-1: Arduino Millis (sin delay) y funciones map | SunFounder Robojax

Esta guía presenta la función millis() de Arduino, una herramienta fundamental para proyectos basados en tiempo que requieren ejecución de código no bloqueante. A diferencia de delay(), que detiene todo el programa, millis() rastrea el tiempo transcurrido desde que la placa se inició, permitiendo que tu Arduino realice múltiples tareas de manera efectiva. Puedes usar esta técnica para construir:

  • Parpadeadores de LED no bloqueantes que funcionan mientras se ejecuta otro código.
  • Eventos temporizados activados por sensores o botones, como una luz que se apaga 5 segundos después de presionar un botón.
  • Sistemas simples de registro de datos que guardan valores de sensores a intervalos regulares.
  • Sistemas de interfaz de usuario que responden a entradas sin congelarse.
Coche Sunfounder ensamblado

Entendiendo la función millis()

La función millis() es un comando integrado de Arduino que devuelve el número de milisegundos desde que la placa Arduino comenzó a ejecutar el programa actual. Comienza en cero al encenderse y se incrementa cada milisegundo. Puedes llamar a esta función en cualquier punto de tu código para obtener el valor actual de "tiempo de actividad". Por ejemplo, después de 1 segundo, devuelve 1000; después de 5 segundos, devuelve 5000. La ventaja clave es que no pausa tu código, por lo que puedes verificar el tiempo mientras otras tareas continúan ejecutándose.

¿Por qué evitar delay()?

La función delay() es una forma sencilla de pausar un programa, pero es una función bloqueante. Cuando llamas a delay(5000), el Arduino detiene la ejecución de todo el otro código durante 5 segundos, congelando cualquier componente conectado. Esto es problemático para proyectos que necesitan responder a entradas o actualizar salidas continuamente. Usar millis() te permite verificar si ha pasado cierta cantidad de tiempo sin detener el resto de tu programa, lo que lo hace ideal para multitarea.

Hardware Requerido

  • Placa Arduino (Uno, Mega, etc.)
  • Cable USB para programación y alimentación

Guía de Conexiones

Este ejemplo no requiere conexiones externas. El Arduino solo necesita estar conectado a tu computadora mediante USB para cargar el código y ver la salida del monitor serie.

Explicación del Código

Este primer ejemplo es una demostración simple de cómo funciona millis(). El código inicializa el monitor serie e imprime el valor de millis() en un bucle infinito.

void setup() {
  Serial.begin(9600);//inicializar monitor serie
  Serial.println("Introducción a millis");
  delay(2000);
}

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

La función setup() inicia la comunicación serie a 9600 baudios e imprime un mensaje de bienvenida. El delay(2000) aquí es solo para demostración, para mostrar que millis() comienza a contar desde el momento en que el programa se ejecuta. La función loop() imprime continuamente el valor actual de millis(). Cuando abras el Monitor Serie, verás el tiempo en milisegundos aumentando rápidamente. Esto ilustra que millis() es un contador que nunca se detiene, proporcionando una referencia de tiempo continua para tu programa.

Este es el bloque fundamental. En el video, el instructor demuestra cómo usar este valor para activar acciones después de un período establecido, como verificar si han pasado 5000 milisegundos (5 segundos) antes de ejecutar un bloque de código específico. Esto se hace almacenando el valor actual de millis() en una variable y luego comparándolo en el bucle principal.

El control de un LED con un valor porcentual usando la función map() se cubre en Lección 14/31-4: Ejemplo 1 de map() en código Arduino.

Demostración del Proyecto en Vivo

En el video, el instructor carga este código y abre el Monitor Serie. Puedes ver que la salida comienza después del retraso inicial de 2 segundos, mostrando un valor cercano a 1999. Los números luego aumentan rápidamente, demostrando el conteo continuo de milisegundos. Esta vista en vivo confirma que la función está funcionando y proporciona una comprensión visual clara de cómo se rastrea el tiempo.

Proyectos relacionados de este video

Capítulos

  • [00:00] Introducción a millis()
  • [01:19] Qué es millis() y por qué usarlo
  • [03:06] Demostración práctica de millis()
  • [05:46] Usando millis() para activar un evento temporizado
  • [08:29] Ejemplo con un botón pulsador
  • [12:14] Ejemplo avanzado de temporización con botón pulsador
  • [17:20] Introducción a la función map()
  • [19:47] Ejemplo de código para map() con un LED
  • [22:41] Creando una función map personalizada

Imágenes

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
916-Lesson 14/31-1: Arduino coding millis() example 1
Idioma: 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

Archivos📁

Bibliotecas de Arduino (zip)