37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏
项目二十四:将噪声数据转换为 LED 阵列中的动态颜色
实验开源代码
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏项目二十四:将噪声数据转换为 LED 阵列中的动态颜色实验接线Module UNOVCC —— 3.3VGND —— GNDDI —— D6
*/#include <FastLED.h>#define LED_PIN 6
#define BRIGHTNESS 26
#define LED_TYPE WS2811
#define COLOR_ORDER GRB// Params for width and height
const uint8_t kMatrixWidth = 8;
const uint8_t kMatrixHeight = 8;// Param for different pixel layouts
const bool kMatrixSerpentineLayout = true;// This example combines two features of FastLED to produce a remarkable range of
// effects from a relatively small amount of code. This example combines FastLED's
// color palette lookup functions with FastLED's Perlin noise generator, and
// the combination is extremely powerful.
//
// You might want to look at the "ColorPalette" and "Noise" examples separately
// if this example code seems daunting.
//
//
// The basic setup here is that for each frame, we generate a new array of
// 'noise' data, and then map it onto the LED matrix through a color palette.
//
// Periodically, the color palette is changed, and new noise-generation parameters
// are chosen at the same time. In this example, specific noise-generation
// values have been selected to match the given color palettes; some are faster,
// or slower, or larger, or smaller than others, but there's no reason these
// parameters can't be freely mixed-and-matched.
//
// In addition, this example includes some fast automatic 'data smoothing' at
// lower noise speeds to help produce smoother animations in those cases.
//
// The FastLED built-in color palettes (Forest, Clouds, Lava, Ocean, Party) are
// used, as well as some 'hand-defined' ones, and some proceedurally generated
// palettes.#define NUM_LEDS (kMatrixWidth * kMatrixHeight)
#define MAX_DIMENSION ((kMatrixWidth>kMatrixHeight) ? kMatrixWidth : kMatrixHeight)// The leds
CRGB leds[kMatrixWidth * kMatrixHeight];// The 16 bit version of our coordinates
static uint16_t x;
static uint16_t y;
static uint16_t z;// We're using the x/y dimensions to map to the x/y pixels on the matrix. We'll
// use the z-axis for "time". speed determines how fast time moves forward. Try
// 1 for a very slow moving effect, or 60 for something that ends up looking like
// water.
uint16_t speed = 20; // speed is set dynamically once we've started up// Scale determines how far apart the pixels in our noise matrix are. Try
// changing these values around to see how it affects the motion of the display. The
// higher the value of scale, the more "zoomed out" the noise iwll be. A value
// of 1 will be so zoomed in, you'll mostly see solid colors.
uint16_t scale = 30; // scale is set dynamically once we've started up// This is the array that we keep our computed noise values in
uint8_t noise[MAX_DIMENSION][MAX_DIMENSION];CRGBPalette16 currentPalette( PartyColors_p );
uint8_t colorLoop = 1;void setup() {delay(3000);FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);FastLED.setBrightness(BRIGHTNESS);// Initialize our coordinates to some random valuesx = random16();y = random16();z = random16();
}// Fill the x/y array of 8-bit noise values using the inoise8 function.
void fillnoise8() {// If we're runing at a low "speed", some 8-bit artifacts become visible// from frame-to-frame. In order to reduce this, we can do some fast data-smoothing.// The amount of data smoothing we're doing depends on "speed".uint8_t dataSmoothing = 0;if ( speed < 50) {dataSmoothing = 200 - (speed * 4);}for (int i = 0; i < MAX_DIMENSION; i++) {int ioffset = scale * i;for (int j = 0; j < MAX_DIMENSION; j++) {int joffset = scale * j;uint8_t data = inoise8(x + ioffset, y + joffset, z);// The range of the inoise8 function is roughly 16-238.// These two operations expand those values out to roughly 0..255// You can comment them out if you want the raw noise data.data = qsub8(data, 16);data = qadd8(data, scale8(data, 39));if ( dataSmoothing ) {uint8_t olddata = noise[i][j];uint8_t newdata = scale8( olddata, dataSmoothing) + scale8( data, 256 - dataSmoothing);data = newdata;}noise[i][j] = data;}}z += speed;// apply slow drift to X and Y, just for visual variation.x += speed / 8;y -= speed / 16;
}void mapNoiseToLEDsUsingPalette()
{static uint8_t ihue = 0;for (int i = 0; i < kMatrixWidth; i++) {for (int j = 0; j < kMatrixHeight; j++) {// We use the value at the (i,j) coordinate in the noise// array for our brightness, and the flipped value from (j,i)// for our pixel's index into the color palette.uint8_t index = noise[j][i];uint8_t bri = noise[i][j];// if this palette is a 'loop', add a slowly-changing base valueif ( colorLoop) {index += ihue;}// brighten up, as the color palette itself often contains the// light/dark dynamic range desiredif ( bri > 127 ) {bri = 255;} else {bri = dim8_raw( bri * 2);}CRGB color = ColorFromPalette( currentPalette, index, bri);leds[XY(i, j)] = color;}}ihue += 1;
}void loop() {// Periodically choose a new palette, speed, and scaleChangePaletteAndSettingsPeriodically();// generate noise datafillnoise8();// convert the noise data to colors in the LED array// using the current palettemapNoiseToLEDsUsingPalette();FastLED.show();// delay(10);
}// There are several different palettes of colors demonstrated here.
//
// FastLED provides several 'preset' palettes: RainbowColors_p, RainbowStripeColors_p,
// OceanColors_p, CloudColors_p, LavaColors_p, ForestColors_p, and PartyColors_p.
//
// Additionally, you can manually define your own color palettes, or you can write
// code that creates color palettes on the fly.// 1 = 5 sec per palette
// 2 = 10 sec per palette
// etc
#define HOLD_PALETTES_X_TIMES_AS_LONG 1void ChangePaletteAndSettingsPeriodically()
{uint8_t secondHand = ((millis() / 1000) / HOLD_PALETTES_X_TIMES_AS_LONG) % 60;static uint8_t lastSecond = 99;if ( lastSecond != secondHand) {lastSecond = secondHand;if ( secondHand == 0) {currentPalette = RainbowColors_p;speed = 20;scale = 30;colorLoop = 1;}if ( secondHand == 5) {SetupPurpleAndGreenPalette();speed = 10;scale = 50;colorLoop = 1;}if ( secondHand == 10) {SetupBlackAndWhiteStripedPalette();speed = 20;scale = 30;colorLoop = 1;}if ( secondHand == 15) {currentPalette = ForestColors_p;speed = 8;scale = 120;colorLoop = 0;}if ( secondHand == 20) {currentPalette = CloudColors_p;speed = 4;scale = 30;colorLoop = 0;}if ( secondHand == 25) {currentPalette = LavaColors_p;speed = 8;scale = 50;colorLoop = 0;}if ( secondHand == 30) {currentPalette = OceanColors_p;speed = 20;scale = 90;colorLoop = 0;}if ( secondHand == 35) {currentPalette = PartyColors_p;speed = 20;scale = 30;colorLoop = 1;}if ( secondHand == 40) {SetupRandomPalette();speed = 20;scale = 20;colorLoop = 1;}if ( secondHand == 45) {SetupRandomPalette();speed = 50;scale = 50;colorLoop = 1;}if ( secondHand == 50) {SetupRandomPalette();speed = 90;scale = 90;colorLoop = 1;}if ( secondHand == 55) {currentPalette = RainbowStripeColors_p;speed = 30;scale = 20;colorLoop = 1;}}
}// This function generates a random palette that's a gradient
// between four different colors. The first is a dim hue, the second is
// a bright hue, the third is a bright pastel, and the last is
// another bright hue. This gives some visual bright/dark variation
// which is more interesting than just a gradient of different hues.
void SetupRandomPalette()
{currentPalette = CRGBPalette16(CHSV( random8(), 255, 32),CHSV( random8(), 255, 255),CHSV( random8(), 128, 255),CHSV( random8(), 255, 255));
}// This function sets up a palette of black and white stripes,
// using code. Since the palette is effectively an array of
// sixteen CRGB colors, the various fill_* functions can be used
// to set them up.
void SetupBlackAndWhiteStripedPalette()
{// 'black out' all 16 palette entries...fill_solid( currentPalette, 16, CRGB::Black);// and set every fourth one to white.currentPalette[0] = CRGB::White;currentPalette[4] = CRGB::White;currentPalette[8] = CRGB::White;currentPalette[12] = CRGB::White;}// This function sets up a palette of purple and green stripes.
void SetupPurpleAndGreenPalette()
{CRGB purple = CHSV( HUE_PURPLE, 255, 255);CRGB green = CHSV( HUE_GREEN, 255, 255);CRGB black = CRGB::Black;currentPalette = CRGBPalette16(green, green, black, black,purple, purple, black, black,green, green, black, black,purple, purple, black, black );
}//
// Mark's xy coordinate mapping code. See the XYMatrix for more information on it.
//
uint16_t XY( uint8_t x, uint8_t y)
{uint16_t i;if ( kMatrixSerpentineLayout == false) {i = (y * kMatrixWidth) + x;}if ( kMatrixSerpentineLayout == true) {if ( y & 0x01) {// Odd rows run backwardsuint8_t reverseX = (kMatrixWidth - 1) - x;i = (y * kMatrixWidth) + reverseX;} else {// Even rows run forwardsi = (y * kMatrixWidth) + x;}}return i;
}
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏
项目二十五: "太平洋"柔和的蓝绿色海浪
实验开源代码
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏项目二十五: "太平洋"柔和的蓝绿色海浪实验接线Module UNOVCC —— 3.3VGND —— GNDDI —— D6*/#define FASTLED_ALLOW_INTERRUPTS 0#include <FastLED.h>FASTLED_USING_NAMESPACE#define DATA_PIN 6#define NUM_LEDS 64#define MAX_POWER_MILLIAMPS 500#define LED_TYPE WS2812B#define COLOR_ORDER GRB//CRGB leds[NUM_LEDS];void setup() {delay( 3000); // 3 second delay for boot recovery, and a moment of silenceFastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );FastLED.setBrightness(30);FastLED.setMaxPowerInVoltsAndMilliamps( 5, MAX_POWER_MILLIAMPS);}void loop(){EVERY_N_MILLISECONDS( 20) {pacifica_loop();FastLED.show();}}////// The code for this animation is more complicated than other examples, and// while it is "ready to run", and documented in general, it is probably not// the best starting point for learning. Nevertheless, it does illustrate some// useful techniques.//////// In this animation, there are four "layers" of waves of light.//// Each layer moves independently, and each is scaled separately.//// All four wave layers are added together on top of each other, and then// another filter is applied that adds "whitecaps" of brightness where the// waves line up with each other more. Finally, another pass is taken// over the led array to 'deepen' (dim) the blues and greens.//// The speed and scale and motion each layer varies slowly within independent// hand-chosen ranges, which is why the code has a lot of low-speed 'beatsin8' functions// with a lot of oddly specific numeric ranges.//// These three custom blue-green color palettes were inspired by the colors found in// the waters off the southern coast of California, https://goo.gl/maps/QQgd97jjHesHZVxQ7//CRGBPalette16 pacifica_palette_1 ={ 0x000507, 0x000409, 0x00030B, 0x00030D, 0x000210, 0x000212, 0x000114, 0x000117,0x000019, 0x00001C, 0x000026, 0x000031, 0x00003B, 0x000046, 0x14554B, 0x28AA50};CRGBPalette16 pacifica_palette_2 ={ 0x000507, 0x000409, 0x00030B, 0x00030D, 0x000210, 0x000212, 0x000114, 0x000117,0x000019, 0x00001C, 0x000026, 0x000031, 0x00003B, 0x000046, 0x0C5F52, 0x19BE5F};CRGBPalette16 pacifica_palette_3 ={ 0x000208, 0x00030E, 0x000514, 0x00061A, 0x000820, 0x000927, 0x000B2D, 0x000C33,0x000E39, 0x001040, 0x001450, 0x001860, 0x001C70, 0x002080, 0x1040BF, 0x2060FF};void pacifica_loop(){// Increment the four "color index start" counters, one for each wave layer.// Each is incremented at a different speed, and the speeds vary over time.static uint16_t sCIStart1, sCIStart2, sCIStart3, sCIStart4;static uint32_t sLastms = 0;uint32_t ms = GET_MILLIS();uint32_t deltams = ms - sLastms;sLastms = ms;uint16_t speedfactor1 = beatsin16(3, 179, 269);uint16_t speedfactor2 = beatsin16(4, 179, 269);uint32_t deltams1 = (deltams * speedfactor1) / 256;uint32_t deltams2 = (deltams * speedfactor2) / 256;uint32_t deltams21 = (deltams1 + deltams2) / 2;sCIStart1 += (deltams1 * beatsin88(1011, 10, 13));sCIStart2 -= (deltams21 * beatsin88(777, 8, 11));sCIStart3 -= (deltams1 * beatsin88(501, 5, 7));sCIStart4 -= (deltams2 * beatsin88(257, 4, 6));// Clear out the LED array to a dim background blue-greenfill_solid( leds, NUM_LEDS, CRGB( 2, 6, 10));// Render each of four layers, with different scales and speeds, that vary over timepacifica_one_layer( pacifica_palette_1, sCIStart1, beatsin16( 3, 11 * 256, 14 * 256), beatsin8( 10, 70, 130), 0 - beat16( 301) );pacifica_one_layer( pacifica_palette_2, sCIStart2, beatsin16( 4, 6 * 256, 9 * 256), beatsin8( 17, 40, 80), beat16( 401) );pacifica_one_layer( pacifica_palette_3, sCIStart3, 6 * 256, beatsin8( 9, 10, 38), 0 - beat16(503));pacifica_one_layer( pacifica_palette_3, sCIStart4, 5 * 256, beatsin8( 8, 10, 28), beat16(601));// Add brighter 'whitecaps' where the waves lines up morepacifica_add_whitecaps();// Deepen the blues and greens a bitpacifica_deepen_colors();}// Add one layer of waves into the led arrayvoid pacifica_one_layer( CRGBPalette16& p, uint16_t cistart, uint16_t wavescale, uint8_t bri, uint16_t ioff){uint16_t ci = cistart;uint16_t waveangle = ioff;uint16_t wavescale_half = (wavescale / 2) + 20;for ( uint16_t i = 0; i < NUM_LEDS; i++) {waveangle += 250;uint16_t s16 = sin16( waveangle ) + 32768;uint16_t cs = scale16( s16 , wavescale_half ) + wavescale_half;ci += cs;uint16_t sindex16 = sin16( ci) + 32768;uint8_t sindex8 = scale16( sindex16, 240);CRGB c = ColorFromPalette( p, sindex8, bri, LINEARBLEND);leds[i] += c;}}// Add extra 'white' to areas where the four layers of light have lined up brightlyvoid pacifica_add_whitecaps(){uint8_t basethreshold = beatsin8( 9, 55, 65);uint8_t wave = beat8( 7 );for ( uint16_t i = 0; i < NUM_LEDS; i++) {uint8_t threshold = scale8( sin8( wave), 20) + basethreshold;wave += 7;uint8_t l = leds[i].getAverageLight();if ( l > threshold) {uint8_t overage = l - threshold;uint8_t overage2 = qadd8( overage, overage);leds[i] += CRGB( overage, overage2, qadd8( overage2, overage2));}}}// Deepen the blues and greensvoid pacifica_deepen_colors(){for ( uint16_t i = 0; i < NUM_LEDS; i++) {leds[i].blue = scale8( leds[i].blue, 145);leds[i].green = scale8( leds[i].green, 200);leds[i] |= CRGB( 2, 5, 7);}}
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏
项目二十六:简单的WS2812FX自动模式循环
实验开源代码
/*【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)实验一百四十六:64位WS2812B 8*8 xRGB 5050 LED模块 ws2812s像素点阵屏项目二十六:简单的WS2812FX自动模式循环实验接线Module UNOVCC —— 3.3VGND —— GNDDI —— D6
*/#include <WS2812FX.h>#define LED_COUNT 64
#define LED_PIN 6#define TIMER_MS 5000// 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)
WS2812FX ws2812fx = WS2812FX(LED_COUNT, LED_PIN, NEO_RGB + NEO_KHZ800);unsigned long last_change = 0;
unsigned long now = 0;void setup() {ws2812fx.init();ws2812fx.setBrightness(25);ws2812fx.setSpeed(1000);ws2812fx.setColor(0x007BFF);ws2812fx.setMode(FX_MODE_STATIC);ws2812fx.start();
}void loop() {now = millis();ws2812fx.service();if(now - last_change > TIMER_MS) {ws2812fx.setMode((ws2812fx.getMode() + 1) % ws2812fx.getModeCount());last_change = now;}
}
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏
项目二十七:模拟的火焰山动画
实验开源代码
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏项目二十七:模拟的火焰山动画实验接线Module UNOVCC —— 3.3VGND —— GNDDI —— D6*/#include "FastLED.h" // be sure to install and include the FastLED lib#include <WS2812FX.h>#define NUM_LEDS 64#define LED_PIN 6WS2812FX ws2812fx = WS2812FX(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);// declare global parameters used by Fire2012bool gReverseDirection = false;void setup() {Serial.begin(115200);// init WS2812FX to use a custom effectws2812fx.init();ws2812fx.setBrightness(25);ws2812fx.setColor(BLUE);ws2812fx.setSpeed(1000);ws2812fx.setMode(FX_MODE_CUSTOM);ws2812fx.setCustomMode(myCustomEffect);ws2812fx.start();}void loop() {ws2812fx.service();}// in the custom effect run the Fire2012 algorithmuint16_t myCustomEffect() {Fire2012();// return the animation speed based on the ws2812fx speed settingreturn (ws2812fx.getSpeed() / NUM_LEDS);}/*paste in the Fire2012 code with a small edit at the end which uses thesetPixelColor() function to copy the color data to the ws2812fx instance.*/// Fire2012 by Mark Kriegsman, July 2012// as part of "Five Elements" shown here: http://youtu.be/knWiGsmgycY// This basic one-dimensional 'fire' simulation works roughly as follows:// There's a underlying array of 'heat' cells, that model the temperature// at each point along the line. Every cycle through the simulation,// four steps are performed:// 1) All cells cool down a little bit, losing heat to the air// 2) The heat from each cell drifts 'up' and diffuses a little// 3) Sometimes randomly new 'sparks' of heat are added at the bottom// 4) The heat from each cell is rendered as a color into the leds array// The heat-to-color mapping uses a black-body radiation approximation.//// Temperature is in arbitrary units from 0 (cold black) to 255 (white hot).//// This simulation scales it self a bit depending on NUM_LEDS; it should look// "OK" on anywhere from 20 to 100 LEDs without too much tweaking.//// I recommend running this simulation at anywhere from 30-100 frames per second,// meaning an interframe delay of about 10-35 milliseconds.//// Looks best on a high-density LED setup (60+ pixels/meter).////// There are two main parameters you can play with to control the look and// feel of your fire: COOLING (used in step 1 above), and SPARKING (used// in step 3 above).//// COOLING: How much does the air cool as it rises?// Less cooling = taller flames. More cooling = shorter flames.// Default 50, suggested range 20-100#define COOLING 55// SPARKING: What chance (out of 255) is there that a new spark will be lit?// Higher chance = more roaring fire. Lower chance = more flickery fire.// Default 120, suggested range 50-200.#define SPARKING 120void Fire2012(){// Array of temperature readings at each simulation cellstatic byte heat[NUM_LEDS];// Step 1. Cool down every cell a littlefor ( int i = 0; i < NUM_LEDS; i++) {heat[i] = qsub8( heat[i], random8(0, ((COOLING * 10) / NUM_LEDS) + 2));}// Step 2. Heat from each cell drifts 'up' and diffuses a littlefor ( int k = NUM_LEDS - 1; k >= 2; k--) {heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2] ) / 3;}// Step 3. Randomly ignite new 'sparks' of heat near the bottomif ( random8() < SPARKING ) {int y = random8(7);heat[y] = qadd8( heat[y], random8(160, 255) );}// Step 4. Map from heat cells to LED colorsfor ( int j = 0; j < NUM_LEDS; j++) {CRGB color = HeatColor( heat[j]);int pixelnumber;if ( gReverseDirection ) {pixelnumber = (NUM_LEDS - 1) - j;} else {pixelnumber = j;}// **** modified for use with WS2812FX ****//leds[pixelnumber] = color;ws2812fx.setPixelColor(pixelnumber, color.red, color.green, color.blue);// **** modified for use with WS2812FX ****}}
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏
项目二十八:随机追逐的彗星效果
实验开源代码
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏项目二十八:随机追逐的彗星效果实验接线Module UNOVCC —— 3.3VGND —— GNDDI —— D6*/#include <WS2812FX.h>#define LED_COUNT 64#define LED_PIN 6WS2812FX ws2812fx = WS2812FX(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);void setup() {Serial.begin(115200);ws2812fx.init();ws2812fx.setBrightness(25);// segment 0 is the builtin comet effectws2812fx.setSegment(0, 0, LED_COUNT / 2 - 1, FX_MODE_COMET, RED, 1000, false);// segment 1 is our custom effectws2812fx.setCustomMode(myCustomEffect);ws2812fx.setSegment(1, LED_COUNT / 2, LED_COUNT - 1, FX_MODE_CUSTOM, RED, 50, false);ws2812fx.start();}void loop() {ws2812fx.service();}uint16_t myCustomEffect(void) { // random chaseWS2812FX::Segment* seg = ws2812fx.getSegment(); // get the current segmentfor (uint16_t i = seg->stop; i > seg->start; i--) {ws2812fx.setPixelColor(i, ws2812fx.getPixelColor(i - 1));}uint32_t color = ws2812fx.getPixelColor(seg->start + 1);int r = random(6) != 0 ? (color >> 16 & 0xFF) : random(256);int g = random(6) != 0 ? (color >> 8 & 0xFF) : random(256);int b = random(6) != 0 ? (color & 0xFF) : random(256);ws2812fx.setPixelColor(seg->start, r, g, b);return seg->speed; // return the delay until the next animation step (in msec)}
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏
项目二十九:自定义效果的演示
实验开源代码
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏项目二十九:自定义效果的演示实验接线Module UNOVCC —— 3.3VGND —— GNDDI —— D6*/#include <WS2812FX.h>//include the custom effects//#include "custom/BlockDissolve.h"#include "custom/DualLarson.h"//#include "custom/MultiComet.h"//#include "custom/Oscillate.h"//#include "custom/RainbowLarson.h"//#include "custom/RandomChase.h"//#include "custom/TriFade.h"//#include "custom/VUMeter.h"#define LED_COUNT 64#define LED_PIN 6WS2812FX ws2812fx = WS2812FX(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);void setup() {Serial.begin(115200);ws2812fx.init();ws2812fx.setBrightness(25);// setup the custom effectsuint8_t dualLarsonMode = ws2812fx.setCustomMode(F("Dual Larson"), dualLarson);uint32_t colors[] = {RED, BLUE, WHITE};ws2812fx.setSegment(0, 0, LED_COUNT - 1, dualLarsonMode, colors, 2000, FADE_SLOW);ws2812fx.start();}void loop() {ws2812fx.service();}
Arduino实验场景图