微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > +EDP协议的麒麟座控制WS2812幻彩灯条,实现任意颜色

+EDP协议的麒麟座控制WS2812幻彩灯条,实现任意颜色

时间:10-02 整理:3721RD 点击:

本测试使用onenet云平台,实现网页或手机端对幻彩灯条的颜色控制。1,WS2812简介



2,程序更改
a,增加控制幻彩灯条颜色的数据流,如下

  1. //数据流
  2. DATA_STREAM dataStream[] = {
  3.                       {"colourlight_r", &rgbStatus.lightrSta, TYPE_UCHAR, 1},
  4.                                                                  {"colourlight_g", &rgbStatus.lightgSta, TYPE_UCHAR, 1},
  5.                                                                   {"colourlight_b", &rgbStatus.lightbSta, TYPE_UCHAR, 1},
  6.                                                                 {"Red_Led", &ledStatus.Led4Sta, TYPE_BOOL, 1},
  7.                                                                 {"Green_Led", &ledStatus.Led5Sta, TYPE_BOOL, 1},
  8.                                                                 {"Yellow_Led", &ledStatus.Led6Sta, TYPE_BOOL, 1},
  9.                                                                 {"Blue_Led", &ledStatus.Led7Sta, TYPE_BOOL, 1},
  10.                                                                 {"beep", &beepInfo.Beep_Status, TYPE_BOOL, 1},
  11.                                                                 {"temperature", &sht20Info.tempreture, TYPE_FLOAT, 1},
  12.                                                                 {"humidity", &sht20Info.humidity, TYPE_FLOAT, 1},
  13.                                                                 {"Xg", &adxlInfo.incidence_Xf, TYPE_FLOAT, 1},
  14.                                                                 {"Yg", &adxlInfo.incidence_Yf, TYPE_FLOAT, 1},
  15.                                                                 {"Zg", &adxlInfo.incidence_Zf, TYPE_FLOAT, 1},
  16.                                                                 {"errType", &faultTypeReport, TYPE_UCHAR, 1},
  17.                                                         };

复制代码


b,WS2812驱动文件  rgbled.c

  1. //μ¥???úí·???t
  2. #include "stm32f10x.h"

  3. //LEDí·???t
  4. #include "rgb_led.h"

  5. RGB_STATUS rgbStatus;



  6. /*
  7. ************************************************************
  8. *        oˉêy??3?£o        Led_Init
  9. *
  10. *        oˉêy1|?ü£o        LED3?ê??ˉ
  11. *
  12. *        è??ú2?êy£o        ?T
  13. *
  14. *        ·μ??2?êy£o        ?T
  15. *
  16. *        ?μ?÷£o                LED4-PC7        LED5-PC8        LED6-PA12        LED7-PC10
  17.                                 ??μ???1?μ?                μíμ????aμ?
  18. ************************************************************
  19. */
  20. void RGB_Led_Init(void)
  21. {
  22.        
  23.         GPIO_InitTypeDef gpioInitStrcut;

  24.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);        //′ò?aGPIOAoíGPIOCμ?ê±?ó
  25.        
  26.         gpioInitStrcut.GPIO_Mode = GPIO_Mode_Out_PP;                                                                        //éè???aí?íìê?3??£ê?
  27.         gpioInitStrcut.GPIO_Pin = GPIO_Pin_1;                                        //3?ê??ˉPin7?¢8?¢10
  28.         gpioInitStrcut.GPIO_Speed = GPIO_Speed_50MHz;                                                                        //3D??μ?×?′ó?μ?ê
  29.         GPIO_Init(GPIOA, &gpioInitStrcut);                                                                                                //3?ê??ˉGPIOC
  30.        


  31. }

  32. void Delay(__IO u32 nCount)         //?òμ¥μ??óê±oˉêy
  33. {
  34.         for(; nCount != 0; nCount--);
  35. }
  36. /******************************************************************/
  37. /*                    êy?Y′?ê?800Koˉêy                            */
  38. /******************************************************************/
  39. void send_dat(u8 dat) //?????è′?
  40. {
  41. unsigned char a;

  42. for(a=0;a<8;a++)  //6201 a=8; 6205 a=12
  43. {       
  44.         if(dat&0x80)         //6201 dat & 0x80; 6205 dat & 0x800
  45.    {
  46.                 GPIO_SetBits(GPIOA, GPIO_Pin_1);
  47.     Delay(0x000001);                 
  48.          GPIO_ResetBits(GPIOA, GPIO_Pin_1);  
  49.         }
  50.         else
  51.         {
  52.    GPIO_SetBits(GPIOA, GPIO_Pin_1);
  53.                 __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();  
  54.    GPIO_ResetBits(GPIOA, GPIO_Pin_1);
  55.    __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();      
  56.         }
  57.         dat <<=1;  //dat×óò?1??
  58.    }
  59.    }
  60. /******************************************************************/
  61. /*                    reset??oˉêy                                 */
  62. /******************************************************************/
  63. void reset ()
  64. {
  65.         GPIO_ResetBits(GPIOA, GPIO_Pin_1);
  66.         Delay(0x00013F);
  67. }
  68. /******************************************************************/
  69. /*                    í?2???é???ê?oˉêy                            */
  70. /******************************************************************/
  71. void send_tongbu(unsigned char R_lever, unsigned char  G_lever, unsigned char  B_lever)
  72. {
  73.     unsigned char n;
  74.            for(n=20;n>0;n--)
  75.                         {
  76.                                 send_dat(R_lever);
  77.                                 send_dat(G_lever);
  78.                                 send_dat(B_lever);
  79.                         }
  80.                
  81.                         reset();
  82.                         rgbStatus.lightrSta = R_lever;
  83.                         rgbStatus.lightgSta = G_lever;
  84.                         rgbStatus.lightbSta = B_lever;
  85. }

复制代码


c,rgbled.h

  1. #ifndef _RGB_LED_H_
  2. #define _RGB_LED_H_
  3. typedef struct
  4. {

  5.         unsigned char lightrSta;
  6.         unsigned char lightgSta;
  7.         unsigned char lightbSta;

  8. } RGB_STATUS;

  9. extern RGB_STATUS rgbStatus;

  10. void RGB_Led_Init(void);
  11. void send_tongbu(unsigned char R_lever,unsigned char G_lever,unsigned char B_lever);



  12. #endif

复制代码

3,云平台增加数据流,编辑应用



左边5个按钮使灯条呈现固定的5种颜色,并将颜色值在右边旋钮显示,右边的旋钮可以让灯条表现出任意颜色
4,成果展示
a,按钮控制



b,旋钮控制1



c,旋钮控制2




关于onenet云平台,控制有明显延时,还有就是应用的数据刷新频率最快为3秒这也是时间太长了。

来看看小编怎么玩的

板子非常不错,顶一下

小编软件可以分享一下吗

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top