【雕爷学编程】Arduino动手做(199)

编程入门 行业动态 更新时间:2024-10-15 02:27:55

【雕爷学编程】Arduino<a href=https://www.elefans.com/category/jswz/34/1737033.html style=动手做(199)"/>

【雕爷学编程】Arduino动手做(199)

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百九十九:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 可编程硬屏模块

知识点:WS2812B主要特点
智能反接保护,电源反接不会损坏IC。
IC控制电路与LED点光源公用一个电源。
控制电路与RGB芯片集成在一个5050封装的元器件中,构成一个完整的外控像素点。
内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。
内置上电复位和掉电复位电路。
每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示,扫描频率不低于400Hz/s。
串行级联接口,能通过一根信号线完成数据的接收与解码。
任意两点传传输距离在不超过5米时无需增加任何电路。
当刷新速率30帧/秒时,级联数不小于1024点。
数据发送速度可达800Kbps。
光的颜色高度一致,性价比高。

主要应用领域
LED全彩发光字灯串,LED全彩模组, LED全彩软灯条硬灯条,LED护栏管。
LED点光源,LED像素屏,LED异形屏,各种电子产品,电器设备跑马灯。

WS2812B灯屏电原理参考图

实验涉及到的几个WS2812B相关库
安装FastLED库,工具—管理库—搜索FastLED—安装
安装NeoPixel库,工具—管理库—搜索NeoPixel—安装
安装Adafruit_NeoPixel库,
下载


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

/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百一十四:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 硬屏模块项目程序十六:WS2812FX库最简单的程序形式
*/#include <WS2812FX.h> //导入库
#define LED_COUNT 256 //WS2812B LED数量
#define LED_PIN    6 //WS2812B LED接脚WS2812FX ws2812fx = WS2812FX(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);void setup() {ws2812fx.init(); //初始化ws2812fx.setBrightness(255); //设置亮度(0-255),可以控制总电流(重要!)ws2812fx.setSpeed(200); // 设置速度ws2812fx.setMode(FX_MODE_FIREWORKS_RANDOM);// 设置模式(内置63种模式)ws2812fx.start(); //启动
}void loop() {ws2812fx.service(); //循环运行
}

通过将 LED 串分成段(最多 10 个)并独立编程每个段,可以创建更复杂的效果。使用setSegment()函数对每个段的模式、颜色、速度和方向(正常或反向)进行编程:

setSegment(segment index, start LED, stop LED, mode, color, speed, reverse);

请注意,某些效果使用不止一种颜色(最多三种),并通过指定颜色数组进行编程:

setSegment(segment index, start LED, stop LED, mode, colors[], speed, reverse);
//将 LED 串分成两个独立的部分
uint32_t colours[] = {RED, GREEN};
ws2812fx.setSegment( 0 , 0 , (LED_COUNT/ 2 )- 1 , FX_MODE_BLINK, colors, 1000 , false );
ws2812fx.setSegment( 1 , LED_COUNT/ 2 , LED_COUNT- 1 , FX_MODE_BLINK, COLORS(ORANGE, PURPLE), 1000 , false );

