Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fix_fft.h>
- #include "LPD8806.h"
- #include "SPI.h"
- #include <SNESpaduino.h>
- #include <Servo.h>
- // Initialisering af LED strip
- const uint16_t nLEDs = 10;
- const uint8_t dataPin = 2;
- const uint8_t clockPin = 3;
- LPD8806 strip = LPD8806(nLEDs, dataPin, clockPin);
- // Variable tilhørende LEDs i numre og farver
- int bassColor[] = {127,0,0};
- int midColor[] = {0,127,0};
- int trebColor[] = {0,0,127};
- const uint8_t bassLed[] = {0,1,2};
- const uint8_t midLed[] = {3,4,5};
- const uint8_t trebLed[] = {6,7,8,9};
- const uint8_t nBassLed = 3;
- const uint8_t nMidLed = 3;
- const uint8_t nTrebLed = 4;
- // Variable tilhørende kontrol af modes
- const uint8_t potPin = 1;
- int dimming;
- SNESpaduino pad(12, 13, 11);
- uint16_t btns;
- Servo myservo;
- int servoPos = 0;
- // Variable tilhørende Fast Fourier Transformation - audio processing
- int x = 0;
- char im[128], data[128];
- char data_avgs[14];
- int i=0,val;
- #define AUDIOPIN 3
- void setup()
- {
- strip.begin();
- strip.show();
- Serial.begin(9600);
- myservo.attach(10);
- }
- // Initialisering af funktioner til ændring af farve
- void setBassColor();
- void setMidColor();
- void setTrebColor();
- void standardMode();
- void setStripColor();
- void audioProcessing();
- void hvidMode();
- void Wheel();
- void rainbowMode();
- void loop()
- {
- btns = pad.getButtons();
- audioProcessing();
- if(btns & BTN_A){
- hvidMode();
- } else if(btns & BTN_B) {
- rainbowMode(0);
- } else if(btns & BTN_Y) {
- strobeMode();
- } else if(btns & BTN_DOWN){
- servoDown();
- } else if(btns & BTN_UP){
- servoUp();
- } else {
- standardMode();
- }
- }
- /*
- *
- * Funktioner til forskellige modes
- *
- */
- void standardMode(){
- bassColor[0] = data_avgs[1] - dimming;
- bassColor[1] = 0;
- bassColor[2] = 0;
- midColor[0] = 0;
- midColor[1] = data_avgs[6] - dimming;
- midColor[2] = 0;
- trebColor[0] = 0;
- trebColor[1] = 0;
- trebColor[2] = data_avgs[7] - dimming;
- setStripColor();
- }
- void hvidMode(){
- bassColor[0] = data_avgs[1] - dimming;
- bassColor[1] = data_avgs[1] - dimming;
- bassColor[2] = data_avgs[1] - dimming;
- midColor[0] = data_avgs[6] - dimming;
- midColor[1] = data_avgs[6] - dimming;
- midColor[2] = data_avgs[6] - dimming;
- trebColor[0] = data_avgs[7] - dimming;
- trebColor[1] = data_avgs[7] - dimming;
- trebColor[2] = data_avgs[7] - dimming;
- setStripColor();
- }
- void rainbowMode(uint8_t wait) {
- uint16_t i, j;
- for (j=0; j < 384; j++) { // 5 cycles of all 384 colors in the wheel
- for (i=0; i < strip.numPixels(); i++) {
- // tricky math! we use each pixel as a fraction of the full 384-color wheel
- // (thats the i / strip.numPixels() part)
- // Then add in j which makes the colors go around per pixel
- // the % 384 is to make the wheel cycle around
- strip.setPixelColor(i, Wheel( ((i * 384 / strip.numPixels()) + j) % 384) );
- }
- strip.show(); // write all the pixels out
- delay(wait);
- }
- }
- void strobeMode(){
- for(int i = 0; i < strip.numPixels(); i++){
- strip.setPixelColor(i, 0);
- }
- int pickLed = random(0,strip.numPixels());
- strip.setPixelColor(pickLed, 111, 127, 0);
- strip.show();
- }
- /*
- *
- * Denne del sætter farven på strippen
- *
- */
- void setStripColor(){
- setBassColor();
- setMidColor();
- setTrebColor();
- }
- void setBassColor(){
- for(uint8_t b = 0; b < nBassLed; b++){
- strip.setPixelColor(bassLed[b],bassColor[0],bassColor[1],bassColor[2]);
- }
- strip.show();
- }
- void setMidColor(){
- for(uint8_t m = 0; m < nMidLed; m++){
- strip.setPixelColor(midLed[m],midColor[0],midColor[1],midColor[2]);
- }
- strip.show();
- }
- void setTrebColor(){
- for(uint8_t t = 0; t < nTrebLed; t++){
- strip.setPixelColor(trebLed[t],trebColor[0],trebColor[1],trebColor[2]);
- }
- strip.show();
- }
- /*
- *
- * Lydbehandling - Fast Fourier Transformation
- *
- */
- void audioProcessing(){
- for (i=0; i < 128; i++){
- val = analogRead(AUDIOPIN);
- data[i] = val;
- im[i] = 0;
- };
- fix_fft(data,im,7,0);
- for (i=0; i< 64;i++){
- data[i] = sqrt(data[i] * data[i] + im[i] * im[i]); // this gets the absolute value of the values in the
- //array, so we're only dealing with positive numbers
- };
- // average bars together
- for (i=0; i < 8; i++) {
- data_avgs[i] = data[i*4] + data[i*4 + 1] + data[i*4 + 2] + data[i*4 + 3]; // average together
- //data_avgs[i] = map(data_avgs[i], 0, 20, 0,30); // remap values for LoL
- //data_avgs[i] = map(data_avgs[i], 21, 64, 31,127); // remap values for LoL
- }
- dimming = map(analogRead(potPin),0,1023,0,30);
- }
- /*
- *
- * Farvebehandling
- *
- */
- uint32_t Wheel(uint16_t WheelPos)
- {
- byte r, g, b;
- switch(WheelPos / 128)
- {
- case 0:
- r = 127 - WheelPos % 128; //Red down
- g = WheelPos % 128; // Green up
- b = 0; //blue off
- break;
- case 1:
- g = 127 - WheelPos % 128; //green down
- b = WheelPos % 128; //blue up
- r = 0; //red off
- break;
- case 2:
- b = 127 - WheelPos % 128; //blue down
- r = WheelPos % 128; //red up
- g = 0; //green off
- break;
- }
- return(strip.Color(r,g,b));
- }
- /*
- *
- * Servo og LASER
- *
- */
- void servoUp(){
- if(servoPos > 180) servoPos = 180;
- servoPos = servoPos + 3;
- myservo.write(servoPos);
- }
- void servoDown(){
- if(servoPos < 0) servoPos = 0;
- servoPos = servoPos - 3;
- myservo.write(servoPos);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement