I've sketched a breathing code. Take a look (:
Strip can fade in and out or stay lit for awhile before fading and you can set how many loops for each color. Plus it doesn't use complex calculation that I don't understand xD
Most of the code were found on the net and put together with some tweaks here and there.
Let me know what you guys think, this is my very first project. Does everything looks good and can it be refined and made simpler?
Code: Select all
#include <Adafruit_NeoPixel.h>
#define PIN 12
#define NUMPIXEL 30 //how many pixel on the strip.
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXEL, PIN, NEO_GRB + NEO_KHZ800);
int MinBrightness = 30; //value 0-255
int MaxBrightness = 170; //value 0-255--equation (maxBrightness*maxBrightness/255) hence maxBrightness^2/255 hence the value 170 actually equal to 113.33333 .
int numLoops1 = 4;
int numLoops2 = 2;
int numLoops3 = 5;
int numLoops4 = 3; //add new integer and value for different colors if needed.
int fadeHoldWait = 300; //how many steps to stay lit before dimming again.
int fadeInWait = 15; //lighting up speed, steps.
int fadeOutWait = 30; //dimming speed, steps.
//---------------------------------------------------------------------------------------------------//
void setup() {
strip.begin();
strip.show();
}
void loop() {
//---strip will stay lit for some time before dimming again.----
rgbFadeIn_Hold_Out(strip.Color(255,0,0),numLoops1); //red.
rainbowFadeIn_Hold_Out(numLoops2);
//---normal breathing.----
rgbFadeInOut(strip.Color(60,255,0),numLoops3); //green.
rainbowFadeInOut(numLoops4);
}
void rgbFadeIn_Hold_Out(uint32_t c, uint8_t x) {
for (int j=0;j<x;j++){
for(uint8_t b=MinBrightness;b<MaxBrightness;b++){
strip.setBrightness(b*MaxBrightness/255);
for (uint16_t i=0;i<strip.numPixels();i++){
strip.setPixelColor(i,c);
}
strip.show();
delay(fadeInWait);
}
strip.setBrightness(MaxBrightness*MaxBrightness/255);
for (uint16_t i=0;i<strip.numPixels();i++){
strip.setPixelColor(i,c);
strip.show();
delay(fadeHoldWait);
}
for(uint8_t b=MaxBrightness;b>MinBrightness;b--){
strip.setBrightness(b*MaxBrightness/255);
for (uint16_t i=0;i<strip.numPixels();i++){
strip.setPixelColor(i,c);
}
strip.show();
delay(fadeOutWait);
}
}
}
void rainbowFadeIn_Hold_Out(uint8_t x) {
for (int j=0;j<x;j++){
for(uint8_t b=MinBrightness;b<MaxBrightness;b++){
strip.setBrightness(b*MaxBrightness/255);
for (uint8_t i=0;i<strip.numPixels();i++){
strip.setPixelColor(i,Wheel(i*256/strip.numPixels()));
}
strip.show();
delay(fadeInWait);
}
strip.setBrightness(MaxBrightness*MaxBrightness/255);
for(uint8_t i=0;i<strip.numPixels();i++){
strip.setPixelColor(i,Wheel(i*256/strip.numPixels()));
strip.show();
delay(fadeHoldWait);
}
for (uint8_t b=MaxBrightness;b>MinBrightness;b--){
strip.setBrightness(b*MaxBrightness/255);
for(uint8_t i=0;i<strip.numPixels();i++) {
strip.setPixelColor(i,Wheel(i*256/strip.numPixels()));
}
strip.show();
delay(fadeOutWait);
}
}
}
void rgbFadeInOut(uint32_t c, uint8_t x){
for(int j=0;j<x;j++){
for(uint8_t b=MinBrightness;b<MaxBrightness;b++){
strip.setBrightness(b*MaxBrightness/255);
for(uint16_t i=0;i<strip.numPixels();i++){
strip.setPixelColor(i,c);
}
strip.show();
delay(fadeInWait);
}
for(uint8_t b=MaxBrightness;b>MinBrightness;b--) {
strip.setBrightness(b*MaxBrightness/255);
for (uint16_t i=0;i<strip.numPixels();i++) {
strip.setPixelColor(i,c);
}
strip.show();
delay(fadeOutWait);
}
}
}
void rainbowFadeInOut(uint8_t x){
for(int j=0;j<x;j++){
for(uint8_t b=MinBrightness;b<MaxBrightness;b++){
strip.setBrightness(b*MaxBrightness/255);
for(uint8_t i=0;i<strip.numPixels();i++){
strip.setPixelColor(i,Wheel(i*256/strip.numPixels()));
}
strip.show();
delay(fadeInWait);
}
for(uint8_t b=MaxBrightness;b>MinBrightness;b--) {
strip.setBrightness(b*MaxBrightness/255);
for (uint8_t i=0;i<strip.numPixels();i++) {
strip.setPixelColor(i,Wheel(i*256/strip.numPixels()));
}
strip.show();
delay(fadeOutWait);
}
}
}
//NeoPixel Wheel for Rainbow-----------------
uint32_t Wheel(byte WheelPos) {
WheelPos = 127 - WheelPos; //the value here means - for 255 the strip will starts with red, 127-red will be in the middle, 0 - strip ends with red.
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}