3729 views|79 replies

3386

Posts

0

Resources
The OP
 

【Arduino】168 Sensor Series Experiments (214) --- 8x32-bit full-color WS2812B screen [Copy link]

 

The idea of 37 sensors and modules is widely circulated on the Internet. In fact, there are definitely more than 37 sensor modules that Arduino is compatible with. In view of the fact that I have accumulated some sensor and actuator modules on hand, in accordance with the concept of practice makes perfect (must do it yourself), for the purpose of learning and communication, I am going to try one by one and do more experiments. Whether successful or not, I will record them - small progress or unresolved problems, I hope to be able to inspire others.

[Arduino] 168 Sensor Module Series Experiments (Data Code + Simulation Programming + Graphic Programming)
Experiment 214: WS2812B Full-Color RGB Pixel Screen 8x32 Dot Matrix LED Display Programmable Hard Screen Module

This post is from DIY/Open Source Hardware

Latest reply

There is a little green among thousands of flowers. Come on, yourself, come on everyone. Study hard. Make progress every day.   Details Published on 2024-11-7 06:10
 

3386

Posts

0

Resources
2
 

This post is from DIY/Open Source Hardware
 
 

3386

Posts

0

Resources
3
 

WS2812B
is an intelligent externally controlled LED light source that integrates control circuit and light-emitting circuit. Its appearance is the same as a 5050LED lamp bead, and each component is a pixel. The pixel contains an intelligent digital interface data latch signal shaping and amplification drive circuit, a high-precision internal oscillator and a 12V high-voltage programmable constant current control part, which effectively ensures that the color of the pixel light is highly consistent. The data protocol adopts a single-line return-to-zero code communication method. After the pixel is powered on and reset, the DIN end receives the data transmitted from the controller. The first 24-bit data sent is extracted by the first pixel and sent to the data latch inside the pixel. The remaining data is shaped and amplified by the internal shaping processing circuit and then forwarded to the next cascaded pixel through the DO port. After each pixel is transmitted, the signal is reduced by 24 bits. The pixel adopts automatic shaping and forwarding technology, so that the number of cascades of the pixel is not limited by signal transmission, but only by the signal transmission speed requirement.

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
4
 

WS2812B light screen electrical principle reference diagram

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
5
 

Several WS2812B related libraries involved in the experiment
Install FastLED library, Tools-Manage Library-Search FastLED-Install
Install NeoPixel library, Tools-Manage Library-Search NeoPixel-Install
Install Adafruit_NeoPixel library,
download https://github.com/adafruit/Adafruit_NeoPixel

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
6
 

This post is from DIY/Open Source Hardware
 
 
 

6818

Posts

11

Resources
7
 
I saw a pair of old hands with frost on their backs!
This post is from DIY/Open Source Hardware

Comments

I like working hands, haha  Details Published on 2022-10-23 11:50
 
 
 

3386

Posts

0

Resources
8
 

[Arduino] 168 sensor module series experiments (data code + simulation programming + graphic programming)
Experiment 214: WS2812B full-color RGB pixel screen 8x32 dot matrix LED display hard screen module
Project program 1: LED cycle green flash test

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十四:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 硬屏模块
  项目程序之一:LED循环绿色快闪测试
*/

#include <Adafruit_NeoPixel.h>

#define PIN 6
#define MAX_LED 255

#define ADD true
#define SUB false

int val = 0;
boolean stat = ADD;

Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_RGB + NEO_KHZ800 );

void setup() {
  strip.begin();
  strip.show();
}

void loop() {
  uint8_t i, a = 0;
  uint32_t color = strip.Color(255, 0, 0);
  while (a < 256)
  {
    for (i = 0; i < 255; i++)
    {
      if (i == a) strip.setPixelColor(i, color);
      else strip.setPixelColor(i, 0);
    }
    strip.show();
    delay(2);
    a++;
  }
}

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
9
 

Experimental scene diagram

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
10
 

【Arduino】168 sensor module series experiments (data code + simulation programming + graphic programming)

Experiment 214: WS2812B full color RGB pixel screen 8x32 dot matrix LED display hard screen module

Project Procedure 2: Full Screen LED Breathing Light

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十四:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 硬屏模块
  项目程序之二:全屏LED呼吸灯
*/

#include <FastLED.h>

#define LED_PIN     6     
#define NUM_LEDS    256    
CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  FastLED.setBrightness(20);  
}

int h = 0;

void loop() {
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i] = CHSV( h, 255, 255); 
    FastLED.show();
  }
  delay(1);
  h = (h + 3) % 255;
}

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
11
 

Experimental scene diagram

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
12
 

【Arduino】168 sensor module series experiments (data code + simulation programming + graphic programming)

Experiment 214: WS2812B full color RGB pixel screen 8x32 dot matrix LED display hard screen module

