[应用方案]

基于TBK-RD8T3x触控例程的简单RGB调光灯

[复制链接]
4178|39
手机看帖
扫描二维码
随时随地手机跟帖
yuyy1989|  楼主 | 2023-9-22 10:06 | 显示全部楼层 |阅读模式
利用新定义触摸芯片的功能,很适合做一个触控的设备,接下来用TBK-RD8T3x开发板实现一个简单地RGB调光灯,使用滑条调节亮度,6个按键切换灯光颜色
利用PWM通过调节占空比调节RGB三路灯光的亮度,选定P50 P51 P523个IO分别作为RGB的PWM输出引脚,对应PWM00 PWM01 PWM02
QQ截图20230920105737.png
由于没有RD LINK无法调试触摸功能,这里直接在测试例程的基础上添加调光的代码
打开TBK-RD8T3x Demo Code这个工程(需要提前安装好Keil C51和RD_KEIL插件,不然打开后会提示找不到芯片,之后也无法编译),添加TBK-RD8T3x Demo Code\FWLib\RD8_Lib\src中的rd8_pwm.c到工程中,接下来要用到这个文件中的方法配置和控制PWM
QQ截图20230920101727.png
使用到的3个PWM属于PWM0通路,在SC_Init.c的SC_Init方法中添加SC_PWM0_Init();
QQ截图20230920103627.png
在SC_PWM0_Init方法中添加PWM初始化代码,使用新定义提供的库函数可以方便直观地进行配置
void SC_PWM0_Init(void)
{
        //Forbid editing areas before the following label !!!
        /*PWM0_Init write here*/
    PWM_Init(PWM0_PRESSEL_FHRC_D1,10000); //初始化PWM周期10000
    PWM_Aligned_Mode_Select(PWM0_Edge_Aligned_Mode); //PWM边沿对齐
    PWM_OutputStateConfig(PWM00,PWM_OUTPUTSTATE_ENABLE);
    PWM_OutputStateConfig(PWM01,PWM_OUTPUTSTATE_ENABLE);
    PWM_OutputStateConfig(PWM02,PWM_OUTPUTSTATE_ENABLE);
    PWM_PolarityConfig(PWM00,PWM_POLARITY_NON_INVERT);
    PWM_PolarityConfig(PWM01,PWM_POLARITY_NON_INVERT);
    PWM_PolarityConfig(PWM02,PWM_POLARITY_NON_INVERT);
    PWM_IndependentModeConfig(PWM00,10000);
    PWM_IndependentModeConfig(PWM01,10000);
    PWM_IndependentModeConfig(PWM02,10000);
    PWM_CmdEX(PWM0_Type,ENABLE); //开启PWM
}
解释一下几个方法的含义:
PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period):初始化PWM,输入函数为预分频选择和周期,预分频可选参数如图
QQ截图20230921201136.png
PWM_Aligned_Mode_Select(PWM_Aligned_Mode_TypeDef PWM_Aligned_Mode):PWM对齐模式设置,可选边沿对齐PWM0_Edge_Aligned_Mode或中心对齐PWM0_Center_Alignment_Mode
PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState):PWMxx引脚输出使能配置,可配置成PWM_OUTPUTSTATE_DISABLE或PWM_OUTPUTSTATE_ENABLE,PWMxx的引脚选择如图
QQ截图20230921201923.png
PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity):PWMxx正反向输出配置,可配置成PWM_POLARITY_NON_INVERT或PWM_POLARITY_INVERT
PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle):PWMxx独立工作模式占空比配置
接下来在触控处理方法中加入PWM调节方法,顺便修改一下开发板上LED的亮起逻辑,上面的滑条LED改为在手指离开滑条后LED仍保持亮起作为亮度提示,下面的六个LED改为每次点击后只有点击的LED亮起作为模式选择提示
打开SysFunVarDefine.c,里面LED_ALLOFF和Level0-7是处理滑条LED的,UpdateDisplay中有下面6个LED的处理
使用4个变量分别存放RGB分量和亮度,新建个方法用来设置RGB和亮度
//RGB分量和亮度
uint16_t light_r = 10000;
uint16_t light_g = 10000;
uint16_t light_b = 10000;
uint8_t light_l = 100;
void set_lightrgbl(uint16_t r,uint16_t g,uint16_t b,uint8_t l)
{
    float fl = l/100.0;
    light_r = r;
    light_g = g;
    light_b = b;
    light_l = l;
    PWM_IndependentModeConfig(PWM00,light_r*fl);
    PWM_IndependentModeConfig(PWM01,light_g*fl);
    PWM_IndependentModeConfig(PWM02,light_b*fl);
}
在触控处理方法中调用set_lightrgbl方法修改颜色和亮度就行了
最终运行效果