内置效果清单
静态- 不闪烁。只是普通的旧静态灯。
闪烁- 正常闪烁。50% 开/关时间。
呼吸- 众所周知的 i-Devices 的“待机呼吸”。固定速度。
颜色擦除- 依次点亮所有 LED。然后按顺序关闭它们。重复。
颜色擦除反转 - 与 Color Wipe 相同,但交换开/关颜色。
颜色擦除反向 - 依次点亮所有 LED。然后以相反的顺序关闭它们。重复。
颜色擦除反向反向 - 与 上条相同,除了交换开/关颜色。
随机颜色擦除- 将所有 LED 依次变为随机颜色。然后用另一种颜色重新开始。
随机颜色- 以一种随机颜色点亮所有 LED。然后将它们切换到下一个随机颜色。
单动态- 以随机颜色点亮每个 LED。将一个随机的 LED 一个接一个地更改为随机颜色。
多动态- 以随机颜色点亮每个 LED。同时将所有 LED 更改为新的随机颜色。
彩虹- 通过彩虹一次循环所有 LED。
彩虹循环- 在整个 LED 串上循环彩虹。
扫描- 来回运行单个像素。
双扫描- 以相反的方向来回运行两个像素。
淡入淡出- 使 LED 灯再次亮起和(几乎)熄灭。
剧院追逐 - 剧院式爬行灯。受 Adafruit 示例的启发。
剧院追逐彩虹- 具有彩虹效果的剧院式爬行灯。受 Adafruit 示例的启发。
行车灯- 带平滑正弦过渡的行车灯效果。
闪烁- 使多个 LED 闪烁、重置、重复。
闪烁随机 - 以随机颜色闪烁几个 LED,重置,重复。
闪烁淡入淡出 - 闪烁几个 LED,然后逐渐消失。
19 / 5000
翻译结果
闪烁淡入淡出随机 - 以随机颜色闪烁几个 LED,然后逐渐消失。
闪烁- 一次闪烁一个 LED。
Flash Sparkle - 以所选颜色点亮所有 LED。随机闪烁单个白色像素。
Hyper Sparkle - 像闪光一样。更多的闪光。
频闪- 经典频闪效果。
频闪彩虹- 经典频闪效果。骑自行车穿过彩虹。
Multi Strobe - 具有不同频闪次数和暂停的频闪效果,由速度设置控制。
闪烁彩虹- 经典闪烁效果。骑自行车穿过彩虹。
Chase White - 在白色上运行的颜色。
Chase Color - 白色在颜色上运行。
Chase Random - 白色运行,然后是随机颜色。
Chase Rainbow - 白色在彩虹上奔跑。
Chase Flash - 白色闪烁彩色。
Chase Flash Random - 白色闪烁,然后是随机颜色。
Chase Rainbow White - 运行在白色的彩虹。
Chase Blackout - 黑色在彩色上运行。
Chase Blackout Rainbow - 黑色在彩虹上奔跑。
随机颜色扫描- 从条带的开始和结束交替引入随机颜色。
运行颜色- 交替运行的颜色/白色像素。
Running Red Blue - 交替运行红色/蓝色像素。
随机运行- 随机彩色像素运行。
Larson 扫描仪- KITT
Comet - 从一端发射彗星。
烟花- 烟花火花。
Fireworks Random - 随机彩色烟花火花。
圣诞快乐- 交替运行绿色/红色像素。
火焰闪烁- 火焰闪烁效果。就像在狂风中。
Fire Flicker (soft) - 火焰闪烁效果。跑得更慢/更软。
Fire Flicker (intense) - 火焰闪烁效果。颜色范围更广。
Circus Combustus - 交替运行的白色/红色/黑色像素。
万圣节- 交替运行橙色/紫色像素。
双色追逐- 两个 LED 在背景色上运行。
三色追逐- 交替运行三个彩色像素。
TwinkleFOX - 灯光随机淡入淡出。
通过 63.自定义- 最多八个用户创建的自定义效果。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百一十四:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 硬屏模块
项目程序十七:使用Adafruit_NeoPixel库的串口控制20种效果

Arduino实验开源代码