Project Procedure 3: Simple Three-Color Flowing Water Lamp

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十四:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 硬屏模块
  项目程序之三:简单的三色流水灯
*/

#include <FastLED.h>

#define LED_PIN    6
#define NUM_LEDS   256
CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  FastLED.setBrightness(250);  
}

void loop() {
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i] = CRGB::Red;
    FastLED.show();
    delay(1);
    leds[i] = CRGB::Black;
  }
    for (int i = NUM_LEDS; i > 0; i--) {
    leds[i] = CRGB::Blue;
    FastLED.show();
    delay(1);
    leds[i] = CRGB::Black;
  }
    for (int i = 0; i < NUM_LEDS; i++) {
    leds[i] = CRGB::Green;
    FastLED.show();
    delay(1);
    leds[i] = CRGB::Black;
  }
      for (int i = NUM_LEDS; i > 0; i--) {
    leds[i] = CRGB::Blue;
    FastLED.show();
    delay(1);
    leds[i] = CRGB::Black;
  }
}

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
13
 

Experimental scene diagram Dynamic diagram

点击上图查看Gif动图

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
14
 

【Arduino】168 sensor module series experiments (data code + simulation programming + graphic programming)

Experiment 214: WS2812B full color RGB pixel screen 8x32 dot matrix LED display hard screen module

Project Procedure 4: Circular Quick Scan Red, Green and Blue LED Full Screen Flowing Rainbow Lights

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十四:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 硬屏模块
  项目程序之四:循环快扫红绿蓝色LED满屏流水彩虹灯
*/

#include <Adafruit_NeoPixel.h>

#define PIN 6
#define BRIGHTNESS 256

Adafruit_NeoPixel strip = Adafruit_NeoPixel(256, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.setBrightness(30);
  strip.begin();
  strip.show();
}

void loop() {
  colorWipe(strip.Color(150, 0, 0), 50); // Red
  colorWipe(strip.Color(0, 150, 0), 50); // Green
  colorWipe(strip.Color(0, 0, 150), 50); // Blue
  colorWipe(strip.Color(150, 150, 150), 50); // BlueWite
  rainbowCycle(1);

}

void colorWipe(uint32_t c, uint8_t wait) {
  for (uint16_t i = 0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(3);
  }
}

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(3);
  }
}

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(3);
  }
}

uint32_t Wheel(byte WheelPos) {
  if (WheelPos < 85) {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
    WheelPos -= 170;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
15
 

Experimental scene diagram Dynamic diagram

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
16
 

Experimental scene diagram dynamic diagram 2

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
17
 

【Arduino】168 sensor module series experiments (data code + simulation programming + graphic programming)

Experiment 214: WS2812B full color RGB pixel screen 8x32 dot matrix LED display hard screen module

Project Program 5: 255-bit Circular Water Changing Breathing Light

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十四:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 硬屏模块
  项目程序之五:255位循环流水变幻呼吸灯
*/

// NeoPixel test program showing use of the WHITE channel for RGBW
// pixels only (won't look correct on regular RGB NeoPixel strips).

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1:
#define LED_PIN     6

// How many NeoPixels are attached to the Arduino?
#define LED_COUNT  255

// NeoPixel brightness, 0 (min) to 255 (max)
#define BRIGHTNESS 50

// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRBW + NEO_KHZ800);
// Argument 1 = Number of pixels in NeoPixel strip
// Argument 2 = Arduino pin number (most are valid)
// Argument 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)

void setup() {
  // These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
  // Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  // END of Trinket-specific code.

  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip.show();            // Turn OFF all pixels ASAP
  strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255)
}

void loop() {
  // Fill along the length of the strip in various colors...
  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); // True white (not RGB white)

  whiteOverRainbow(75, 5);

  pulseWhite(5);

  rainbowFade2White(3, 3, 1);
}

// Fill strip pixels one after another with a color. Strip is NOT cleared
// first; anything there will be covered pixel by pixel. Pass in color
// (as a single 'packed' 32-bit value, which you can get by calling
// strip.Color(red, green, blue) as shown in the loop() function above),
// and a delay time (in milliseconds) between pixels.
void colorWipe(uint32_t color, int wait) {
  for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
    strip.setPixelColor(i, color);         //  Set pixel's color (in RAM)
    strip.show();                          //  Update strip to match
    delay(4);                           //  Pause for a moment
  }
}

