Estos son algunos métodos comunes:
1. Usando delay() (El método básico)
✅ Ventajas:
- Simple y fácil de entender.
- Bueno para principiantes.
❌ Desventajas:
- Bloquea la ejecución - mientras
delay()está funcionando, no puede pasar nada más. - No apto para multitarea.
📌 Código de ejemplo
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // Turn LED on
delay(500); // Wait 500 milliseconds
digitalWrite(13, LOW); // Turn LED off
delay(500); // Wait 500 milliseconds
}
🛠 Caso de uso:
- Bueno para proyectos simples donde no necesitas realizar múltiples tareas.
2. Usando millis() (Parpadeo sin bloqueo)
Este método permite que el Arduino realice otras tareas mientras el LED parpadea.
✅ Ventajas:
- Sin bloqueo – otro código puede ejecutarse en paralelo.
- Bueno para realizar múltiples tareas en proyectos más complejos.
❌ Desventajas:
- Más complejo que usar
delay().
📌 Código de ejemplo
unsigned long previousMillis = 0;
const long interval = 500; // Interval in milliseconds
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
if (millis() - previousMillis >= interval) {
previousMillis = millis(); // Update the last time the LED toggled
digitalWrite(13, !digitalRead(13)); // Toggle LED state
}
}
🛠 Caso de uso:
- Ideal para proyectos en los que se deben ejecutar varias tareas simultáneamente, como Lectura de sensores, control de motores o comunicación..
3. Usando micros() (Sincronización de alta precisión)
En lugar de millis(), esto usa microsegundos (1,000,000 por segundo) para un control más preciso.
✅ Ventajas:
- Más preciso que
millis()(precisión a nivel de microsegundos).
❌ Desventajas:
- Todavía depende de las encuestas (Similar a
millis()).
📌 Código de ejemplo
unsigned long previousMicros = 0;
const long interval = 500000; // 500,000 µs = 500 ms
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
if (micros() - previousMicros >= interval) {
previousMicros = micros();
digitalWrite(13, !digitalRead(13));
}
}
🛠 Caso de uso:
- Adaptado para Aplicaciones de sincronización precisa, como Control PWM, sensores de alta velocidad o procesamiento de señales.
4. Uso de una interrupción del temporizador (precisa y eficiente)
con herrajes temporizadores, el Arduino parpadea automáticamente el LED sin uso loop().
✅ Ventajas:
- Muy preciso (sincronización controlada por hardware).
- No bloquea la ejecución.
❌ Desventajas:
- Requiere conocimientos de Temporizadores Arduino.
- Diferentes modelos de Arduino deben acudir Diferentes configuraciones de temporizador.
📌 Código de ejemplo (utilizando la biblioteca TimerOne)
#include <TimerOne.h>
void blink() {
digitalWrite(13, !digitalRead(13)); // Toggle LED
}
void setup() {
pinMode(13, OUTPUT);
Timer1.initialize(500000); // Set timer to 500ms (500,000 µs)
Timer1.attachInterrupt(blink); // Call the blink function
}
void loop() {
// The LED blinks automatically using the timer
}
🛠 Caso de uso:
- Aplicaciones de cronometraje preciso, como Generadores de frecuencia, procesamiento de audio y robótica avanzada..
5. Uso de PWM (parpadeo rápido y atenuación)
En lugar de encender el LED completamente encendido o apagado, nosotros podemos usar Modulación de ancho de pulso (PWM) para controlar el brillo.
✅ Ventajas:
- Puede crear efectos de desvanecimiento suave.
- Funciona bien para Atenuación LED.
❌ Desventajas:
- solo funciona en PWM pins (marcado con
~en Arduino). - No es bueno para aplicaciones de sincronización precisa.
📌 Código de ejemplo
void setup() {
pinMode(9, OUTPUT); // Use a PWM-capable pin (e.g., 9)
}
void loop() {
for (int i = 0; i <= 255; i++) { // Gradually increase brightness
analogWrite(9, i);
delay(10);
}
for (int i = 255; i >= 0; i--) { // Gradually decrease brightness
analogWrite(9, i);
delay(10);
}
}
🛠 Caso de uso:
- Usado para Control de brillo LED, control de velocidad del motor y procesamiento de señal de audio.
6. Uso de un circuito externo (temporizador 555)
En lugar de utilizar un Arduino 555 temporizador IC ¿Puede parpadear un LED? independientemente.
✅ Ventajas:
- No se necesita Arduino.
- Guarda Recursos de Arduino.
❌ Desventajas:
- Menos flexible (velocidad de parpadeo fija a menos que se utilice una resistencia variable).
📌 Circuito temporizador básico 555
- Componentes necesarios:Temporizador 555, Resistencias, Condensador, LED.
- Operación: Los El temporizador 555 oscila, encendiendo y apagando el LED.
🛠 Caso de uso:
- Al Arduino no está disponible, o por circuitos LED independientes.
7. Uso de FreeRTOS (multitarea)
Con FreeRTOSSe pueden ejecutar múltiples tareas (como parpadear y leer el sensor) en paralelo.
✅ Ventajas:
- Multitarea real.
- Eficiente para sistemas complejos.
❌ Desventajas:
- Más avanzado (requiere conocimientos de FreeRTOS).
- No todas las placas Arduino lo admiten sistemas operativos en tiempo real.
📌 Código de ejemplo (utilizando FreeRTOS)
#include <Arduino_FreeRTOS.h>
void blinkTask(void *pvParameters) {
pinMode(13, OUTPUT);
while (1) {
digitalWrite(13, HIGH);
vTaskDelay(500 / portTICK_PERIOD_MS);
digitalWrite(13, LOW);
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
void setup() {
xTaskCreate(blinkTask, "Blink", 128, NULL, 1, NULL);
}
void loop() {
// RTOS handles tasks
}
🛠 Caso de uso:
- Proyectos avanzados con múltiples tareas, como Robótica, drones y automatización.
8. Uso de una máquina de estados (para patrones complejos)
En lugar de un simple parpadeo, un máquina estatal Puede crear patrones de parpadeo de LED personalizados.
✅ Ventajas:
- Permite a los secuencias de parpadeo personalizadas.
- Grandioso para animaciones LED.
❌ Desventajas:
- Más complejo que un simple bucle.
📌 Código de ejemplo
enum LEDState { ON, OFF };
LEDState state = OFF;
unsigned long lastTime = 0;
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
unsigned long currentTime = millis();
switch (state) {
case OFF:
if (currentTime - lastTime >= 500) {
lastTime = currentTime;
digitalWrite(13, HIGH);
state = ON;
}
break;
case ON:
if (currentTime - lastTime >= 200) {
lastTime = currentTime;
digitalWrite(13, LOW);
state = OFF;
}
break;
}
}
🛠 Caso de uso:
- Efectos LED personalizados (por ejemplo, código Morse, secuencias especiales de destellos).
Conclusión
- Para parpadeo simple →
delay() - Para realizar múltiples tareas →
millis() - para precisión →
micros()or Interrupciones del temporizador - Para efectos PWM →
analogWrite() - para automatización → FreeRTOS o máquina de estados