58 lines
1.7 KiB
C
58 lines
1.7 KiB
C
#include <stdio.h>
|
|
#include "esp_err.h"
|
|
#include "esp_log.h"
|
|
#include "nvs_flash.h"
|
|
#include "driver/ledc.h"
|
|
#include "ledController.h"
|
|
|
|
esp_err_t init_led_driver(led_disp_config_t configs[], uint8_t config_nb){
|
|
ledc_timer_config_t ledc_timer = {
|
|
.speed_mode = LEDC_LOW_SPEED_MODE,
|
|
.timer_num = LEDC_TIMER_0,
|
|
.duty_resolution = LEDC_TIMER_10_BIT,
|
|
.freq_hz = 5000,
|
|
.clk_cfg = LEDC_AUTO_CLK
|
|
};
|
|
|
|
ESP_ERROR_CHECK(ledc_timer_config(&ledc_timer));
|
|
|
|
for(int i=0; i < config_nb; i++){
|
|
ESP_LOGI("led setup", "conf n %i, gpio %i, duty %i", i, configs[i].output, configs[i].intensity);
|
|
ledc_channel_config_t ledc_channel = {
|
|
.speed_mode = LEDC_LOW_SPEED_MODE,
|
|
.channel = i,
|
|
.timer_sel = LEDC_TIMER_0,
|
|
.intr_type = LEDC_INTR_DISABLE,
|
|
.gpio_num = configs[i].output,
|
|
.duty = configs[i].intensity,
|
|
.hpoint = 0
|
|
};
|
|
ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel));
|
|
}
|
|
|
|
return ESP_OK;
|
|
}
|
|
|
|
esp_err_t update_led_status(led_disp_config_t configs[], uint8_t config_nb, uint16_t co2){
|
|
for(int i=0; i < config_nb; i++){
|
|
uint16_t duty = (co2>configs[i].min && co2<configs[i].max)?configs[i].intensity:0;
|
|
ESP_ERROR_CHECK(ledc_set_duty(LEDC_LOW_SPEED_MODE, i, duty));
|
|
ESP_ERROR_CHECK(ledc_update_duty(LEDC_LOW_SPEED_MODE, i));
|
|
}
|
|
return ESP_OK;
|
|
}
|
|
|
|
led_disp_config_t* get_led_configuration(nvs_handle_t nvs){
|
|
uint8_t nb = 0;
|
|
ESP_ERROR_CHECK(nvs_get_u8(nvs, "led_nb", &nb));
|
|
led_disp_config_t* led_configs = malloc(nb * sizeof(led_disp_config_t));
|
|
size_t conf_size = sizeof(led_disp_config_t);
|
|
for(int i = 0; i < nb; i++){
|
|
char key[16];
|
|
sprintf(key, "led%i_conf", i+1);
|
|
ESP_ERROR_CHECK(nvs_get_blob(nvs, key, &led_configs[i], &conf_size));
|
|
}
|
|
return led_configs;
|
|
|
|
}
|