使用特权

评论回复
评论
forgot 2023-9-28 08:35 回复TA
赞一个 
安静随风| | 2023-9-22 14:53 | 显示全部楼层
可以把工程上传吗,学习也做一个

使用特权

评论回复
tpgf| | 2023-10-11 13:21 | 显示全部楼层
这种调光方式只能是不指定光的颜色自动进行调节了

使用特权

评论回复
qcliu| | 2023-10-11 15:29 | 显示全部楼层
亮度的调节是通过调节pwm的占空比实现的吗

使用特权

评论回复
drer| | 2023-10-11 16:29 | 显示全部楼层
可以通过触控特定区域来指定光度吗

使用特权

评论回复
coshi| | 2023-10-11 16:43 | 显示全部楼层
drer 发表于 2023-10-11 16:29
可以通过触控特定区域来指定光度吗

好像不容易实现 应该就是渐变的了

使用特权

评论回复
kxsi| | 2023-10-11 17:03 | 显示全部楼层
程序里边使用六个按键进行调节的话  那么亮度就很细腻了

使用特权

评论回复
wiba| | 2023-10-11 17:41 | 显示全部楼层
6个按键可以级联调节使用吗

使用特权

评论回复
updownq| | 2023-11-11 13:17 | 显示全部楼层
每个LED的颜色都可以通过RGB值来控制

使用特权

评论回复
elsaflower| | 2023-11-11 16:38 | 显示全部楼层
需要调用触控事件处理函数,以便在触控事件发生时,能够正确地控制RGB LED的颜色。

使用特权

评论回复
i1mcu| | 2023-11-11 17:05 | 显示全部楼层
需要初始化触摸芯片,设置触摸传感器和灯的控制通道。

使用特权

评论回复
tabmone| | 2023-11-12 09:53 | 显示全部楼层
可以通过检测滑动、按压等动作实现滑动调节亮度或颜色效果。

使用特权

评论回复
plsbackup| | 2023-11-12 10:04 | 显示全部楼层
以通过滑条触摸模块来控制灯光的亮度。

使用特权

评论回复
hearstnorman323| | 2023-11-12 10:25 | 显示全部楼层
如何调整RGB LED灯的亮度              

使用特权

评论回复
juliestephen| | 2023-11-12 10:47 | 显示全部楼层
在TBK-RD8T3x触控屏上实现触控检测功能,通过触控检测算法,检测到用户在屏幕上的触控操作

使用特权

评论回复
abotomson| | 2023-11-12 11:13 | 显示全部楼层
在硬件上,需要使用一个能够支持RGB LED的控制器和RGB LED灯珠。

使用特权

评论回复
belindagraham| | 2023-11-12 11:34 | 显示全部楼层
增强型的高速1T 8051内核,工业级集成触控按键功能的Flash微控制器RD8T37

使用特权

评论回复
uptown| | 2023-11-13 09:55 | 显示全部楼层
每个LED的颜色都可以通过RGB值来控制

使用特权

评论回复
geraldbetty| | 2023-11-13 10:37 | 显示全部楼层
以通过滑条触摸模块来控制灯光的亮度。

使用特权

评论回复
saservice| | 2023-11-13 11:06 | 显示全部楼层
可以通过检测滑动、按压等动作实现滑动调节亮度或颜色效果。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

143

主题

688

帖子

6

粉丝