Hay varias formas de hacer que un LED parpadee en un Arduino.

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 simpledelay()
  • Para realizar múltiples tareasmillis()
  • para precisiónmicros() or Interrupciones del temporizador
  • Para efectos PWManalogWrite()
  • para automatizaciónFreeRTOS o máquina de estados
📡Transmite la señal: amplifica la conexión.

Deje un comentario