公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

【TLD5098EL】+ A3.用苹果红外遥控器调节RGB灯条亮度和颜色

【TLD5098EL】+ A3.用苹果红外遥控器调节RGB灯条亮度和颜色

limale
Level 1
Level 1
50 comments on blog 25 comments on blog 10 comments on blog

上一节我们通过光敏电阻来进行模拟调光效果还不错,帖子的最后想着可以通过单片机来进行更精确的控制。所以这篇帖子就用上了单片机进行控制。

上次活动控制电机的板子TLE9869又可以派上用场了,基本的思路是这样的:调光部分我们可以通过CCU6模块输出一定频率的方波然后通过调整占空比把输出电压控制在0-1.6V之间,这样就可以实现LED的电流在0-300mA之间变化实现对亮度的控制。另一部分我使用VS1838一体化红外接收头接收苹果红外遥控器的按键指令,用左右键循环切换灯条的颜色,上下键调整亮度。

然后我们看看都需要哪些东西吧,下图1是苹果的红外遥控器和VS1838一体化红外接收头,下图2是RGB灯条,下图3是社区上次活动申请的电机控制的板子TLE9869,下图4是就是这次申请的板子TLD5098EL了。照片是连线之后拍的有点乱乱的大家多多包涵。

LHOSIGE6S4AWLZ{6{BB%[2K.jpg

KS0{[2Q~55}DI}WH$J62RQB.jpg

MGU(6D)%J(1[CQZCF1]EWVF.jpg

S[RA9PUU4}N{{6S7NKGBL[8.jpg

介绍一下TLE9869都使用到了哪些外设及管脚:串口2连接到虚拟串口的打印调试信息用到了P1.1和P1.2,外红接收头使用外部中断用到了P1.3,定时器Timer2,CCU6模块输出到P0.4管脚调整VSET,RGB灯条控制颜色用到了P0.1 P0.3 P1.0这三个端口。程序写的有点乱有空再整理吧。

int main(void)
{
//    int i;
  /*****************************************************************************
    ** initialization of the hardware modules based on the configuration done   **
    ** by using the IFXConfigWizard                                             **
    *****************************************************************************/
  SCU_Init();
  Port_Init();
    UART2_Init();
    Timer2_Init();
    INT_Init();
    CCU6_Init();
  /*****************************************************************************
    ** place your application code here                                         **
    *****************************************************************************/
    Port_ChangePin(LED1, PORT_ACTION_OUTPUT);
    Port_ChangePin(LED3, PORT_ACTION_OUTPUT);
    Port_ChangePin(LED5, PORT_ACTION_OUTPUT);
    Port_ChangePin(LED7, PORT_ACTION_OUTPUT);
    Timer2_Start();
    CCU6_StartTmr_T12();
    Port_ChangePin(LED7, PORT_ACTION_SET);
    /*****************************************************************************
    ** main endless loop                                                        **
    *****************************************************************************/
  while (1)
  {
    /***************************************************************************
        ** main watchdog1 (WDT1) service                                          **
        ***************************************************************************/
    WDT1_Service();
    /***************************************************************************
        ** place your application code here                                       **
        ***************************************************************************/
        switch(RGB){
            case 0:
                RGB_R_OFF;
                RGB_G_OFF;
                RGB_B_OFF;
            break;
            case 1:
                RGB_R_OFF;
                RGB_G_OFF;
                RGB_B_ON;
            break;
            case 2:
                RGB_R_OFF;
                RGB_G_ON;
                RGB_B_OFF;
            break;
            case 3:
                RGB_R_OFF;
                RGB_G_ON;
                RGB_B_ON;
            break;
            case 4:
                RGB_R_ON;
                RGB_G_OFF;
                RGB_B_OFF;
            break;
            case 5:
                RGB_R_ON;
                RGB_G_OFF;
                RGB_B_ON;
            break;
            case 6:
                RGB_R_ON;
                RGB_G_ON;
                RGB_B_OFF;
            break;
            case 7:
                RGB_R_ON;
                RGB_G_ON;
                RGB_B_ON;
            break;            
        }
        if(receiveComplete){
            receiveComplete = FALSE;
            Ir_Server();
            switch(remote_code[2]){
                case up:
                    light--;    
                    if(255 == light)
                        light = 21;
                    printf("down  key is Press ,key_code = %#x light is %d
",remote_code[2],light);
                    break;
                case down:
                    light++;
                    if(21 == light)
                        light = 0;
                    printf("down  key is Press ,key_code = %#x light is %d
",remote_code[2],light);
                    break;
                case left:
                    RGB++;
                    if(8 == RGB)
                        RGB = 0;            
                    printf("left  key is Press ,key_code = %#x
",remote_code[2]);                    
                    break;
                case right:
                    RGB--;
                    if(255 == RGB)
                        RGB = 7;            
                    printf("right  key is Press ,key_code = %#x
",remote_code[2]);
                    break;
            }
        }
        //
        CCU6_LoadShadowRegister_CC60(520+light*20);
        CCU6_EnableST_T12();
        CCU6_StartTmr_T12();
  }
}

下边两张GIF图片第一张是亮度调整,第二张是颜色切换。社区不能上传视频,贴上优酷的链接看高清版的吧。

调整亮度 颜色切换

7.gif8.gif

0 点赞
1628 次查看
3 评论