【雕爷学编程】Arduino动手做(138)---64位WS2812点阵屏模块5

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实验场景图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/19914.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openssl源码编译输出库-guidance-傻瓜式教程

目标&#xff1a; 下载openssl源码 编译输出目标版本&#xff0c;例如使用Android NDK编译输出Android使用的32位的库 1、下载源码 git clone https://github.com/openssl/openssl.git -b openssl-3.0.9 2、 请下载Linux版本的Android NDK 请下载Linux版本的Android NDK, 并完…

CUDA11.1、cuDNN8.6.0、Tensorrt8.5.3,ubuntu20.04安装过程记录

CUD11.1 下载地址&#xff1a;CUDA Toolkit Archive | NVIDIA Developer 安装&#xff1a; wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run sudo sh cuda_11.1.1_455.32.00_linux.run 对于不是sudo用户&…

46.声明类关键字 var new funcion let const

目录 1 var 2 new 3 function 4 let 4.1 let不能在同一作用域下重复声明 4.2 let无法进行变量提升 4.3 var的变量会跑出当前作用域&#xff0c;但是let不会 4.4 let与var的循环定时器问题 5 const 5.1 简单值 5.2 复杂值 1 var 使用var只能让函数内部使用…

融合ELO机制的销售能力评估方案

ELO排位赛算法 文章目录 ELO排位赛算法一. ELO机制二. 销售能力抽象为ELO排位赛设计2.1 基础设计2.2 存在问题 三. 优化措施3.1 如何解决新销售存在冷启动问题新老人动态K值调整假设检验衡量赢的程度 3.2 如何解决转化率存在不置信的问题ELO升级为MultiELO 一. ELO机制 ELO等级…

C语言结构体

一、结构体的定义&#xff1a; 结构体&#xff08;Struct&#xff09;是C语言中的一个重要数据类型&#xff0c;它可以用来存储多个不同类型的变量。结构体类似于一个自定义的数据类型&#xff0c;可以包含多个不同类型的成员变量&#xff0c;每个成员变量可以有自己的数据类型…

sqlite3交叉编译

1、交叉编译sqllite3可以先从官网下载最新最新的源码进行编译。sqlite3下载sqlite3有两种版本的源代码&#xff0c;sqlite-amalgamation-3420000.zip这种是将所有的操作放到sqlite3中进行使用的。虽然官方推荐使用这种方法。但是对于嵌入式移植还是使用sqlite-autoconf-3420000…

WebGPU实战3D电商

在过去的几年里&#xff0c;我们一直在为 WebGPU 编写新版本的 Babylon.js 引擎。 随着下一代 Web 3D 即将在Chrome 102~103版本上公开WebGPU 1.0 &#xff0c;人们的兴奋情绪与日俱增。 在这篇博文中&#xff0c;我将快速概述这个新的 Babylon.js WebGPU 引擎&#xff0c;并将…

go 爬虫速度控制

go 爬虫速度控制 使用go语言用原生net/http写爬虫如何优雅的控制并发和请求速度控制并发限流并发和限流的区别简单说明有了并发控制为什么还要限流 最总代码 使用go语言用原生net/http写爬虫如何优雅的控制并发和请求速度 go程序的执行效率相对python要快的多&#xff0c;且占…

今天实习第一天,用git

老板问了我是否用过gitee&#xff0c;并且是否用过git&#xff0c;在集成工具中&#xff0c;会git来提交代码。我说没有。 所以&#xff0c;先使用gitee。 01.登录gitee的官网&#xff0c;在此处登录。 02.绑定邮箱&#xff0c;我用的是QQ邮箱。 03.git的历史 git是分布式的…

用OpenCV进行图像分割--进阶篇

1. 引言 大家好&#xff0c;我的图像处理爱好者们&#xff01; 在上一篇幅中&#xff0c;我们简单介绍了图像分割领域中的基础知识&#xff0c;包含基于固定阈值的分割和基于OSTU的分割算法。这一次&#xff0c;我们将通过介绍基于色度的分割来进一步巩固大家的基础知识。 闲…

Java实现站内信

假如后台某个任务比较耗时&#xff0c;这时就需要任务完成时&#xff0c;通知一下用户&#xff0c;如下图&#xff0c;实现站内信的效果 两张表即可实现 t_message_content内容表 CREATE TABLE t_message_content (c_id int(11) NOT NULL AUTO_INCREMENT COMMENT 消息的id,se…

flink-conf.yaml的参数

参数 ⚫jobmanager.memory.process.size&#xff1a;对 JobManager 进程可使用到的全部内存进行配置&#xff0c; 包括 JVM元空间和其他开销&#xff0c;默认为 1600M&#xff0c;可以根据集群规模进行适当调整。⚫ taskmanager.memory.process.size&#xff1a;对 TaskManage…