查看: 16757|回复: 5

arduino 控制WS2812 RGB灯

[复制链接]
  • TA的每日心情
    奋斗
    2016-2-2 10:49
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-8-3 16:33 | 显示全部楼层 |阅读模式
    本帖最后由 xiansen_shun 于 2017-8-3 16:33 编辑

    WS2812是一个集控制电路和发光电路于一体的智能外控LED光源,其型号与一个5050LED灯珠相同,每个元件为一个像素点,像素点的内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含高精度的内部振荡器和12V高压可编程定电流控制部分。为了保证像素点的颜色高度一致,数据协议采用单线归零码的通讯方式,像素点在上电复位以后DIN 接收从控制器传输过来的数据,首先送过来的是24bit数据被第一个像素点提取后,送到像素点的内部数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点采用自动整形转发技术,使的该像素点的级联个数不受信号传送的限制,仅仅受限信号传输速度要求。
    在之前设计的小车顶面板上就是采用的这种LED光源。
    测试代码

    kittenblock中小学创客名师推荐的图形化编程软件

    #include <Adafruit_NeoPixel.h>
    #ifdef __AVR__
      #include <avr/power.h>
    #endif
    
    #define PIN 6
    
    // Parameter 1 = number of pixels in strip
    // Parameter 2 = Arduino pin number (most are valid)
    // Parameter 3 = pixel type flags, add together as needed:
    //   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
    //   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
    //   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
    //   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
    //   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
    Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);
    
    // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
    // pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
    // and minimize distance between Arduino and first pixel.  Avoid connecting
    // on a live circuit...if you must, connect GND first.
    
    void setup() {
      // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
      #if defined (__AVR_ATtiny85__)
        if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
      #endif
      // End of trinket special code
    
    
      strip.begin();
      strip.show(); // Initialize all pixels to 'off'
    }
    
    void loop() {
      // Some example procedures showing how to display to the pixels:
      colorWipe(strip.Color(255, 0, 0), 50); // Red
      colorWipe(strip.Color(0, 255, 0), 50); // Green
      colorWipe(strip.Color(0, 0, 255), 50); // Blue
    //colorWipe(strip.Color(0, 0, 0, 255), 50); // White RGBW
      // Send a theater pixel chase in...
      theaterChase(strip.Color(127, 127, 127), 50); // White
      theaterChase(strip.Color(127, 0, 0), 50); // Red
      theaterChase(strip.Color(0, 0, 127), 50); // Blue
    
      rainbow(20);
      rainbowCycle(20);
      theaterChaseRainbow(50);
    }
    
    // Fill the dots one after the other with a color
    void colorWipe(uint32_t c, uint8_t wait) {
      for(uint16_t i=0; i<strip.numPixels(); i++) {
        strip.setPixelColor(i, c);
        strip.show();
        delay(wait);
      }
    }
    
    void rainbow(uint8_t wait) {
      uint16_t i, j;
    
      for(j=0; j<256; j++) {
        for(i=0; i<strip.numPixels(); i++) {
          strip.setPixelColor(i, Wheel((i+j) & 255));
        }
        strip.show();
        delay(wait);
      }
    }
    
    // Slightly different, this makes the rainbow equally distributed throughout
    void rainbowCycle(uint8_t wait) {
      uint16_t i, j;
    
      for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
        for(i=0; i< strip.numPixels(); i++) {
          strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
        }
        strip.show();
        delay(wait);
      }
    }
    
    //Theatre-style crawling lights.
    void theaterChase(uint32_t c, uint8_t wait) {
      for (int j=0; j<10; j++) {  //do 10 cycles of chasing
        for (int q=0; q < 3; q++) {
          for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
            strip.setPixelColor(i+q, c);    //turn every third pixel on
          }
          strip.show();
    
          delay(wait);
    
          for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
            strip.setPixelColor(i+q, 0);        //turn every third pixel off
          }
        }
      }
    }
    
    //Theatre-style crawling lights with rainbow effect
    void theaterChaseRainbow(uint8_t wait) {
      for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
        for (int q=0; q < 3; q++) {
          for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
            strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
          }
          strip.show();
    
          delay(wait);
    
          for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
            strip.setPixelColor(i+q, 0);        //turn every third pixel off
          }
        }
      }
    }
    
    // Input a value 0 to 255 to get a color value.
    // The colours are a transition r - g - b - back to r.
    uint32_t Wheel(byte WheelPos) {
      WheelPos = 255 - WheelPos;
      if(WheelPos < 85) {
        return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
      }
      if(WheelPos < 170) {
        WheelPos -= 85;
        return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
      }
      WheelPos -= 170;
      return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
    }

    RGB5050-2.jpg
    RGB5050-3.jpg
    GRB5050-1.jpg
    库文件下载: AdafruitNeoPixelmaster.rar (27.7 KB, 下载次数: 609)

  • TA的每日心情
    开心
    2018-6-9 15:48
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    发表于 2017-8-5 09:38 | 显示全部楼层
    这是什么板子
  • TA的每日心情
    奋斗
    2016-2-2 10:49
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2017-8-9 10:28 | 显示全部楼层

    OPENJUMPER官方内测板
  • TA的每日心情
    开心
    2017-8-9 14:32
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-8-9 15:28 | 显示全部楼层
    这灯是耗电大户,使用时注意电源供给。
  • TA的每日心情
    开心
    2017-8-9 14:32
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-8-9 15:30 | 显示全部楼层
    这个灯是耗电大户,使用时注意电源供给。亮度很高注意保护视力。

    该用户从未签到

    发表于 2018-10-23 11:25 | 显示全部楼层
    需要添加什么东西吗?
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【Arduino】108种传感器模块系列实验(104)---MAX30102手腕心率
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    萌新报道 刚购买了一个watchx
    萌新报道 刚购买了一个wat
    就这货 但是网上让下载库 我点加载以后他提示没法用。。 求大神帮忙 谢谢了
    【Arduino】108种传感器系列实验(15)---手指侦测心跳传感...
    【Arduino】108种传感器系
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    求助!GM65二维码扫描模块怎么用?
    求助!GM65二维码扫描模块
    求助!GM65二维码扫描模块怎么用? 卖家给的资料真的看不懂该怎么弄。。( ̄▽ ̄)~*
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表