• 大小: 24KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: 其他
  • 标签: esp32  rmt  

资源简介

esp32 sdk编程利用rmt驱动ws2812七彩灯,实现彩虹渐变效果。对应的博客 https://blog.csdn.net/xh870189248/article/details/90897877

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include “ws2812.h“

#define WS2812_PIN 22
#define WS2812_COUNTS 20 // 灯珠个数
#define delay_ms(ms) vTaskDelay((ms) / portTICK_RATE_MS)

/**
 * @description: 彩虹渐变效果演示
 * @param {type} 
 * @return: 
 */
void TaskRainbow(void *pvParameters)
{
  const uint8_t anim_step = 10;
  const uint8_t anim_max = 250;

  const uint8_t delay = 25; // 2种颜色之间的渐变时间间隔

  rgbValue color = getRGBValue(anim_max 0 0);
  uint8_t step = 0;
  rgbValue color2 = getRGBValue(anim_max 0 0);
  uint8_t step2 = 0;
  rgbValue *pixels;

  pixels = malloc(sizeof(rgbValue) * WS2812_COUNTS);

  while (1)
  {
    color = color2;
    step = step2;

    for (uint8_t i = 0; i < WS2812_COUNTS; i++)
    {
      pixels[i] = color;

      if (i == 1)
      {
        color2 = color;
        step2 = step;
      }

      switch (step)
      {
      case 0:
        color.g += anim_step;
        if (color.g >= anim_max)
          step++;
        break;
      case 1:
        color.r -= anim_step;
        if (color.r == 0)
          step++;
        break;
      case 2:
        color.b += anim_step;
        if (color.b >= anim_max)
          step++;
        break;
      case 3:
        color.g -= anim_step;
        if (color.g == 0)
          step++;
        break;
      case 4:
        color.r += anim_step;
        if (color.r >= anim_max)
          step++;
        break;
      case 5:
        color.b -= anim_step;
        if (color.b == 0)
          step = 0;
        break;
      }
    }

    ws2812_setColors(pixels);

    delay_ms(delay);
  }
}

void app_main()
{
  nvs_flash_init();

  //初始化
  ws2812_init(WS2812_PIN WS2812_COUNTS);
  //彩虹渐变效果演示
  //xTaskCreate(TaskRainbow “TaskRainbow Demo“ 4096 NULL 10 NULL);


  /*  下面演示如果看到实际效果应该是  红色---绿色---蓝色
   *   但是如果看到的是   绿色---红色---蓝色 请替换调用 ws2812_setColor_grb()方法即可!
   *     原因在于:不同的灯珠生产商家定义不一样
   */
  while (1)
  {
    ws2812_setColor(25400);//红色
    delay_ms(1000);
    ws2812_setColor(02540);//绿色
    delay_ms(1000);
    ws2812_setColor(00254);//蓝色
    delay_ms(1000);
  }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-06-03 15:46  10_ws2812_RMT\
     目录           0  2019-06-03 14:41  10_ws2812_RMT\components\
     目录           0  2019-06-03 14:41  10_ws2812_RMT\components\ws2812\
     文件         197  2019-06-03 12:00  10_ws2812_RMT\components\ws2812\component.mk
     目录           0  2019-06-03 14:41  10_ws2812_RMT\components\ws2812\include\
     文件        1143  2019-06-03 12:03  10_ws2812_RMT\components\ws2812\include\ws2812.h
     目录           0  2019-06-03 14:41  10_ws2812_RMT\components\ws2812\lib\
     文件       29420  2019-06-03 12:01  10_ws2812_RMT\components\ws2812\lib\libws2812.a
     目录           0  2019-06-03 15:46  10_ws2812_RMT\main\
     文件         466  2018-06-07 21:09  10_ws2812_RMT\main\component.mk
     文件        2516  2019-06-03 15:46  10_ws2812_RMT\main\main.c
     文件         184  2019-06-03 09:50  10_ws2812_RMT\Makefile
     文件          27  2019-06-03 15:46  10_ws2812_RMT\README.md
     文件       24877  2019-06-03 09:51  10_ws2812_RMT\sdkconfig
     文件       24884  2019-06-03 09:51  10_ws2812_RMT\sdkconfig.old

评论

共有 条评论