Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define R 3
- #define G 6
- #define B 5
- //define a max multiplier for brightness, between 0.0-1.0
- //usage: 255*brightness constant
- double MAX = 1.0;
- String colors = "";
- String prevCols = "";
- int prevR=0,prevG=0,prevB=0;
- bool valid = false;
- const int STEPS = 55;
- void setup(){
- pinMode(R,OUTPUT);
- pinMode(G,OUTPUT);
- pinMode(B,OUTPUT);
- Serial.begin(9600);
- setMax(1.0);
- //xoffwhite();
- }
- void loop(){
- //strobe(100);
- // pulse(0.2,0.4, 80);
- // red();
- // pulse2(0.5,1.0,30);
- // orange();
- //pulse(0.45,0.8,20);
- //pulse(0.4,1.0, 15);
- //pulse(0.45,1.0, 10);
- //keep it to four beats for 1 second
- //5 beats is usually house music
- //beats(".. . . .");
- //rainbow();
- //lightning();
- warm();
- //disco();
- }
- //int val(int col){return (int)((double)col*MAX);}
- int val(int col){return col*MAX;}
- void write(int r, int g, int b){
- //multipliers, 1 or -1
- int rMult=1,gMult=1,bMult=1; //set default as r>prevR
- if (prevR>r) rMult=-1;
- if (prevG>g) gMult=-1;
- if (prevB>b) bMult=-1;
- //differential
- int diffR = abs(prevR-r);
- int diffG = abs(prevG-g);
- int diffB = abs(prevB-b);
- //fade in 10 steps, 250ms total
- for (int i=1;i<=STEPS;i++){
- int tempR=prevR+(rMult*i*diffR/STEPS);
- int tempG=prevG+(gMult*i*diffG/STEPS);
- int tempB=prevB+(bMult*i*diffB/STEPS);
- rawWrite(tempR,tempG,tempB);
- delay(35);
- }
- prevR=r;
- prevG=g;
- prevB=b;
- //delay(1000);
- }
- void printRGB(int r, int g, int b){
- Serial.print("("); Serial.print (r);
- Serial.print(", "); Serial.print (g);
- Serial.print(", "); Serial.print (b);
- Serial.println(")");
- }
- void rawWrite(int r, int g, int b){
- //printRGB(val(r), val(g), val(b));
- analogWrite(R, val(r));
- analogWrite(G, val(g));
- analogWrite(B, val(b));
- }
- void setMax(double n){
- if (n>1.0) MAX = 1.0;
- else if (n<0.0) MAX = 0.1;
- else MAX = n;
- }
- //default colors with fade
- void white(){write(255,255,255);}
- void dark(){write(0,0,0);}
- void red(){write(255,0,0);}
- void green(){write(0,255,0);}
- void blue(){write(0,0,255);}
- void pink(){write(255,20,200);}
- void cyan(){write(0,255,255);}
- void purple(){write(160,32,240);}
- void yellow(){write(255,255,0);}
- void orange(){write(255,94,0);}
- //calm colors
- void offwhite(){write(255,150,80);}
- //lightning
- void darkblue(){write(20,0,100);}
- void darkpurple(){write(50,20,100);}
- void darkred(){write(50,0,75);}
- void almostdark(){rawWrite(0,0,0);}
- //colors without fade
- //default colors
- void xwhite(){rawWrite(255,255,255);}
- void xdark(){rawWrite(0,0,0);}
- void xred(){rawWrite(255,0,0);}
- void xgreen(){rawWrite(0,255,0);}
- void xblue(){rawWrite(0,0,255);}
- void xpink(){rawWrite(255,20,200);}
- void xcyan(){rawWrite(0,255,255);}
- void xpurple(){rawWrite(160,32,240);}
- void xyellow(){rawWrite(255,255,0);}
- void xorange(){rawWrite(255,94,0);}
- //calm colors
- void xoffwhite(){rawWrite(255,200,100);}
- void randColor(){
- int r = random(800);
- if (r<100) xwhite();
- else if (r<200) xorange();
- else if (r<300) xyellow();
- else if (r<400) xgreen();
- else if (r<500) xcyan();
- else if (r<600) xblue();
- else if (r<700) xpurple();
- else if (r<800) xpink();
- // switch(random(9)){
- // case 1: xwhite(); break;
- // case 2: xorange(); break;
- // case 3: xyellow(); break;
- // case 4: xgreen(); break;
- // case 5: xcyan(); break;
- // case 6: xblue(); break;
- // case 7: xpurple(); break;
- // case 8: xpink(); break;
- // default: xwhite(); break;
- // }
- }
- //COMBOS
- void rainbow(){
- red();
- orange();
- yellow();
- green();
- cyan();
- blue();
- purple();
- pink();
- }
- void warm(){
- red();
- orange();
- }
- void lightning(){
- int loops = random(20);
- for (int i=0;i<loops;i++){
- //float strength = random(10);
- darkblue();
- darkpurple();
- darkred();
- int flash_rate = random(1,5);
- if (i%flash_rate==0){
- //flash
- int flashes = random(2,6);
- for (int n = 0; n < flashes; n++){
- // float strength = random(4,10);
- //MAX = strength/10;
- xoffwhite();
- delay(50);
- almostdark();
- delay(50);
- }
- MAX = 1.0;
- }
- }
- }
- void pulse(double l, double h, int del){
- // offwhite();
- // dark();
- for (double i=l;i<h;i+=0.01){
- MAX = i;
- xpurple();
- //xorange();
- //xwhite();
- delay(del);
- }
- for (double i=h;i>l;i-=0.01){
- MAX = i;
- xpurple();
- //xorange();
- //xwhite();
- delay(del);
- }
- }
- void pulse2(double l, double h, int del){
- // offwhite();
- // dark();
- for (double i=l;i<h;i+=0.01){
- MAX = i;
- xred();
- //xoffwhite();
- delay(del);
- }
- for (double i=h;i>l;i-=0.01){
- MAX = i;
- xred();
- //xoffwhite();
- delay(del);
- }
- }
- void strobe(int del){
- //randColor();
- xwhite();
- delay(del);
- xdark();
- delay(del);
- }
- void disco(){
- pink();
- delay(100);
- green();
- delay(100);
- blue();
- delay(100);
- red();
- delay(100);
- white();
- delay(100);
- }
- void beats(char* beat){
- //from "... ... .. ... .."
- //consisting of 5 beats
- //1 dot is 1/4, i.e 250 ms
- //2 dots: 1/8, i.e. 125 ms
- //3 dots: 1/16 i.e. 63 ms
- //use strobe() for each tick
- int count = 0;
- for (int i=0;i<strlen(beat);i++){
- count=0;
- for (int n=i;n<strlen(beat);n++){
- if (beat[n]==' '){
- // Serial.print("Found space at beat[");
- // Serial.print(n); Serial.print("] = ");
- // Serial.println(beat[n]);
- i=n;
- break;
- }
- else{
- //this is a beat
- // Serial.print("Found BEAT at beat[");
- // Serial.print(n); Serial.print("] = ");
- // Serial.println(beat[n]);
- i=n;
- count++;
- }
- }
- // Serial.print("Blinking with delay: ");
- // Serial.println(1000/pow(2,1+count));
- strobe(1000/pow(2,1+count));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement