arduino通过自定义协议控制ws2812led全彩彩灯

  1. #include 
    #ifdef __AVR__
    #include 
    #endif
    #define PIN_LED1_DI    1   // led1 di口
    #define PIN_LED2_DI    2   // led2 di口
    
    #define LED_COMMAND_SET_FLASH                'A'      // 设置灯闪烁
    #define LED_COMMAND_STOP_FLASH               'B'      // 停止灯闪烁
    #define LED_COMMAND_SET_COLOR                'C'      // 设置灯颜色
    
    
    char temp;
    char recvData[1024];
    int  nRecvDataLen;
    int FlashFlag;
    char FlashValue;
    Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN_LED1_DI, NEO_GRB + NEO_KHZ800);//8代表有8个小灯
    //如果一个板子控制多个灯圈,在这新建,组成数组,然后做处理
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(115200); //设置串口波特率115200
      while (Serial.read() >= 0) {} //清除缓存
      pinMode(PIN_LED1_DI, OUTPUT);
    
      memset(recvData, 0, sizeof(recvData));
      nRecvDataLen = 0;
      FlashFlag=0;
    }
    
    // Fill the dots one after the other with a color
    void colorWipe(uint32_t c, uint8_t wait) {
      for(uint16_t i=0; i 0)
      {
        temp = Serial.read();//获取串口接收到的数据一个一个收
        if (temp == '$')
        {
          nRecvDataLen = 0;
        }
        if (nRecvDataLen < 6)
        {
          recvData[nRecvDataLen++] = temp;
        }
        if (recvData[0] == '$' && recvData[5] == '@')
        {
          processOneCommand();
          memset(recvData, 0, sizeof(recvData));
          nRecvDataLen = 0; // 已有的数据缓冲区清空
        }
      }
      if(FlashFlag){
        FlashControl(FlashValue);
        }
    
    }
  2. 功能:led灯模块和电脑PC通讯的协议
      1、控制灯闪烁
      2、设置颜色
      协议定义,PC请求和返回结果都通过该协议。共6个字节: $  LEDNO CONTROLNO VALUE CheckSUM @
      发送或请求示例:$1AR0@
      头部标志:一个字节 :$
      LEDNO: 一个字节灯号,0,1,2,3....
      CMDNO: 一个字节控制命令号 AB ,A--设置灯闪烁 ,B--设置灯颜色
      VALUE:1个字节,颜色值RGB,红R,绿G,蓝B...无色‘0’
      CheckSUM:按位相加后取1个字节
      结束标志:@

你可能感兴趣的:(硬件)