ws2812b效果研究之一 cylon
名字来源于经典科幻系列《太空堡垒卡拉狄加》中机器人的眼部扫描效果。这个效果通常表现为灯光在LED灯带上来回移动,像一只眼睛在扫描一样。其实感觉就是流水灯的效果
平台是atmega 2560,三个引脚分别是vcc,gnd和信号引脚
对应于arduino中的fastled库中的cylon例子
简单的版本(跑马灯)
#include <FastLED.h>
#define NUM_LEDS 100 // LED灯数量
#define DATA_PIN 2 // 连接到LED数据引脚的Arduino引脚
CRGB leds[NUM_LEDS]; // 定义LED数组
void setup() {
//FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS); // 初始化LED灯带
FastLED.addLeds<WS2812,DATA_PIN,RGB>(leds,NUM_LEDS);
}
void loop() {
cylonEffect(255, 0, 0, 10); // 红色的Cylon效果,亮度255,延时50ms
}
void cylonEffect(uint8_t r, uint8_t g, uint8_t b, uint8_t wait) {
// 从左到右逐个点亮LED
for (int i = 2; i < NUM_LEDS-2; i++) {
leds[i-2] = CRGB(r/3, g, b);
leds[i-1] = CRGB(r/2, g, b);
leds[i] = CRGB(r, g, b); // 设置当前LED的颜色
leds[i+1] = CRGB(r/2, g, b);
leds[i+2] = CRGB(r/3, g, b);
FastLED.show(); // 更新显示
delay(wait); // 延时以控制移动速度
leds[i-2] = CRGB(0, 0, 0);
leds[i-1] = CRGB(0, 0, 0);
leds[i] = CRGB(0, 0, 0); // 关闭当前LED以实现“流动”效果
leds[i+1] = CRGB(0, 0, 0);
leds[i+2] = CRGB(0, 0, 0);
}
#if 1
// 从右到左逐个点亮LED
for (int i = NUM_LEDS - 1; i >= 0; i--) {
leds[i] = CRGB(r, g, b);
FastLED.show();
delay(wait);
leds[i] = CRGB(0, 0, 0);
}