В LED добавлен режим помежуточной яркости диода
This commit is contained in:
@@ -63,8 +63,9 @@ typedef enum
|
|||||||
{
|
{
|
||||||
LED_IS_OFF = 0, ///< Светодиод выключен
|
LED_IS_OFF = 0, ///< Светодиод выключен
|
||||||
LED_IS_ON = 1, ///< Светодиод включен
|
LED_IS_ON = 1, ///< Светодиод включен
|
||||||
LED_IS_BLINKING = 2, ///< Моргание светодиодом
|
LED_IS_DUTY = 2, ///< Светодиод включен на частичную яркость
|
||||||
LED_IS_FADING = 3, ///< Плавное моргание светодиодом
|
LED_IS_BLINKING = 3, ///< Моргание светодиодом
|
||||||
|
LED_IS_FADING = 4, ///< Плавное моргание светодиодом
|
||||||
}GPIO_LEDStateTypeDef;
|
}GPIO_LEDStateTypeDef;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -80,6 +81,7 @@ typedef struct
|
|||||||
|
|
||||||
uint8_t LED_ActiveLvl; ///< Активный уровень ножки (при котором светодиод горит)
|
uint8_t LED_ActiveLvl; ///< Активный уровень ножки (при котором светодиод горит)
|
||||||
uint32_t LED_Period; ///< Период моргания светодиода
|
uint32_t LED_Period; ///< Период моргания светодиода
|
||||||
|
uint32_t LED_Duty; ///< Текущая яркость светодиода
|
||||||
|
|
||||||
uint32_t tickprev;
|
uint32_t tickprev;
|
||||||
}GPIO_LEDTypeDef;
|
}GPIO_LEDTypeDef;
|
||||||
@@ -192,6 +194,8 @@ HAL_StatusTypeDef GPIO_LED_On (GPIO_LEDTypeDef *led);
|
|||||||
HAL_StatusTypeDef GPIO_LED_Off (GPIO_LEDTypeDef *led);
|
HAL_StatusTypeDef GPIO_LED_Off (GPIO_LEDTypeDef *led);
|
||||||
/* Выставить светодиод по переменной */
|
/* Выставить светодиод по переменной */
|
||||||
HAL_StatusTypeDef GPIO_LED_Set (GPIO_LEDTypeDef *led, uint8_t led_state);
|
HAL_StatusTypeDef GPIO_LED_Set (GPIO_LEDTypeDef *led, uint8_t led_state);
|
||||||
|
/* Выставить яркость светодиод */
|
||||||
|
HAL_StatusTypeDef GPIO_LED_Duty_Set(GPIO_LEDTypeDef *led, uint8_t led_duty);
|
||||||
/* Активировать моргание светодиодом */
|
/* Активировать моргание светодиодом */
|
||||||
HAL_StatusTypeDef GPIO_LED_Blink_Start (GPIO_LEDTypeDef *led, uint32_t period);
|
HAL_StatusTypeDef GPIO_LED_Blink_Start (GPIO_LEDTypeDef *led, uint32_t period);
|
||||||
/* Активировать моргание светодиодом */
|
/* Активировать моргание светодиодом */
|
||||||
|
|||||||
@@ -136,6 +136,23 @@ HAL_StatusTypeDef GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state)
|
|||||||
return GPIO_LED_Off(led);
|
return GPIO_LED_Off(led);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @brief Выставить яркость светодиод
|
||||||
|
* @param led Указатель на структуру светодиода
|
||||||
|
* @param led_duty Яркость светодиода
|
||||||
|
* @return HAL Status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef GPIO_LED_Duty_Set(GPIO_LEDTypeDef *led, uint8_t led_duty)
|
||||||
|
{
|
||||||
|
if(check_null_ptr_3(led, led->LED_Port, led->LED_Pin))
|
||||||
|
return HAL_ERROR;
|
||||||
|
|
||||||
|
led_duty = (led_duty*LED_PWM_TICKS)/100;
|
||||||
|
led->state = LED_IS_DUTY;
|
||||||
|
led->LED_Duty = led_duty;
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @brief Активировать моргание светодиодом
|
* @brief Активировать моргание светодиодом
|
||||||
* @param led Указатель на структуру светодиода
|
* @param led Указатель на структуру светодиода
|
||||||
@@ -199,6 +216,21 @@ void GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led)
|
|||||||
led->tickprev = tickcurrent;
|
led->tickprev = tickcurrent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* Режим промежуточной яркости светодиода */
|
||||||
|
else if(led->state == LED_IS_DUTY)
|
||||||
|
{
|
||||||
|
uint32_t tickcurrent = local_time();
|
||||||
|
/* Формирование ШИМ для яркости */
|
||||||
|
int duty_crt = (led->LED_Duty*led->LED_Duty/LED_PWM_TICKS);
|
||||||
|
if(tickcurrent%LED_PWM_TICKS < duty_crt)
|
||||||
|
{
|
||||||
|
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, led->LED_ActiveLvl);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, !led->LED_ActiveLvl);
|
||||||
|
}
|
||||||
|
}
|
||||||
/* Режим плавного моргания светодиода */
|
/* Режим плавного моргания светодиода */
|
||||||
else if(led->state == LED_IS_FADING)
|
else if(led->state == LED_IS_FADING)
|
||||||
{
|
{
|
||||||
@@ -229,6 +261,7 @@ void GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led)
|
|||||||
}
|
}
|
||||||
led->tickprev = tickcurrent;
|
led->tickprev = tickcurrent;
|
||||||
}
|
}
|
||||||
|
led->LED_Duty = duty;
|
||||||
/* Формирование ШИМ для изменения яркости */
|
/* Формирование ШИМ для изменения яркости */
|
||||||
int duty_crt = (duty*duty/LED_PWM_TICKS);
|
int duty_crt = (duty*duty/LED_PWM_TICKS);
|
||||||
if(tickcurrent%LED_PWM_TICKS < duty_crt)
|
if(tickcurrent%LED_PWM_TICKS < duty_crt)
|
||||||
|
|||||||
Reference in New Issue
Block a user