Advertisement
Guest User

Untitled

a guest
May 26th, 2014
375
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.87 KB | None | 0 0
  1. #include <fix_fft.h>
  2. #include "LPD8806.h"
  3. #include "SPI.h"
  4. #include <SNESpaduino.h>
  5. #include <Servo.h>
  6.  
  7.  
  8. // Initialisering af LED strip
  9. const uint16_t nLEDs = 10;
  10. const uint8_t dataPin = 2;
  11. const uint8_t clockPin = 3;
  12. LPD8806 strip = LPD8806(nLEDs, dataPin, clockPin);
  13.  
  14.  
  15. // Variable tilhørende LEDs i numre og farver
  16. int bassColor[] = {127,0,0};
  17. int midColor[] = {0,127,0};
  18. int trebColor[] = {0,0,127};
  19.  
  20. const uint8_t bassLed[] = {0,1,2};
  21. const uint8_t midLed[] = {3,4,5};
  22. const uint8_t trebLed[] = {6,7,8,9};
  23.  
  24. const uint8_t nBassLed = 3;
  25. const uint8_t nMidLed = 3;
  26. const uint8_t nTrebLed = 4;
  27.  
  28.  
  29. // Variable tilhørende kontrol af modes
  30. const uint8_t potPin = 1;
  31. int dimming;
  32. SNESpaduino pad(12, 13, 11);
  33. uint16_t btns;
  34. Servo myservo;
  35. int servoPos = 0;
  36.  
  37.  
  38. // Variable tilhørende Fast Fourier Transformation - audio processing
  39. int x = 0;
  40. char im[128], data[128];
  41. char data_avgs[14];
  42. int i=0,val;
  43.  
  44. #define AUDIOPIN 3
  45.  
  46. void setup()
  47. {
  48.   strip.begin();
  49.   strip.show();
  50.   Serial.begin(9600);
  51.   myservo.attach(10);
  52. }
  53.  
  54. // Initialisering af funktioner til ændring af farve
  55. void setBassColor();
  56. void setMidColor();
  57. void setTrebColor();
  58. void standardMode();
  59. void setStripColor();
  60. void audioProcessing();
  61. void hvidMode();
  62. void Wheel();
  63. void rainbowMode();
  64.  
  65.  
  66. void loop()
  67. {  
  68.  
  69.  
  70.  
  71.   btns = pad.getButtons();
  72.  
  73.   audioProcessing();
  74.   if(btns & BTN_A){
  75.  
  76.     hvidMode();  
  77.   } else if(btns & BTN_B) {
  78.     rainbowMode(0);
  79.   } else if(btns & BTN_Y) {
  80.     strobeMode();
  81.   } else if(btns & BTN_DOWN){
  82.     servoDown();
  83.   } else if(btns & BTN_UP){
  84.     servoUp();
  85.   } else {
  86.     standardMode();
  87.   }
  88.  
  89.  
  90.  
  91. }
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98. /*
  99.  *
  100.  * Funktioner til forskellige modes
  101.  *
  102.  */
  103.  
  104. void standardMode(){
  105.   bassColor[0] = data_avgs[1] - dimming;
  106.   bassColor[1] = 0;
  107.   bassColor[2] = 0;
  108.    
  109.   midColor[0] = 0;
  110.   midColor[1] = data_avgs[6] - dimming;
  111.   midColor[2] = 0;
  112.      
  113.   trebColor[0] = 0;
  114.   trebColor[1] = 0;
  115.   trebColor[2] = data_avgs[7] - dimming;
  116.  
  117.   setStripColor();
  118. }
  119.  
  120.  
  121. void hvidMode(){
  122.   bassColor[0] = data_avgs[1] - dimming;
  123.   bassColor[1] = data_avgs[1] - dimming;
  124.   bassColor[2] = data_avgs[1] - dimming;
  125.    
  126.   midColor[0] = data_avgs[6] - dimming;
  127.   midColor[1] = data_avgs[6] - dimming;  
  128.   midColor[2] = data_avgs[6] - dimming;  
  129.      
  130.   trebColor[0] = data_avgs[7] - dimming;
  131.   trebColor[1] = data_avgs[7] - dimming;
  132.   trebColor[2] = data_avgs[7] - dimming;
  133.  
  134.   setStripColor();
  135. }
  136.  
  137.  
  138. void rainbowMode(uint8_t wait) {
  139.   uint16_t i, j;
  140.  
  141.   for (j=0; j < 384; j++) {     // 5 cycles of all 384 colors in the wheel
  142.     for (i=0; i < strip.numPixels(); i++) {
  143.       // tricky math! we use each pixel as a fraction of the full 384-color wheel
  144.       // (thats the i / strip.numPixels() part)
  145.       // Then add in j which makes the colors go around per pixel
  146.       // the % 384 is to make the wheel cycle around
  147.       strip.setPixelColor(i, Wheel( ((i * 384 / strip.numPixels()) + j) % 384) );
  148.     }  
  149.     strip.show();   // write all the pixels out
  150.     delay(wait);
  151.   }
  152. }
  153.  
  154.  
  155. void strobeMode(){
  156.   for(int i = 0; i < strip.numPixels(); i++){
  157.     strip.setPixelColor(i, 0);
  158.   }
  159.  
  160.   int pickLed = random(0,strip.numPixels());
  161.   strip.setPixelColor(pickLed, 111, 127, 0);
  162.   strip.show();
  163. }
  164.  
  165.  
  166.  
  167.  
  168. /*
  169.  *
  170.  * Denne del sætter farven på strippen
  171.  *
  172.  */
  173.  
  174. void setStripColor(){
  175.   setBassColor();
  176.   setMidColor();
  177.   setTrebColor();
  178. }
  179.  
  180.  
  181. void setBassColor(){
  182.   for(uint8_t b = 0; b < nBassLed; b++){
  183.     strip.setPixelColor(bassLed[b],bassColor[0],bassColor[1],bassColor[2]);
  184.   }
  185.   strip.show();
  186. }
  187.  
  188.  
  189. void setMidColor(){
  190.   for(uint8_t m = 0; m < nMidLed; m++){
  191.     strip.setPixelColor(midLed[m],midColor[0],midColor[1],midColor[2]);
  192.   }
  193.   strip.show();
  194. }
  195.  
  196.  
  197. void setTrebColor(){
  198.   for(uint8_t t = 0; t < nTrebLed; t++){
  199.     strip.setPixelColor(trebLed[t],trebColor[0],trebColor[1],trebColor[2]);
  200.   }
  201.   strip.show();
  202. }
  203.  
  204.  
  205.  
  206.  
  207.  
  208. /*
  209.  *
  210.  * Lydbehandling - Fast Fourier Transformation
  211.  *
  212.  */
  213.  
  214. void audioProcessing(){
  215.   for (i=0; i < 128; i++){                                  
  216.     val = analogRead(AUDIOPIN);                                  
  217.     data[i] = val;                                    
  218.     im[i] = 0;                                                  
  219.   };
  220.  
  221.   fix_fft(data,im,7,0);
  222.  
  223.   for (i=0; i< 64;i++){                                    
  224.     data[i] = sqrt(data[i] * data[i] + im[i] * im[i]);  // this gets the absolute value of the values in the
  225.                                                         //array, so we're only dealing with positive numbers
  226.   };  
  227.  
  228.  
  229.   // average bars together
  230.   for (i=0; i < 8; i++) {
  231.     data_avgs[i] = data[i*4] + data[i*4 + 1] + data[i*4 + 2] + data[i*4 + 3];   // average together
  232.  
  233.     //data_avgs[i] = map(data_avgs[i], 0, 20, 0,30);                            // remap values for LoL
  234.     //data_avgs[i] = map(data_avgs[i], 21, 64, 31,127);                         // remap values for LoL
  235.   }
  236.   dimming = map(analogRead(potPin),0,1023,0,30);
  237. }
  238.  
  239.  
  240.  
  241. /*
  242.  *
  243.  * Farvebehandling
  244.  *
  245.  */
  246.  
  247. uint32_t Wheel(uint16_t WheelPos)
  248. {
  249.   byte r, g, b;
  250.   switch(WheelPos / 128)
  251.   {
  252.     case 0:
  253.       r = 127 - WheelPos % 128;   //Red down
  254.       g = WheelPos % 128;      // Green up
  255.       b = 0;                  //blue off
  256.       break;
  257.     case 1:
  258.       g = 127 - WheelPos % 128;  //green down
  259.       b = WheelPos % 128;      //blue up
  260.       r = 0;                  //red off
  261.       break;
  262.     case 2:
  263.       b = 127 - WheelPos % 128;  //blue down
  264.       r = WheelPos % 128;      //red up
  265.       g = 0;                  //green off
  266.       break;
  267.   }
  268.   return(strip.Color(r,g,b));
  269. }
  270.  
  271.  
  272.  
  273. /*
  274.  *
  275.  * Servo og LASER
  276.  *
  277.  */
  278.  
  279. void servoUp(){
  280.   if(servoPos > 180) servoPos = 180;
  281.   servoPos = servoPos + 3;
  282.   myservo.write(servoPos);
  283. }
  284.  
  285. void servoDown(){
  286.   if(servoPos < 0) servoPos = 0;
  287.   servoPos = servoPos - 3;
  288.   myservo.write(servoPos);
  289. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement