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

No packages published