#include "Adafruit_NeoPixel.h"
// 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)
Adafruit_NeoPixel strip1(108, 2, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip2(108, 3, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip3(40, 4, NEO_GRB + NEO_KHZ800);
unsigned long Time_old = 0;
void setup()
{
strip1.begin();
strip2.begin();
strip3.begin();
strip1.show();
strip2.show();
strip3.show();
strip1.clear(); //全灭
strip2.clear(); //全灭
strip3.clear(); //全灭
strip1.setBrightness(255);//0-255
strip2.setBrightness(255);
strip3.setBrightness(0);
Serial.begin(115200);
}
void loop() {
unsigned long currentTime = millis();
if((currentTime-Time_old) >= 10)
{
Serial.println((currentTime-Time_old));
Time_old = currentTime;
Ws2812_strip1();
Ws2812_strip2();
Ws2812_strip3();
}
}
void Ws2812_strip1()
{
static uint8_t Light_count = 0;
static int8_t Light_count_old = -1;
static uint16_t delay_count = 0;
static uint16_t delay1_count = 0;
static float Brightness = 0.0f;
static uint8_t Brightness_flag = 0;
static uint8_t sw_flag = 0;
if(Light_count_old != Light_count)
{
if(Light_count <= 7)
{
strip1.setPixelColor(Light_count, strip1.Color(0, 255, 0));
}
else if((Light_count >= 8)&&(Light_count <= 61))
{
if((Light_count % 2) == 1)
{
strip1.setPixelColor(Light_count, strip1.Color(255, 0, 0));
}
else
{
strip1.setPixelColor(Light_count, strip1.Color(0, 255, 0));
}
}
else if((Light_count >= 62)&&(Light_count <= 79))
{
strip1.setPixelColor(Light_count, strip1.Color(255, 68+((Light_count-62)*11), 0));
}
else if((Light_count >= 80)&&(Light_count <= 107))
{
strip1.setPixelColor(Light_count, strip1.Color(255, 255, 20));
}
else
{
strip1.clear(); //全灭
Light_count = 0;
Brightness_flag = 0;
Brightness = 0;
sw_flag = 0;
}
}
if(Light_count >= 8)
{
if(Brightness_flag == 0)
{
Brightness += 3.3;
if(Brightness > 248)
{
Brightness_flag = 1;
}
}
else if(Brightness_flag == 1)
{
Brightness -= 3.3;
if(Brightness <= 4)
{
Brightness_flag = 0;
sw_flag = !sw_flag;
}
}
for(int i = 8;((i <= Light_count)&&(i <= 61)); i++)
{
if(sw_flag == 1)
{
if(i%2 == 0)
{
strip1.setPixelColor(i, strip1.Color(((255*(uint8_t)Brightness)>>8), 0, 0));
}
else
{
strip1.setPixelColor(i, strip1.Color(0, ((255*(uint8_t)Brightness)>>8), 0));
}
}
else if(sw_flag == 0)
{
if(i%2 == 0)
{
strip1.setPixelColor(i, strip1.Color(0, ((255*(uint8_t)Brightness)>>8), 0));
}
else
{
strip1.setPixelColor(i, strip1.Color(((255*(uint8_t)Brightness)>>8), 0, 0));
}
}
}
}
delay_count++;
if(delay_count >= 19)
{
delay_count = 0;
Light_count++;
}
strip1.show();
}
void Ws2812_strip2()
{
static uint8_t Light_count = 0;
static int8_t Light_count_old = -1;
static uint16_t delay_count = 0;
static uint16_t delay1_count = 0;
static float Brightness = 0.0f;
static uint8_t Brightness_flag = 0;
static uint8_t sw_flag = 0;
if(Light_count_old != Light_count)
{
if(Light_count <= 7)
{
strip2.setPixelColor(Light_count, strip2.Color(255, 0, 0));
}
else if((Light_count >= 8)&&(Light_count <= 61))
{
if((Light_count % 2) == 0)
{
strip2.setPixelColor(Light_count, strip2.Color(255, 0, 0));
}
else
{
strip2.setPixelColor(Light_count, strip2.Color(0, 255, 0));
}
}
else if((Light_count >= 62)&&(Light_count <= 79))
{
strip2.setPixelColor(Light_count, strip2.Color(255, 68+((Light_count-62)*11), 0));
}
else if((Light_count >= 80)&&(Light_count <= 107))
{
strip2.setPixelColor(Light_count, strip2.Color(255, 255, 20));
}
else
{
strip2.clear(); //全灭
Light_count = 0;
Brightness_flag = 0;
Brightness = 0;
sw_flag = 0;
}
}
if(Light_count >= 8)
{
if(Brightness_flag == 0)
{
Brightness += 3.3;
if(Brightness > 248)
{
Brightness_flag = 1;
}
}
else if(Brightness_flag == 1)
{
Brightness -= 3.3;
if(Brightness <= 4)
{
Brightness_flag = 0;
sw_flag = !sw_flag;
}
}
for(int i = 8;((i <= Light_count)&&(i <= 61)); i++)
{
if(sw_flag == 0)
{
if(i%2 == 0)
{
strip2.setPixelColor(i, strip2.Color(((255*(uint8_t)Brightness)>>8), 0, 0));
}
else
{
strip2.setPixelColor(i, strip2.Color(0, ((255*(uint8_t)Brightness)>>8), 0));
}
}
else if(sw_flag == 1)
{
if(i%2 == 0)
{
strip2.setPixelColor(i, strip2.Color(0, ((255*(uint8_t)Brightness)>>8), 0));
}
else
{
strip2.setPixelColor(i, strip2.Color(((255*(uint8_t)Brightness)>>8), 0, 0));
}
}
}
}
delay_count++;
if(delay_count >= 19)
{
delay_count = 0;
Light_count++;
}
strip2.show();
}
void Ws2812_strip3()
{
static uint8_t state_count = 0;
static float Brightness = 0.0f;
static uint16_t delay_count = 0;
switch(state_count)
{
case 0: //1-20渐亮
strip3.fill(strip3.Color(255, 255, 255), 0, 19);//1-20白色
strip3.fill(strip3.Color(0, 0, 0), 20,39);//21-40熄灭
Brightness += 2.4f;
if(Brightness >= 250)
{
state_count = 1;
}
strip3.setBrightness((uint8_t)Brightness);
strip3.show();
break;
case 1: //渐灭
strip3.fill(strip3.Color(255, 255, 255), 0, 19);//1-20白色
strip3.fill(strip3.Color(0, 0, 0), 20,39);//21-40熄灭
Brightness -= 2.4f;
if(Brightness <= 3)
{
state_count = 2;
}
strip3.setBrightness((uint8_t)Brightness);
strip3.show();
break;
case 2: //21-40渐亮
strip3.fill(strip3.Color(0, 0, 0), 0, 19);//1-20熄灭
strip3.fill(strip3.Color(255, 255, 255), 20,39);//21-40白色
Brightness += 2.4f;
if(Brightness >= 250)
{
state_count = 3;
}
strip3.setBrightness((uint8_t)Brightness);
strip3.show();
break;
case 3: //21-40渐灭
strip3.fill(strip3.Color(0, 0, 0), 0, 19);//1-20熄灭
strip3.fill(strip3.Color(255, 255, 255), 20,39);//21-40白色
Brightness -= 2.4f;
if(Brightness <= 3)
{
state_count = 0;
}
strip3.setBrightness((uint8_t)Brightness);
strip3.show();
break;
default:
delay_count = 0;
Brightness = 0;
state_count = 0;
break;
}
}