Skip to content

b-andreoni/led-driver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mlr_led_rgb - Driver de LED RGB para ESP32

Um driver de componente para o framework ESP-IDF projetado para controlar um LED RGB. Este driver utiliza o periférico LEDC (LED Control) do ESP32 para gerar sinais PWM (Pulse Width Modulation).

O design segue o padrão Singleton para garantir uma única instância de controle em todo o sistema e foi desenvolvido com foco na conformidade com o padrão de codificação MISRA C para maior robustez e segurança.

Principais Funcionalidades 💡

  • Controle PWM: Utiliza o periférico LEDC para um controle preciso da intensidade de cada canal de cor.
  • Controle de Estado: Permite ligar e desligar o LED independentemente da cor configurada.
  • Memória de Cor: É capaz de restaurar a última cor definida ao ser religado.
  • Cores Pré-definidas: Inclui macros para cores comuns (ex: BLUE, ORANGE, LIME) para facilitar o uso.
  • Design Singleton: Garante que apenas uma instância do driver seja utilizada em todo o sistema.
  • Fácil Integração: Projetado para ser adicionado como um componente em qualquer projeto ESP-IDF.

Como Usar

A configuração dos pinos GPIO é gerenciada internamente pelo componente. O usuário final só precisa obter a instância do driver e utilizar suas funções.

O exemplo abaixo demonstra como inicializar o driver e alternar entre diferentes cores e estados.

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "mlr_led_rgb.h"

void app_main(void)
{
    // 1. Obtenha a instância única do driver
    mlr_led_rgb_t *led = mlr_led_rgb_get_instance();

    // 2. Inicialize o driver
    led->init(led);

    // 3. Alterne entre cores pré-definidas
    while (1)
    {
        led->set_color(led, COBLI_BLUE);
        vTaskDelay(pdMS_TO_TICKS(1000));

        led->set_color(led, ORANGE);
        vTaskDelay(pdMS_TO_TICKS(1000));
        
        // Apaga o LED definindo a cor como preto
        led->set_color(led, (rgb_color_t){0, 0, 0});
        vTaskDelay(pdMS_TO_TICKS(1000));
        
        // Liga novamente com a cor LIME
        led->set_color(led, LIME);
        vTaskDelay(pdMS_TO_TICKS(2000));
        
        // Desliga o LED usando a função de estado
        led->set_state(led, false);
        vTaskDelay(pdMS_TO_TICKS(2000));
        
        // Liga o LED, que restaurará a última cor (LIME)
        led->set_state(led, true);
        vTaskDelay(pdMS_TO_TICKS(2000));
    }
}

Referência da API

O driver é acessado através de um ponteiro para a sua struct de instância (mlr_led_rgb_t), que contém ponteiros para as funções de operação.

Funções Principais

  • mlr_led_rgb_t* mlr_led_rgb_get_instance(void)

    • Descrição: Retorna o ponteiro para a única instância do driver (padrão Singleton).
  • void init(mlr_led_rgb_t *self)

    • Descrição: Inicializa os timers e canais do LEDC. Deve ser chamada uma única vez antes de qualquer outra operação.
  • void set_color(mlr_led_rgb_t *self, rgb_color_t color)

    • Descrição: Define a cor do LED RGB. Usar a cor {0, 0, 0} efetivamente desliga o LED.
  • void set_state(mlr_led_rgb_t *self, bool state)

    • Descrição: Liga (true) ou desliga (false) o LED. Ao ligar, a última cor configurada é restaurada.
  • void get_color(mlr_led_rgb_t *self, rgb_color_t *color)

    • Descrição: Obtém a última cor armazenada no driver.
  • void get_state(mlr_led_rgb_t *self, bool *state)

    • Descrição: Obtém o estado atual do LED (ligado ou desligado).

About

Driver for controlling an RGB LED using the ESP32's LEDC peripheral.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors