.. note:: ¡Hola, bienvenido a la Comunidad de Entusiastas de Raspberry Pi, Arduino y ESP32 en Facebook! Profundiza en Raspberry Pi, Arduino y ESP32 junto a otros entusiastas. **¿Por qué unirse?** - **Soporte experto**: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo. - **Aprender y compartir**: Intercambia consejos y tutoriales para mejorar tus habilidades. - **Vistas previas exclusivas**: Obtén acceso anticipado a nuevos anuncios de productos y avances. - **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más nuevos. - **Promociones festivas y sorteos**: Participa en sorteos y promociones especiales de temporada. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo. .. _ar_interval: 1.11 Intervalo ================ Resumen ----------- A veces necesitas hacer dos cosas al mismo tiempo. Por ejemplo, puedes querer hacer parpadear un LED mientras lees la pulsación de un botón. En este caso, no puedes usar delay(), porque Arduino pausa tu programa durante el delay(). Si el botón se presiona mientras Arduino está pausado esperando que termine el delay(), tu programa no detectará la pulsación. Este ejemplo demuestra cómo hacer parpadear un LED sin usar delay(). Enciende el LED y luego registra el tiempo. Después, cada vez que pasa por el loop(), verifica si ha pasado el tiempo deseado para el parpadeo. Si es así, cambia el estado del LED y registra el nuevo tiempo. De esta forma, el LED parpadea continuamente mientras la ejecución del programa no se detiene en ninguna instrucción. Una analogía sería calentar una pizza en el microondas mientras esperas un correo electrónico importante. Colocas la pizza en el microondas y lo programas para 10 minutos. La analogía de usar delay() sería quedarte sentado frente al microondas mirando el temporizador contando desde los 10 minutos hasta que llegue a cero. Si el correo importante llega durante ese tiempo, lo perderías. Lo que harías en la vida real sería poner la pizza en el microondas, luego revisar tu correo, y tal vez hacer algo más (que no tome mucho tiempo). De vez en cuando, volverías al microondas para ver si el temporizador ha llegado a cero, indicando que tu pizza está lista. Componentes necesarios -------------------------- .. image:: img/list_1.11.png * :ref:`cpn_mega2560` * :ref:`cpn_breadboard` * :ref:`cpn_wires` * :ref:`cpn_led` * :ref:`cpn_resistor` Circuito Fritzing ------------------- En este ejemplo, usamos el pin digital 9 para controlar el LED y conectamos un lado de la resistencia a los pines digitales correspondientes. El pin más largo del LED (el ánodo) se conecta al otro lado de la resistencia. El pin más corto (el cátodo) del LED se conecta a GND. .. image:: img/image30.png Diagrama esquemático ----------------------- .. image:: img/image466.png Código -------- .. note:: * Puedes abrir el archivo ``1.11_interval.ino`` en la ruta ``sunfounder_vincent_kit_for_arduino\code\1.11_interval`` directamente. * O copiar este código en el IDE de Arduino 1/2. .. raw:: html Después de cargar el código en la placa Mega2560, verás cómo el LED parpadea. Análisis del código ---------------------- Declara el pin digital 9 como ledPin. .. code-block:: arduino const int ledPin = 9; Establece el estado de ledState en LOW para apagar el LED. .. code-block:: arduino int ledState = LOW; Inicializa una variable llamada previousMillis para almacenar el tiempo de operación previo del microcontrolador. .. code-block:: arduino unsigned long previousMillis = 0; Establece el tiempo de intervalo a 1000 ms (milisegundos). .. code-block:: arduino const long interval = 1000; Configura ledPin en modo de salida. .. code-block:: arduino pinMode(ledPin, OUTPUT); En loop(), declara currentMillis para almacenar el tiempo actual. .. code-block:: arduino unsigned long currentMillis = millis(); Cuando el intervalo entre el tiempo de operación actual y el último tiempo de actualización sea mayor a 1000 ms, se activan ciertas funciones. Al mismo tiempo, actualiza previousMillis al tiempo actual para el próximo evento, que sucederá 1 segundo después. .. code-block:: arduino if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; // guarda el último tiempo en que parpadeó el LED //... } Aquí, las funciones ejecutadas en intervalos cambian el estado del LED. .. code-block:: arduino if (ledState == LOW) {ledState = HIGH;} else {ledState = LOW;} digitalWrite(ledPin, ledState); Imagen del fenómeno ------------------------ .. image:: img/image36.jpeg