/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百一十四:WS2812B全彩RGB像素屏 8x32点阵LED显示屏 硬屏模块项目程序十七:使用Adafruit_NeoPixel库的串口控制20种效果
*/#include <Adafruit_NeoPixel.h>
#define PIN 6 //LED'in Din pinini yazın
#define NUM_LEDS 256 //Kaç tane LED'iniz varsa buraya yazın
#define BRIGHTNESS 20Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
int mod;
int lastmod;
String veri;
int randommod;
int parlaklik = 0;void setup() {Serial.begin(9600);veri.reserve(5);strip.begin();strip.show();strip.setBrightness(BRIGHTNESS); //亮度范围0-255Serial.println("WS2812准备就绪");Serial.println("串口输入1-21");
}void loop() {switch (mod) {case 1:Serial.println("RGBLoop");RGBLoop();break;case 2:Serial.println("Strobe");Strobe(0xff, 0xff, 0xff, 10, 50, 1000);break;case 3:Serial.println("HalloweenEyes");HalloweenEyes(0xff, 0x00, 0x00, 1, 4, true, random(5, 50), random(10, 50), random(50, 300));break;case 4:Serial.println("NewKITT RightToLeft");NewKITT(0xff, 0, 0, 8, 10, 50);break;case 5:Serial.println("Twinkle");Twinkle(0xff, 0, 0, 10, 100, false);break;case 6:Serial.println("TwinkleRandom");Twinkle(0xff, 0, 0, 10, 100, false);break;case 7:Serial.println("Sparkle");Sparkle(0xff, 0xff, 0xff, 0);break;case 8:Serial.println("SnowSparkle");SnowSparkle(0x10, 0x10, 0x10, 20, random(100, 1000));break;case 9:Serial.println("RunningLights");RunningLights(0xff, 0xff, 0x00, 50);break;case 10:Serial.println("colorWipe");colorWipe(0x00, 0xff, 0x00, 50);colorWipe(0xff, 0x00, 0x00, 50);break;case 11:Serial.println("rainbowCycle");rainbowCycle(20);break;case 12:Serial.println("theaterChase");theaterChase(0xff, 0, 0, 50);break;case 13:Serial.println("theaterChaseRainbow");theaterChaseRainbow(50);break;case 14:Serial.println("Fire");Fire(55, 120, 15);break;case 15:Serial.println("BouncingBalls");meteorRain(0xff, 0xff, 0xff, 10, 64, true, 30);break;case 16:Serial.println("meteorRain");meteorRain(0xff, 0xff, 0xff, 10, 64, true, 30);break;case 17:Serial.println("Red");setAll(255, 0, 0);break;case 18:Serial.println("Green");setAll(0, 255, 0);break;case 19:Serial.println("Blue");setAll(0, 0, 255);break;case 20:Serial.println("ON");randommod = random(1, 19);switch (randommod) {case 1:Serial.println("RGBLoop");RGBLoop();break;case 2:Serial.println("Strobe");Strobe(0xff, 0xff, 0xff, 10, 50, 1000);break;case 3:Serial.println("HalloweenEyes");HalloweenEyes(0xff, 0x00, 0x00, 1, 4, true, random(5, 50), random(10, 50), random(50, 300));break;case 4:Serial.println("NewKITT RightToLeft");NewKITT(0xff, 0, 0, 8, 10, 50);break;case 5:Serial.println("Twinkle");Twinkle(0xff, 0, 0, 10, 100, false);break;case 6:Serial.println("TwinkleRandom");Twinkle(0xff, 0, 0, 10, 100, false);break;case 7:Serial.println("Sparkle");Sparkle(0xff, 0xff, 0xff, 0);break;case 8:Serial.println("SnowSparkle");SnowSparkle(0x10, 0x10, 0x10, 20, random(100, 1000));break;case 9:Serial.println("RunningLights");RunningLights(0xff, 0xff, 0x00, 50);break;case 10:Serial.println("colorWipe");colorWipe(0x00, 0xff, 0x00, 50);colorWipe(0xff, 0x00, 0x00, 50);break;case 11:Serial.println("rainbowCycle");rainbowCycle(20);break;case 12:Serial.println("theaterChase");theaterChase(0xff, 0, 0, 50);break;case 13:Serial.println("theaterChaseRainbow");theaterChaseRainbow(50);break;case 14:Serial.println("Fire");Fire(55, 120, 15);break;case 15:Serial.println("BouncingBalls");meteorRain(0xff, 0xff, 0xff, 10, 64, true, 30);break;case 16:Serial.println("meteorRain");meteorRain(0xff, 0xff, 0xff, 10, 64, true, 30);break;case 17:Serial.println("Red");setAll(255, 0, 0);break;case 18:Serial.println("Green");setAll(0, 255, 0);break;case 19:Serial.println("Blue");setAll(0, 0, 255);break;}break;case 21:Serial.println("OFF");setAll(0, 0, 0);break;default://Serial.println("Red");setAll(255, 0, 0);break;}
}
void meteorRain(byte red, byte green, byte blue, byte meteorSize, byte meteorTrailDecay, boolean meteorRandomDecay, int SpeedDelay) {setAll(0, 0, 0);for (int i = 0; i < NUM_LEDS + NUM_LEDS; i++) {// fade brightness all LEDs one stepfor (int j = 0; j < NUM_LEDS; j++) {if ( (!meteorRandomDecay) || (random(10) > 5) ) {fadeToBlack(j, meteorTrailDecay );}if (serialEvent() != false) break;}// draw meteorfor (int j = 0; j < meteorSize; j++) {if ( ( i - j < NUM_LEDS) && (i - j >= 0) ) {setPixel(i - j, red, green, blue);}if (serialEvent() != false) break;}showStrip();delay(SpeedDelay);if (serialEvent() != false) break;}
}void fadeToBlack(int ledNo, byte fadeValue) {
#ifdef ADAFRUIT_NEOPIXEL_H// NeoPixeluint32_t oldColor;uint8_t r, g, b;int value;oldColor = strip.getPixelColor(ledNo);r = (oldColor & 0x00ff0000UL) >> 16;g = (oldColor & 0x0000ff00UL) >> 8;b = (oldColor & 0x000000ffUL);r = (r <= 10) ? 0 : (int) r - (r * fadeValue / 256);g = (g <= 10) ? 0 : (int) g - (g * fadeValue / 256);b = (b <= 10) ? 0 : (int) b - (b * fadeValue / 256);strip.setPixelColor(ledNo, r, g, b);
#endif
#ifndef ADAFRUIT_NEOPIXEL_H// FastLEDleds[ledNo].fadeToBlackBy( fadeValue );
#endif
}
void BouncingBalls(byte red, byte green, byte blue, int BallCount) {float Gravity = -9.81;int StartHeight = 1;float Height[BallCount];float ImpactVelocityStart = sqrt( -2 * Gravity * StartHeight );float ImpactVelocity[BallCount];float TimeSinceLastBounce[BallCount];int   Position[BallCount];long  ClockTimeSinceLastBounce[BallCount];float Dampening[BallCount];for (int i = 0 ; i < BallCount ; i++) {ClockTimeSinceLastBounce[i] = millis();Height[i] = StartHeight;Position[i] = 0;ImpactVelocity[i] = ImpactVelocityStart;TimeSinceLastBounce[i] = 0;Dampening[i] = 0.90 - float(i) / pow(BallCount, 2);if (serialEvent() != false) break;}while (true) {for (int i = 0 ; i < BallCount ; i++) {TimeSinceLastBounce[i] =  millis() - ClockTimeSinceLastBounce[i];Height[i] = 0.5 * Gravity * pow( TimeSinceLastBounce[i] / 1000 , 2.0 ) + ImpactVelocity[i] * TimeSinceLastBounce[i] / 1000;if ( Height[i] < 0 ) {Height[i] = 0;ImpactVelocity[i] = Dampening[i] * ImpactVelocity[i];ClockTimeSinceLastBounce[i] = millis();if ( ImpactVelocity[i] < 0.01 ) {ImpactVelocity[i] = ImpactVelocityStart;}}Position[i] = round( Height[i] * (NUM_LEDS - 1) / StartHeight);if (serialEvent() != false) break;}for (int i = 0 ; i < BallCount ; i++) {setPixel(Position[i], red, green, blue);if (serialEvent() != false) break;}showStrip();setAll(0, 0, 0);if (serialEvent() != false) break;}
}
void Fire(int Cooling, int Sparking, int SpeedDelay) {static byte heat[NUM_LEDS];int cooldown;for ( int i = 0; i < NUM_LEDS; i++) {cooldown = random(0, ((Cooling * 10) / NUM_LEDS) + 2);if (cooldown > heat[i]) {heat[i] = 0;} else {heat[i] = heat[i] - cooldown;}if (serialEvent() != false) break;}for ( int k = NUM_LEDS - 1; k >= 2; k--) {heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;if (serialEvent() != false) break;}if ( random(255) < Sparking ) {int y = random(7);heat[y] = heat[y] + random(160, 255);}for ( int j = 0; j < NUM_LEDS; j++) {setPixelHeatColor(j, heat[j] );if (serialEvent() != false) break;}showStrip();delay(SpeedDelay);
}void setPixelHeatColor (int Pixel, byte temperature) {byte t192 = round((temperature / 255.0) * 191);byte heatramp = t192 & 0x3F; // 0..63heatramp <<= 2; // scale up to 0..252if ( t192 > 0x80) {                    // hottestsetPixel(Pixel, 255, 255, heatramp);} else if ( t192 > 0x40 ) {            // middlesetPixel(Pixel, 255, heatramp, 0);} else {                               // coolestsetPixel(Pixel, heatramp, 0, 0);}
}
void theaterChaseRainbow(int SpeedDelay) {byte *c;for (int j = 0; j < 256; j++) {for (int q = 0; q < 3; q++) {for (int i = 0; i < NUM_LEDS; i = i + 3) {c = Wheel( (i + j) % 255);setPixel(i + q, *c, *(c + 1), *(c + 2));if (serialEvent() != false) break;}showStrip();delay(SpeedDelay);for (int i = 0; i < NUM_LEDS; i = i + 3) {setPixel(i + q, 0, 0, 0);if (serialEvent() != false) break;}if (serialEvent() != false) break;}if (serialEvent() != false) break;}
}
void theaterChase(byte red, byte green, byte blue, int SpeedDelay) {for (int j = 0; j < 10; j++) {for (int q = 0; q < 3; q++) {for (int i = 0; i < NUM_LEDS; i = i + 3) {setPixel(i + q, red, green, blue);if (serialEvent() != false) break;}showStrip();delay(SpeedDelay);for (int i = 0; i < NUM_LEDS; i = i + 3) {setPixel(i + q, 0, 0, 0);if (serialEvent() != false) break;}if (serialEvent() != false) break;}if (serialEvent() != false) break;}
}
void rainbowCycle(int SpeedDelay) {byte *c;uint16_t i, j;for (j = 0; j < 256 * 5; j++) {for (i = 0; i < NUM_LEDS; i++) {c = Wheel(((i * 256 / NUM_LEDS) + j) & 255);setPixel(i, *c, *(c + 1), *(c + 2));if (serialEvent() != false) break;}showStrip();delay(SpeedDelay);if (serialEvent() != false) break;}
}byte * Wheel(byte WheelPos) {static byte c[3];if (WheelPos < 85) {c[0] = WheelPos * 3;c[1] = 255 - WheelPos * 3;c[2] = 0;} else if (WheelPos < 170) {WheelPos -= 85;c[0] = 255 - WheelPos * 3;c[1] = 0;c[2] = WheelPos * 3;} else {WheelPos -= 170;c[0] = 0;c[1] = WheelPos * 3;c[2] = 255 - WheelPos * 3;}return c;
}
void colorWipe(byte red, byte green, byte blue, int SpeedDelay) {for (uint16_t i = 0; i < NUM_LEDS; i++) {setPixel(i, red, green, blue);showStrip();delay(SpeedDelay);if (serialEvent() != false) break;}
}
void RunningLights(byte red, byte green, byte blue, int WaveDelay) {int Position = 0;for (int j = 0; j < NUM_LEDS * 2; j++){Position++; // = 0; //Position + Rate;for (int i = 0; i < NUM_LEDS; i++) {// sine wave, 3 offset waves make a rainbow!//float level = sin(i+Position) * 127 + 128;//setPixel(i,level,0,0);//float level = sin(i+Position) * 127 + 128;setPixel(i, ((sin(i + Position) * 127 + 128) / 255)*red,((sin(i + Position) * 127 + 128) / 255)*green,((sin(i + Position) * 127 + 128) / 255)*blue);if (serialEvent() != false) break;}showStrip();delay(WaveDelay);if (serialEvent() != false) break;}
}
void SnowSparkle(byte red, byte green, byte blue, int SparkleDelay, int SpeedDelay) {setAll(red, green, blue);int Pixel = random(NUM_LEDS);setPixel(Pixel, 0xff, 0xff, 0xff);showStrip();delay(SparkleDelay);setPixel(Pixel, red, green, blue);showStrip();delay(SpeedDelay);
}
void Sparkle(byte red, byte green, byte blue, int SpeedDelay) {int Pixel = random(NUM_LEDS);setPixel(Pixel, red, green, blue);showStrip();delay(SpeedDelay);setPixel(Pixel, 0, 0, 0);
}
void TwinkleRandom(int Count, int SpeedDelay, boolean OnlyOne) {setAll(0, 0, 0);for (int i = 0; i < Count; i++) {setPixel(random(NUM_LEDS), random(0, 255), random(0, 255), random(0, 255));showStrip();delay(SpeedDelay);if (OnlyOne) {setAll(0, 0, 0);}if (serialEvent() != false) break;}delay(SpeedDelay);
}
void Twinkle(byte red, byte green, byte blue, int Count, int SpeedDelay, boolean OnlyOne) {setAll(0, 0, 0);for (int i = 0; i < Count; i++) {setPixel(random(NUM_LEDS), red, green, blue);showStrip();delay(SpeedDelay);if (OnlyOne) {setAll(0, 0, 0);}if (serialEvent() != false) break;}delay(SpeedDelay);
}
void NewKITT(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {RightToLeft(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);LeftToRight(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);/*OutsideToCenter(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);CenterToOutside(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);LeftToRight(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);RightToLeft(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);OutsideToCenter(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);CenterToOutside(red, green, blue, EyeSize, SpeedDelay, ReturnDelay);*/
}void CenterToOutside(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {for (int i = ((NUM_LEDS - EyeSize) / 2); i >= 0; i--) {setAll(0, 0, 0);setPixel(i, red / 10, green / 10, blue / 10);for (int j = 1; j <= EyeSize; j++) {setPixel(i + j, red, green, blue);if (serialEvent() != false) break;}setPixel(i + EyeSize + 1, red / 10, green / 10, blue / 10);setPixel(NUM_LEDS - i, red / 10, green / 10, blue / 10);for (int j = 1; j <= EyeSize; j++) {setPixel(NUM_LEDS - i - j, red, green, blue);if (serialEvent() != false) break;}setPixel(NUM_LEDS - i - EyeSize - 1, red / 10, green / 10, blue / 10);showStrip();delay(SpeedDelay);if (serialEvent() != false) break;}delay(ReturnDelay);
}void OutsideToCenter(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {for (int i = 0; i <= ((NUM_LEDS - EyeSize) / 2); i++) {setAll(0, 0, 0);setPixel(i, red / 10, green / 10, blue / 10);for (int j = 1; j <= EyeSize; j++) {setPixel(i + j, red, green, blue);if (serialEvent() != false) break;}setPixel(i + EyeSize + 1, red / 10, green / 10, blue / 10);setPixel(NUM_LEDS - i, red / 10, green / 10, blue / 10);for (int j = 1; j <= EyeSize; j++) {setPixel(NUM_LEDS - i - j, red, green, blue);if (serialEvent() != false) break;}setPixel(NUM_LEDS - i - EyeSize - 1, red / 10, green / 10, blue / 10);showStrip();delay(SpeedDelay);if (serialEvent() != false) break;}delay(ReturnDelay);
}void LeftToRight(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {for (int i = 0; i < NUM_LEDS - EyeSize - 2; i++) {setAll(0, 0, 0);setPixel(i, red / 10, green / 10, blue / 10);for (int j = 1; j <= EyeSize; j++) {setPixel(i + j, red, green, blue);if (serialEvent() != false) break;;}setPixel(i + EyeSize + 1, red / 10, green / 10, blue / 10);showStrip();delay(SpeedDelay);if (serialEvent() != false) break;}delay(ReturnDelay);
}void RightToLeft(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {for (int i = NUM_LEDS - EyeSize - 2; i > 0; i--) {setAll(0, 0, 0);setPixel(i, red / 10, green / 10, blue / 10);for (int j = 1; j <= EyeSize; j++) {setPixel(i + j, red, green, blue);if (serialEvent() != false) break;}setPixel(i + EyeSize + 1, red / 10, green / 10, blue / 10);showStrip();delay(SpeedDelay);if (serialEvent() != false) break;}delay(ReturnDelay);
}
void HalloweenEyes(byte red, byte green, byte blue, int EyeWidth, int EyeSpace, boolean Fade, int Steps, int FadeDelay, int EndPause) {randomSeed(analogRead(0));int i;int StartPoint  = random( 0, NUM_LEDS - (2 * EyeWidth) - EyeSpace );int Start2ndEye = StartPoint + EyeWidth + EyeSpace;for (i = 0; i < EyeWidth; i++) {setPixel(StartPoint + i, red, green, blue);setPixel(Start2ndEye + i, red, green, blue);if (serialEvent() != false) break;}showStrip();if (Fade == true) {float r, g, b;for (int j = Steps; j >= 0; j--) {r = j * (red / Steps);g = j * (green / Steps);b = j * (blue / Steps);for (i = 0; i < EyeWidth; i++) {setPixel(StartPoint + i, r, g, b);setPixel(Start2ndEye + i, r, g, b);if (serialEvent() != false) break;}showStrip();delay(FadeDelay);if (serialEvent() != false) break;}}setAll(0, 0, 0); // Set all blackdelay(EndPause);
}
void Strobe(byte red, byte green, byte blue, int StrobeCount, int FlashDelay, int EndPause) {for (int j = 0; j < StrobeCount; j++) {setAll(red, green, blue);showStrip();delay(FlashDelay);setAll(0, 0, 0);showStrip();delay(FlashDelay);if (serialEvent() != false) break;}delay(EndPause);
}
void RGBLoop() {for (int j = 0; j < 3; j++ ) {// Fade INfor (int k = 0; k < 256; k++) {switch (j) {case 0: setAll(k, 0, 0); if (serialEvent() != false) break; break;case 1: setAll(0, k, 0); if (serialEvent() != false) break; break;case 2: setAll(0, 0, k); if (serialEvent() != false) break; break;}showStrip();if (serialEvent() != false)break;}// Fade OUTfor (int k = 255; k >= 0; k--) {switch (j) {case 0: setAll(k, 0, 0); if (serialEvent() != false) break; break;case 1: setAll(0, k, 0); if (serialEvent() != false) break; break;case 2: setAll(0, 0, k); if (serialEvent() != false) break; break;}showStrip();if (serialEvent() != false)break;}if (serialEvent() != false)break;}
}
void showStrip() {
#ifdef ADAFRUIT_NEOPIXEL_H// NeoPixelstrip.show();
#endif
#ifndef ADAFRUIT_NEOPIXEL_H// FastLEDFastLED.show();
#endif
}void setPixel(int Pixel, byte red, byte green, byte blue) {
#ifdef ADAFRUIT_NEOPIXEL_H// NeoPixelstrip.setPixelColor(Pixel, strip.Color(red, green, blue));
#endif
#ifndef ADAFRUIT_NEOPIXEL_H// FastLEDleds[Pixel].r = red;leds[Pixel].g = green;leds[Pixel].b = blue;
#endif
}void setAll(byte red, byte green, byte blue) {for (int i = 0; i < NUM_LEDS; i++ ) {setPixel(i, red, green, blue);}showStrip();
}
bool serialEvent() {if (Serial.available()) {veri = Serial.readString();if (veri.charAt(0) == 'b') {veri = veri.substring(1, 4);parlaklik = veri.toInt();parlaklik = map(parlaklik, 0, 100, 0, 255);strip.setBrightness(parlaklik);}else {mod = veri.toInt();return true;}}return false;
}

实验串口返回情况


串口输入20,随机显示不同效果

使用PC端控制软件,有二种控制WS2812B的方式
1、连接串口后,在底部窗口输入1-21,转换显示效果

2、点击16个效果按钮

Arduino实验场景图




更多推荐

【雕爷学编程】Arduino动手做(199)

本文发布于:2024-03-10 12:07:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1727921.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:动手做   雕爷学   Arduino

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!