2018-11-23 00:17:30 +00:00
|
|
|
#include <FastLED.h>
|
|
|
|
|
2019-06-10 22:17:30 +01:00
|
|
|
FASTLED_USING_NAMESPACE
|
|
|
|
|
2018-11-23 00:17:30 +00:00
|
|
|
#define NUM_LEDS 292 //how many leds
|
|
|
|
#define DATA_PIN 21 //data min, hint: 21
|
|
|
|
|
|
|
|
#define Diff 8;
|
2019-06-10 22:17:30 +01:00
|
|
|
#define HSVDiff 2;
|
2018-11-23 00:17:30 +00:00
|
|
|
|
|
|
|
//Brightness & RGB pins
|
|
|
|
#define BriPls 2
|
|
|
|
#define BriMin 3
|
|
|
|
#define BriRst 4
|
|
|
|
|
2019-06-10 22:17:30 +01:00
|
|
|
#define btn11 5
|
|
|
|
#define btn12 6
|
|
|
|
#define btn13 7
|
|
|
|
|
|
|
|
#define btn21 8
|
|
|
|
#define btn22 9
|
|
|
|
#define btn23 10
|
2018-11-23 00:17:30 +00:00
|
|
|
|
2019-06-10 22:17:30 +01:00
|
|
|
#define btn31 16
|
|
|
|
#define btn32 14
|
|
|
|
#define btn33 15
|
2018-11-23 00:17:30 +00:00
|
|
|
|
2019-06-10 22:17:30 +01:00
|
|
|
#define btnDefault 18
|
|
|
|
#define btnModeBack 19
|
|
|
|
#define btnModeNext 20
|
2018-11-23 00:17:30 +00:00
|
|
|
|
2019-06-10 22:17:30 +01:00
|
|
|
#define FRAMES_PER_SECOND 120
|
2018-11-23 00:17:30 +00:00
|
|
|
|
|
|
|
int BriArr[] = {0, 2, 4, 8, 16, 32, 64, 128, 255};
|
|
|
|
int BriVal = 5;
|
|
|
|
int RedVal = 255;
|
|
|
|
int GrnVal = 255;
|
|
|
|
int BluVal = 255;
|
|
|
|
|
|
|
|
int HueVal = 0;
|
|
|
|
int SatVal = 255;
|
|
|
|
int ValVal = 255;
|
|
|
|
|
2019-06-10 22:17:30 +01:00
|
|
|
int mode = 1;
|
2019-06-10 22:23:09 +01:00
|
|
|
int nModes = 4; //total number of modes
|
2019-06-10 22:17:30 +01:00
|
|
|
|
|
|
|
uint8_t gHue = 0; // rotating "base color" used by many of the patterns
|
|
|
|
|
2018-11-23 00:17:30 +00:00
|
|
|
//buttons
|
|
|
|
long tm = 0;
|
|
|
|
long debounce = 200;
|
|
|
|
int reading;
|
|
|
|
int resp;
|
|
|
|
|
|
|
|
// This is an array of leds. One item for each led in your strip.
|
|
|
|
CRGB leds[NUM_LEDS];
|
|
|
|
|
|
|
|
void updateStripRGB(){
|
|
|
|
fill_solid(leds,NUM_LEDS,CRGB(RedVal,GrnVal,BluVal));
|
|
|
|
}
|
|
|
|
|
|
|
|
void updateStripHSV(){
|
|
|
|
fill_solid(leds,NUM_LEDS,CHSV(HueVal,SatVal,ValVal));
|
|
|
|
}
|
|
|
|
|
|
|
|
void updateStripBri(){
|
|
|
|
FastLED.setBrightness(BriArr[BriVal]);
|
|
|
|
}
|
|
|
|
|
|
|
|
void setPins(){
|
|
|
|
pinMode(BriPls, INPUT_PULLUP);
|
|
|
|
pinMode(BriMin, INPUT_PULLUP);
|
|
|
|
pinMode(BriRst, INPUT_PULLUP);
|
2019-06-10 22:17:30 +01:00
|
|
|
pinMode(btn11, INPUT_PULLUP);
|
|
|
|
pinMode(btn12, INPUT_PULLUP);
|
|
|
|
pinMode(btn13, INPUT_PULLUP);
|
|
|
|
pinMode(btn21, INPUT_PULLUP);
|
|
|
|
pinMode(btn22, INPUT_PULLUP);
|
|
|
|
pinMode(btn23, INPUT_PULLUP);
|
|
|
|
pinMode(btn31, INPUT_PULLUP);
|
|
|
|
pinMode(btn32, INPUT_PULLUP);
|
|
|
|
pinMode(btn33, INPUT_PULLUP);
|
|
|
|
pinMode(btnDefault, INPUT_PULLUP);
|
|
|
|
pinMode(btnModeBack, INPUT_PULLUP);
|
|
|
|
pinMode(btnModeNext, INPUT_PULLUP);
|
2018-11-23 00:17:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void setup() {
|
2019-06-10 22:17:30 +01:00
|
|
|
delay(1000);
|
2018-11-23 00:17:30 +00:00
|
|
|
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
|
|
|
|
updateStripRGB();
|
|
|
|
updateStripBri();
|
|
|
|
setPins();
|
|
|
|
}
|
|
|
|
|
|
|
|
//Brightness Functions
|
|
|
|
void incBri(){
|
|
|
|
BriVal++;
|
|
|
|
if(BriVal > 8){BriVal = 8;}
|
|
|
|
}
|
|
|
|
void decBri(){
|
|
|
|
BriVal--;
|
|
|
|
if(BriVal < 0){BriVal = 0;}
|
|
|
|
}
|
|
|
|
void rstBri(){
|
|
|
|
BriVal = 5;
|
|
|
|
}
|
|
|
|
//Red Functions
|
|
|
|
void incRed(){
|
|
|
|
RedVal += Diff;
|
|
|
|
if(RedVal > 255){RedVal = 255;}
|
|
|
|
}
|
|
|
|
void decRed(){
|
|
|
|
RedVal -= Diff;
|
|
|
|
if(RedVal < 0){RedVal = 0;}
|
|
|
|
}
|
|
|
|
void rstRed(){
|
|
|
|
RedVal = 255;
|
|
|
|
}
|
|
|
|
//Green Functions
|
|
|
|
void incGrn(){
|
|
|
|
GrnVal += Diff;
|
|
|
|
if(GrnVal > 255){GrnVal = 255;}
|
|
|
|
}
|
|
|
|
void decGrn(){
|
|
|
|
GrnVal -= Diff;
|
|
|
|
if(GrnVal < 0){GrnVal = 0;}
|
|
|
|
}
|
|
|
|
void rstGrn(){
|
|
|
|
GrnVal = 255;
|
|
|
|
}
|
|
|
|
//Blue Functions
|
|
|
|
void incBlu(){
|
|
|
|
BluVal += Diff;
|
|
|
|
if(BluVal > 255){BluVal = 255;}
|
|
|
|
}
|
|
|
|
void decBlu(){
|
|
|
|
BluVal -= Diff;
|
|
|
|
if(BluVal < 0){BluVal = 0;}
|
|
|
|
}
|
|
|
|
void rstBlu(){
|
|
|
|
BluVal = 255;
|
|
|
|
}
|
|
|
|
//Hue Functions
|
|
|
|
void incHue(){
|
|
|
|
HueVal += HSVDiff;
|
|
|
|
}
|
|
|
|
void decHue(){
|
|
|
|
HueVal -= HSVDiff;
|
|
|
|
}
|
|
|
|
void rstHue(){
|
|
|
|
HueVal = 0;
|
|
|
|
}
|
2019-06-10 22:17:30 +01:00
|
|
|
//Mode Functions
|
|
|
|
void modeNext(){
|
|
|
|
mode++;
|
|
|
|
if(mode>nModes){mode = 1;}
|
|
|
|
}
|
|
|
|
void modeBack(){
|
|
|
|
mode--;
|
|
|
|
if(mode<1){mode = nModes;}
|
|
|
|
}
|
|
|
|
void modeRst(){
|
|
|
|
mode = 0;
|
|
|
|
}
|
2018-11-23 00:17:30 +00:00
|
|
|
//READ PRESSED BUTTON
|
|
|
|
int getBtn(){
|
|
|
|
//Serial.println(digitalRead(BriMin));
|
|
|
|
if(digitalRead(BriPls) == LOW && millis() - tm > debounce){
|
2019-06-10 22:17:30 +01:00
|
|
|
//Bri+
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 1;
|
|
|
|
}else if(digitalRead(BriMin) == LOW && millis() - tm > debounce){
|
2019-06-10 22:17:30 +01:00
|
|
|
//Bri-
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 2;
|
|
|
|
}else if(digitalRead(BriRst) == LOW && millis() - tm > debounce){
|
2019-06-10 22:17:30 +01:00
|
|
|
//Bri Rst
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 3;
|
2019-06-10 22:17:30 +01:00
|
|
|
}else if(digitalRead(btn11) == LOW && millis() - tm > debounce){
|
|
|
|
//Red+
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 4;
|
2019-06-10 22:17:30 +01:00
|
|
|
}else if(digitalRead(btn12) == LOW && millis() - tm > debounce){
|
|
|
|
//Red-
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 5;
|
2019-06-10 22:17:30 +01:00
|
|
|
}else if(digitalRead(btn13) == LOW && millis() - tm > debounce){
|
|
|
|
//Red Rst
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 6;
|
2019-06-10 22:17:30 +01:00
|
|
|
}else if(digitalRead(btn21) == LOW && millis() - tm > debounce){
|
|
|
|
//Grn+
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 7;
|
2019-06-10 22:17:30 +01:00
|
|
|
}else if(digitalRead(btn22) == LOW && millis() - tm > debounce){
|
|
|
|
//Grn-
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 8;
|
2019-06-10 22:17:30 +01:00
|
|
|
}else if(digitalRead(btn23) == LOW && millis() - tm > debounce){
|
|
|
|
//Grn Rst
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 9;
|
2019-06-10 22:17:30 +01:00
|
|
|
}else if(digitalRead(btn31) == LOW && millis() - tm > debounce){
|
|
|
|
//Blu+
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 10;
|
2019-06-10 22:17:30 +01:00
|
|
|
}else if(digitalRead(btn32) == LOW && millis() - tm > debounce){
|
|
|
|
//Blu-
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 11;
|
2019-06-10 22:17:30 +01:00
|
|
|
}else if(digitalRead(btn33) == LOW && millis() - tm > debounce){
|
|
|
|
//Blu Rst
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 12;
|
2019-06-10 22:17:30 +01:00
|
|
|
}else if(digitalRead(btnDefault) == LOW && millis() - tm > debounce){
|
|
|
|
//Ext 1
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 13;
|
2019-06-10 22:17:30 +01:00
|
|
|
}else if(digitalRead(btnModeBack) == LOW && millis() - tm > debounce){
|
|
|
|
//Ext 2
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 14;
|
2019-06-10 22:17:30 +01:00
|
|
|
}else if(digitalRead(btnModeNext) == LOW && millis() - tm > debounce){
|
|
|
|
//Ext 3
|
2018-11-23 00:17:30 +00:00
|
|
|
tm = millis();
|
|
|
|
return 15;
|
|
|
|
}else{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-06-10 22:17:30 +01:00
|
|
|
void staticRGBMode(int mData){
|
|
|
|
switch(mData){
|
|
|
|
case 4:
|
|
|
|
incRed();
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
decRed();
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
rstRed();
|
|
|
|
break;
|
|
|
|
case 7:
|
|
|
|
incGrn();
|
|
|
|
break;
|
|
|
|
case 8:
|
|
|
|
decGrn();
|
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
rstGrn();
|
|
|
|
break;
|
|
|
|
case 10:
|
|
|
|
incBlu();
|
|
|
|
break;
|
|
|
|
case 11:
|
|
|
|
decBlu();
|
|
|
|
break;
|
|
|
|
case 12:
|
|
|
|
rstBlu();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
updateStripRGB();
|
|
|
|
}
|
|
|
|
|
|
|
|
void staticHSVMode(int mData){
|
|
|
|
switch(mData){
|
|
|
|
case 4:
|
|
|
|
incHue();
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
decHue();
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
rstHue();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
updateStripHSV();
|
|
|
|
}
|
|
|
|
|
|
|
|
void rainbowMode(int mData){
|
|
|
|
fill_rainbow( leds, NUM_LEDS, gHue);
|
|
|
|
gHue += 2;
|
|
|
|
}
|
|
|
|
|
2019-06-10 22:23:09 +01:00
|
|
|
void rebeccaMode(int mData){
|
|
|
|
fill_solid(leds,NUM_LEDS,CRGB(40,20,60));
|
|
|
|
}
|
|
|
|
|
2019-06-10 22:17:30 +01:00
|
|
|
void modeAction(int mData){
|
|
|
|
switch(mode){
|
|
|
|
case 1:
|
|
|
|
staticRGBMode(mData);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
staticHSVMode(mData);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
rainbowMode(mData);
|
|
|
|
break;
|
2019-06-10 22:23:09 +01:00
|
|
|
case 4:
|
|
|
|
rebeccaMode(mData);
|
|
|
|
break;
|
2019-06-10 22:17:30 +01:00
|
|
|
}
|
|
|
|
}
|
2018-11-23 00:17:30 +00:00
|
|
|
|
|
|
|
void loop() {
|
|
|
|
resp = getBtn();
|
|
|
|
switch(resp){
|
|
|
|
case 1:
|
|
|
|
incBri();
|
|
|
|
updateStripBri();
|
2019-06-10 22:17:30 +01:00
|
|
|
modeAction(0);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
decBri();
|
|
|
|
updateStripBri();
|
2019-06-10 22:17:30 +01:00
|
|
|
modeAction(0);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
rstBri();
|
|
|
|
updateStripBri();
|
2019-06-10 22:17:30 +01:00
|
|
|
modeAction(0);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 4:
|
2019-06-10 22:17:30 +01:00
|
|
|
modeAction(resp);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 5:
|
2019-06-10 22:17:30 +01:00
|
|
|
modeAction(resp);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 6:
|
2019-06-10 22:17:30 +01:00
|
|
|
modeAction(resp);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 7:
|
2019-06-10 22:17:30 +01:00
|
|
|
modeAction(resp);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 8:
|
2019-06-10 22:17:30 +01:00
|
|
|
modeAction(resp);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 9:
|
2019-06-10 22:17:30 +01:00
|
|
|
modeAction(resp);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 10:
|
2019-06-10 22:17:30 +01:00
|
|
|
modeAction(resp);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 11:
|
2019-06-10 22:17:30 +01:00
|
|
|
modeAction(resp);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 12:
|
2019-06-10 22:17:30 +01:00
|
|
|
modeAction(resp);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 13:
|
2019-06-10 22:17:30 +01:00
|
|
|
modeRst();
|
|
|
|
modeAction(0);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 14:
|
2019-06-10 22:17:30 +01:00
|
|
|
modeBack();
|
|
|
|
modeAction(0);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
case 15:
|
2019-06-10 22:17:30 +01:00
|
|
|
modeNext();
|
|
|
|
modeAction(0);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
default:
|
2019-06-10 22:17:30 +01:00
|
|
|
modeAction(0);
|
2018-11-23 00:17:30 +00:00
|
|
|
break;
|
|
|
|
}
|
2019-06-10 22:17:30 +01:00
|
|
|
FastLED.show();
|
|
|
|
FastLED.delay(1000/FRAMES_PER_SECOND);
|
|
|
|
}
|