这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » [基于STM32F4的RGB渐变流光灯] 三、了解渐变原理、实现渐变流光灯

共3条 1/1 1 跳转至

[基于STM32F4的RGB渐变流光灯] 三、了解渐变原理、实现渐变流光灯

菜鸟
2018-11-27 23:52:49     打赏

    渐变的原理和电影播放帧原理类似,变化的频率大于人眼刷新频率就可以实现不间断的渐变。人眼的刷新频率一般不超过30Hz,即变化间隔不大于33.3ms。要让灯光实现渐变效果,也只要实现频率大于人眼刷新频率的颜色变化即可。

    软件上对实时性要求不高,可以使用软件定时器来实现,相对于使用线程更节省资源,也更容易移植到不跑操作系统的芯片上。

    这里我使用Freertos的软件定时器来定时,定时周期30ms。代码基于上一次的工程,增加定时器的代码和渐变的代码。从红色开始,每30ms进入一次定时器回调,对H值进行自增,增加的量值会影响渐变的周期,也就是渐变的速度。

代码如下:

//全局hsb变量
hsb_t hsb = {0, 100, 100};

//软件定时器回调
void timer_callback(xTimerHandle timer_t)
{
    rgb_t rgb;
    hsb.h += 0.5;        //每次增加一定的值,增加此值会缩短渐变周期
    if (hsb.h >= 360)
    {
        hsb.h -= 360;
    }
    hsb_to_rgb(&hsb, &rgb);
    set_rgb_color(&rgb);
}

void light_init(void)
{
    //启用PWM通道
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);

    //创建Freertos软件定时器
    xTimerHandle timer = xTimerCreate(NULL, 30 / portTICK_RATE_MS, pdTRUE, NULL, timer_callback);
    xTimerStart(timer, 0);
}

演示视频链接



院士
2018-11-29 09:20:11     打赏
2楼

看了楼主的视频,还是非常棒的


高工
2018-11-29 13:01:53     打赏
3楼

视频链接有点隐蔽~差点没发现,哈哈~不错不错,希望继续跟帖哦~


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]