void whiteOverRainbow(int whiteSpeed, int whiteLength) {

  if(whiteLength >= strip.numPixels()) whiteLength = strip.numPixels() - 1;

  int      head          = whiteLength - 1;
  int      tail          = 0;
  int      loops         = 3;
  int      loopNum       = 0;
  uint32_t lastTime      = millis();
  uint32_t firstPixelHue = 0;

  for(;;) { // Repeat forever (or until a 'break' or 'return')
    for(int i=0; i<strip.numPixels(); i++) {  // For each pixel in strip...
      if(((i >= tail) && (i <= head)) ||      //  If between head & tail...
         ((tail > head) && ((i >= tail) || (i <= head)))) {
        strip.setPixelColor(i, strip.Color(0, 0, 0, 255)); // Set white
      } else {                                             // else set rainbow
        int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
        strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
      }
    }

    strip.show(); // Update strip with new contents
    // There's no delay here, it just runs full-tilt until the timer and
    // counter combination below runs out.

    firstPixelHue += 40; // Advance just a little along the color wheel

    if((millis() - lastTime) > whiteSpeed) { // Time to update head/tail?
      if(++head >= strip.numPixels()) {      // Advance head, wrap around
        head = 0;
        if(++loopNum >= loops) return;
      }
      if(++tail >= strip.numPixels()) {      // Advance tail, wrap around
        tail = 0;
      }
      lastTime = millis();                   // Save time of last movement
    }
  }
}

void pulseWhite(uint8_t wait) {
  for(int j=0; j<256; j++) { // Ramp up from 0 to 255
    // Fill entire strip with white at gamma-corrected brightness level 'j':
    strip.fill(strip.Color(0, 0, 0, strip.gamma8(j)));
    strip.show();
    delay(4);
  }

  for(int j=255; j>=0; j--) { // Ramp down from 255 to 0
    strip.fill(strip.Color(0, 0, 0, strip.gamma8(j)));
    strip.show();
    delay(4);
  }
}

void rainbowFade2White(int wait, int rainbowLoops, int whiteLoops) {
  int fadeVal=0, fadeMax=100;

  // Hue of first pixel runs 'rainbowLoops' complete loops through the color
  // wheel. Color wheel has a range of 65536 but it's OK if we roll over, so
  // just count from 0 to rainbowLoops*65536, using steps of 256 so we
  // advance around the wheel at a decent clip.
  for(uint32_t firstPixelHue = 0; firstPixelHue < rainbowLoops*65536;
    firstPixelHue += 256) {

    for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...

      // Offset pixel hue by an amount to make one full revolution of the
      // color wheel (range of 65536) along the length of the strip
      // (strip.numPixels() steps):
      uint32_t pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());

      // strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
      // optionally add saturation and value (brightness) (each 0 to 255).
      // Here we're using just the three-argument variant, though the
      // second value (saturation) is a constant 255.
      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue, 255,
        255 * fadeVal / fadeMax)));
    }

    strip.show();
    delay(4);

    if(firstPixelHue < 65536) {                              // First loop,
      if(fadeVal < fadeMax) fadeVal++;                       // fade in
    } else if(firstPixelHue >= ((rainbowLoops-1) * 65536)) { // Last loop,
      if(fadeVal > 0) fadeVal--;                             // fade out
    } else {
      fadeVal = fadeMax; // Interim loop, make sure fade is at max
    }
  }

  for(int k=0; k<whiteLoops; k++) {
    for(int j=0; j<256; j++) { // Ramp up 0 to 255
      // Fill entire strip with white at gamma-corrected brightness level 'j':
      strip.fill(strip.Color(0, 0, 0, strip.gamma8(j)));
      strip.show();
    }
    delay(20); // Pause 1 second
    for(int j=255; j>=0; j--) { // Ramp down 255 to 0
      strip.fill(strip.Color(0, 0, 0, strip.gamma8(j)));
      strip.show();
    }
  }

  delay(10); // Pause 1/2 second
}

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
18
 

Experimental scene diagram

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
19
 

Experimental scene Figure 2

This post is from DIY/Open Source Hardware
 
 
 

3386

Posts

0

Resources
20
 

【Arduino】168 sensor module series experiments (data code + simulation programming + graphic programming)

Experiment 214: WS2812B full color RGB pixel screen 8x32 dot matrix LED display hard screen module

Project Procedure 6: Colorful water lights change into rainbow lights

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十四:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 硬屏模块
  项目程序之六:多彩流水灯变幻彩虹灯
*/

#include <Adafruit_NeoPixel.h>    //needed for the WS2812
#include <avr/pgmspace.h>         //needed for PROGMEM

#define PIN 6                    //Pin 1 is DATA In on the bottom Ring
#define BRIGHTNESS 255             // brightness reduced



//Lookup for the Candle light
const unsigned int candles[] PROGMEM =
{
  15, 10, 48, 45, 36, 19, 59, 29, 5, 43, 41, 39, 24, 3, 61
};

