В LED добавлен режим помежуточной яркости диода
This commit is contained in:
@@ -63,8 +63,9 @@ typedef enum
|
||||
{
|
||||
LED_IS_OFF = 0, ///< Светодиод выключен
|
||||
LED_IS_ON = 1, ///< Светодиод включен
|
||||
LED_IS_BLINKING = 2, ///< Моргание светодиодом
|
||||
LED_IS_FADING = 3, ///< Плавное моргание светодиодом
|
||||
LED_IS_DUTY = 2, ///< Светодиод включен на частичную яркость
|
||||
LED_IS_BLINKING = 3, ///< Моргание светодиодом
|
||||
LED_IS_FADING = 4, ///< Плавное моргание светодиодом
|
||||
}GPIO_LEDStateTypeDef;
|
||||
|
||||
/**
|
||||
@@ -80,6 +81,7 @@ typedef struct
|
||||
|
||||
uint8_t LED_ActiveLvl; ///< Активный уровень ножки (при котором светодиод горит)
|
||||
uint32_t LED_Period; ///< Период моргания светодиода
|
||||
uint32_t LED_Duty; ///< Текущая яркость светодиода
|
||||
|
||||
uint32_t tickprev;
|
||||
}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_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);
|
||||
/* Активировать моргание светодиодом */
|
||||
|
||||
@@ -136,6 +136,23 @@ HAL_StatusTypeDef GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state)
|
||||
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 Активировать моргание светодиодом
|
||||
* @param led Указатель на структуру светодиода
|
||||
@@ -199,6 +216,21 @@ void GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led)
|
||||
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)
|
||||
{
|
||||
@@ -229,6 +261,7 @@ void GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led)
|
||||
}
|
||||
led->tickprev = tickcurrent;
|
||||
}
|
||||
led->LED_Duty = duty;
|
||||
/* Формирование ШИМ для изменения яркости */
|
||||
int duty_crt = (duty*duty/LED_PWM_TICKS);
|
||||
if(tickcurrent%LED_PWM_TICKS < duty_crt)
|
||||
|
||||
Reference in New Issue
Block a user