Adafruit_NeoPixel strip = Adafruit_NeoPixel(255, 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() {
  pinMode(PIN, OUTPUT);
  strip.begin();
  strip.setBrightness(BRIGHTNESS); // set brightness
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  tree();
  delay(100);

  colorcrazy();

  theaterChaseRainbow(50);

  comet();

  warpdrive();
  warpdrive();

  rainbowCycle(1);

  rainbow(5);
  rainbow(5);
  rainbow(5);


  colorWipe(strip.Color(255, 0, 0), 50); // Red
  colorWipe(strip.Color(0, 255, 0), 50); // Green
  colorWipe(strip.Color(0, 0, 255), 50); // Blue

  //
  //
  //  cometr();
  //Tree light:

  //
  //  warpdrive();
  //
  //
  //  comet();


  /*
    // 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
    // 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);
  */
}

//Sub-----------------------------------------------------------------------

//Comet
void comet() {
  for (uint16_t i = strip.numPixels(); i > 0; i--) {
    strip.setPixelColor(i, strip.Color(0, 0, 255));
    fadethemall(10);
    fadethemall(10);
  }
}

void cometr() {
  for (uint16_t i = strip.numPixels(); i > 0; i--) {
    strip.setPixelColor(i, strip.Color(255, 0, 0));
    fadethemall(10);
    fadethemall(10);
  }
}


//From top down white pulses
void warpdrive() {

  //Top Led
  strip.setPixelColor(60, strip.Color(255, 255, 255));
  strip.show();
  //fade a bit
  for (int i = 0; i < 20; i++)
  {
    fadethemall(20);
  }
  //8 Ring
  for (int i = 52; i < 60; i++)
  {
    strip.setPixelColor(i, strip.Color(255, 255, 255));
  }
  strip.show();
  //fade a bit
  for (int i = 0; i < 20; i++)
  {
    fadethemall(20);
  }
  //12 Ring
  for (int i = 40; i < 52; i++)
  {
    strip.setPixelColor(i, strip.Color(255, 255, 255));
  }
  strip.show();
  //fade a bit
  for (int i = 0; i < 20; i++)
  {
    fadethemall(20);
  }
  //16 Ring
  for (int i = 24; i < 40; i++)
  {
    strip.setPixelColor(i, strip.Color(255, 255, 255));
  }
  strip.show();
  //fade a bit
  for (int i = 0; i < 20; i++)
  {
    fadethemall(20);
  }
  //24 Ring
  for (int i = 0; i < 24; i++)
  {
    strip.setPixelColor(i, strip.Color(255, 255, 255));
  }
  strip.show();
  //fade a bit
  for (int i = 0; i < 20; i++)
  {
    fadethemall(20);
  }

  //Extra by John Kerr
  strip.setPixelColor(60, strip.Color(0, 0, 0));
  strip.show();
  //fade a bit
  for (int i = 0; i < 20; i++)
  {
    fadethemall(20);
  }

}

//This reduces the brightness of all leds
void fadethemall(uint8_t wait) {
  for (uint16_t i = 0; i < strip.numPixels(); i++) {
    uint32_t color = strip.getPixelColor(i);
    int r;
    int g;
    int b;
    r = (uint8_t)(color >> 16);
    g = (uint8_t)(color >>  8);
    b = (uint8_t)color;

    if (r > 0)
    {
      r = r - 1;
    }
    else
    {
      r = 0;
    }

    if (g > 0)
    {
      g = g - 1;
    }
    else
    {
      g = 0;
    }

    if (b > 0)
    {
      b = b - 1;
    }
    else
    {
      b = 0;
    }

    strip.setPixelColor(i, strip.Color(r, g, b));
  }
  strip.show();
  delay(20);
}

//This drives the WS2812 in a crazy pattern, fun!
void colorcrazy() {
  colorWipe(strip.Color(255, 0, 0), 25); // Red
  colorWipe(strip.Color(0, 255, 0), 25); // Green
  colorWipe(strip.Color(0, 0, 255), 25); // Blue
  theaterChaseRainbow(5);
}

//This lights up the tree in green, then add the white "candles"
void tree() {

  colorWipe(strip.Color(0, 50, 0), 50); // Green

  //light "candles"
  //Show the S:
  for (int i = 0; i < 16; i++)
  {
    strip.setPixelColor(pgm_read_word(&candles) - 1, strip.Color(255, 255, 255));
    strip.show();
    delay(20);
  }
}

// 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(20);
  }
}

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(20);
  }
}

// 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(20);
  }
}

//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 (int i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, c);  //turn every third pixel on
      }
      strip.show();

      delay(20);

      for (int 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 (int i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, Wheel( (i + j) % 255)); //turn every third pixel on
      }
      strip.show();

      delay(20);

      for (int 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);
  } else if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  } else {
    WheelPos -= 170;
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
}

This post is from DIY/Open Source Hardware
 
 
 

Guess Your Favourite
Just looking around
Find a datasheet?

EEWorld Datasheet Technical Support

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号
快速回复 返回顶部 Return list