Advertisement
Guest User

arduino-scope

a guest
Feb 6th, 2017
339
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.11 KB | None | 0 0
  1.  
  2. #include <FilterDerivative.h>
  3. #include <RunningStatistics.h>
  4. #include <FilterOnePole.h>
  5. #include <Filters.h>
  6. #include <FloatDefine.h>
  7.  
  8. #include <Firmata.h>
  9. #include <Boards.h>
  10.  
  11. #include <Adafruit_NeoPixel.h>
  12.  
  13. // Simple NeoPixel test.  Lights just a few pixels at a time so a
  14. // 1m strip can safely be powered from Arduino 5V pin.  Arduino
  15. // may nonetheless hiccup when LEDs are first connected and not
  16. // accept code.  So upload code first, unplug USB, connect pixels
  17. // to GND FIRST, then +5V and digital pin 6, then re-plug USB.
  18. // A working strip will show a few pixels moving down the line,
  19. // cycling between red, green and blue.  If you get no response,
  20. // might be connected to wrong end of strip (the end wires, if
  21. // any, are no indication -- look instead for the data direction
  22. // arrows printed on the strip).
  23.  
  24.  
  25. #define PIN      6
  26. #define N_LEDS 49
  27.  
  28. Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);
  29. int p = 0;
  30. int reverseX;
  31. typedef struct tagRGBTripletInt
  32. {
  33.   int colors[3];
  34.   int red(){
  35.     return colors[0];
  36.   }
  37.   int green(){
  38.     return colors[1];
  39.   }
  40.   int blue(){
  41.     return colors[2];
  42.   }
  43.  
  44. } RGBTripletInt;
  45. RGBTripletInt LEDs[7][7];
  46.  const int kMatrixWidth = 7;
  47. const int kMatrixHeight = 7;
  48. int randX;
  49.     int randY;
  50. // Param for different pixel layouts
  51. const bool    kMatrixSerpentineLayout = true;
  52. // Set 'kMatrixSerpentineLayout' to false if your pixels are
  53. // laid out all running the same way, like this:
  54. //
  55. //     0 >  1 >  2 >  3 >  4
  56. //                         |
  57. //     .----<----<----<----'
  58. //     |
  59. //     5 >  6 >  7 >  8 >  9
  60. //                         |
  61. //     .----<----<----<----'
  62. //     |
  63. //    10 > 11 > 12 > 13 > 14
  64. //                         |
  65. //     .----<----<----<----'
  66. //     |
  67. //    15 > 16 > 17 > 18 > 19
  68. //
  69. // Set 'kMatrixSerpentineLayout' to true if your pixels are
  70. // laid out back-and-forth, like this:
  71. //
  72. //     0 >  1 >  2 >  3 >  4
  73. //                         |
  74. //                         |
  75. //     9 <  8 <  7 <  6 <  5
  76. //     |
  77. //     |
  78. //    10 > 11 > 12 > 13 > 14
  79. //                        |
  80. //                        |
  81. //    19 < 18 < 17 < 16 < 15
  82. //
  83. // Bonus vocabulary word: anything that goes one way
  84. // in one row, and then backwards in the next row, and so on
  85. // is call "boustrophedon", meaning "as the ox plows."
  86.  
  87.  
  88. // This function will return the right 'led index number' for
  89. // a given set of X and Y coordinates on your matrix.  
  90. // IT DOES NOT CHECK THE COORDINATE BOUNDARIES.  
  91. // That's up to you.  Don't pass it bogus values.
  92. //
  93. // Use the "XY" function like this:
  94. //
  95. //    for( uint8_t x = 0; x < kMatrixWidth; x++) {
  96. //      for( uint8_t y = 0; y < kMatrixHeight; y++) {
  97. //      
  98. //        // Here's the x, y to 'led index' in action:
  99. //        leds[ XY( x, y) ] = CHSV( random8(), 255, 255);
  100. //      
  101. //      }
  102. //    }
  103. //
  104. //
  105. int XY( int x, int y)
  106. {
  107.   uint16_t i;
  108.  
  109.   if( kMatrixSerpentineLayout == false) {
  110.     i = (y * kMatrixWidth) + x;
  111.   }
  112.  
  113.   if( kMatrixSerpentineLayout == true) {
  114.     if( y & 0x01) {
  115.       // Odd rows run backwards
  116.       i = (y * kMatrixWidth) + x;
  117.      
  118.     } else {
  119.       // Even rows run forwards
  120.       reverseX = (kMatrixWidth - 1) - x;
  121.       i = (y * kMatrixWidth) + reverseX;
  122.     }
  123.   }
  124.  
  125.   return i;
  126. }
  127. float valForLPF0;
  128. float valForLPF1;
  129. float valForLPF2;
  130. float valForLPF3;
  131. float valForLPF4;
  132. float valForLPF5;
  133. float valForLPF6;
  134. float filterFrequency0 = 32;  
  135. float filterFrequency1 = 64;  
  136. float filterFrequency2 = 256;
  137. float filterFrequency3 = 512;
  138. float filterFrequency4 = 2048;
  139. float filterFrequency5 = 8192;
  140. float filterFrequency6 = 16384;
  141. FilterOnePole lowpassFilter0( LOWPASS, filterFrequency0 );
  142. RunningStatistics lowpassFilter0Stats;  
  143. FilterOnePole lowpassFilter1( LOWPASS, filterFrequency1 );
  144. RunningStatistics lowpassFilter1Stats;  
  145. FilterOnePole lowpassFilter2( LOWPASS, filterFrequency2 );
  146. RunningStatistics lowpassFilter2Stats;  
  147. FilterOnePole lowpassFilter3( LOWPASS, filterFrequency3 );
  148. RunningStatistics lowpassFilter3Stats;  
  149. FilterOnePole lowpassFilter4( LOWPASS, filterFrequency4 );
  150. RunningStatistics lowpassFilter4Stats;  
  151. FilterOnePole lowpassFilter5( LOWPASS, filterFrequency5 );
  152. RunningStatistics lowpassFilter5Stats;  
  153. FilterOnePole lowpassFilter6( LOWPASS, filterFrequency6 );
  154. RunningStatistics lowpassFilter6Stats;  
  155. int x=0;
  156. int y = 0;
  157. int level0;  
  158. int level1;  
  159. int level2;  
  160. int level3;  
  161. int level4;  
  162. int level5;  
  163. int level6;  
  164. int LEDbuf[49][3];
  165. float valmax0=80;
  166. float valmax1=80;
  167. float valmax2=80;
  168. float valmax3=80;
  169. float valmax4=80;
  170. float valmax5=80;
  171. float valmax6=80;
  172.       int newCol0= 100;
  173.       int newCol1=100;
  174.       int newCol2=100;
  175. int INPUT_PIN= A1;
  176. void setup() {
  177.   Serial.begin(9600);
  178.   lowpassFilter0Stats.setWindowSecs(10/32);
  179. lowpassFilter1Stats.setWindowSecs(10/64);
  180. lowpassFilter2Stats.setWindowSecs(10/256);
  181.   lowpassFilter3Stats.setWindowSecs(10/512);
  182.   lowpassFilter4Stats.setWindowSecs(10/2048);
  183.   lowpassFilter5Stats.setWindowSecs(10/8192);
  184.   lowpassFilter6Stats.setWindowSecs(10/16384);
  185.   strip.begin();
  186.  
  187. }
  188.  
  189. void loop() {
  190.   randomSeed(analogRead(A1));
  191.   p++;
  192.   if (p == 1000){
  193.     p=0;
  194.     valmax0=80;
  195.     valmax1=80;
  196.     valmax2=80;
  197.     valmax3=80;
  198.     valmax4=80;
  199.     valmax5=80;
  200.     valmax6=80;
  201.   }
  202.   lowpassFilter0.input( analogRead(INPUT_PIN ));
  203.     lowpassFilter0Stats.input( lowpassFilter0.output() );
  204.     valForLPF0=(lowpassFilter0Stats.mean()+(lowpassFilter0.output()*2))/3;
  205.     Serial.println(valForLPF0);
  206.    
  207.    
  208.     lowpassFilter1.input( analogRead(INPUT_PIN ));
  209.     lowpassFilter1Stats.input( lowpassFilter1.output() );
  210.     valForLPF1=(lowpassFilter1Stats.mean()+(lowpassFilter1.output()*2))/3;
  211.  
  212.    
  213.     lowpassFilter2.input( analogRead(INPUT_PIN ));
  214.     lowpassFilter2Stats.input( lowpassFilter2.output() );
  215.     valForLPF2=(lowpassFilter2Stats.mean()+(lowpassFilter2.output()*2))/3;
  216.  
  217.    
  218.     lowpassFilter3.input( analogRead(INPUT_PIN ));
  219.     lowpassFilter3Stats.input( lowpassFilter3.output() );
  220.     valForLPF3=(lowpassFilter3Stats.mean()+(lowpassFilter3.output()*2))/3;
  221.    
  222.     lowpassFilter4.input( analogRead(INPUT_PIN ));
  223.     lowpassFilter4Stats.input( lowpassFilter4.output() );
  224.     valForLPF4=(lowpassFilter4Stats.mean()+(lowpassFilter4.output()*2))/3;
  225.  
  226.     lowpassFilter5.input( analogRead(INPUT_PIN ));
  227.     lowpassFilter5Stats.input( lowpassFilter5.output() );
  228.     valForLPF5=(lowpassFilter5Stats.mean()+(lowpassFilter5.output()*2))/3;
  229.  
  230.     lowpassFilter6.input( analogRead(INPUT_PIN ));
  231.     lowpassFilter6Stats.input( lowpassFilter6.output() );
  232.     valForLPF6=(lowpassFilter6Stats.mean()+(lowpassFilter6.output()*2))/3;
  233.  
  234.  
  235.       if (valForLPF0 >= 130){
  236.     newCol0= random(20,100);
  237.     newCol1=random(20,100);
  238.     newCol2=random(20,100);
  239.   }
  240.     if ( valForLPF0 >= valmax0){
  241.     valmax0=valForLPF0;
  242.     }
  243.     if (valForLPF0 >= valmax0-(7*(valmax0/7))){
  244.     level0=0;
  245.   }
  246.   if (valForLPF0 >= valmax0-(6*(valmax0/7))){
  247.     level0=2;
  248.   }
  249.   if (valForLPF0 >= valmax0-(5*(valmax0/7))){
  250.     level0=4;
  251.   }
  252.   if (valForLPF0 >= valmax0-(4*(valmax0/7))){
  253.     level0=5;
  254.   }
  255.   if (valForLPF0 >= valmax0-(3*(valmax0/7))){
  256.     level0=6;
  257.   }
  258.   if (valForLPF0 >= valmax0-(2*(valmax0/7))){
  259.     level0=7;
  260.   }
  261.   if (valForLPF0 >= valmax0-(1*(valmax0/7))){
  262.     level0=8;
  263.   }
  264.    
  265.     if ( valForLPF1 >= valmax1){
  266.     valmax1=valForLPF1;
  267.     }
  268.  
  269.     if (valForLPF1 >= valmax1-(7*(valmax1/7))){
  270.     level1=0;
  271.   }
  272.   if (valForLPF1 >= valmax1-(6*(valmax1/7))){
  273.     level1=2;
  274.   }
  275.   if (valForLPF1 >= valmax1-(5*(valmax1/7))){
  276.     level1=4;
  277.   }
  278.   if (valForLPF1 >= valmax1-(4*(valmax1/7))){
  279.     level1=5;
  280.   }
  281.   if (valForLPF1 >= valmax1-(3*(valmax1/7))){
  282.     level1=6;
  283.   }
  284.   if (valForLPF1 >= valmax1-(2*(valmax1/7))){
  285.     level1=7;
  286.   }
  287.   if (valForLPF1 >= valmax1-(1*(valmax1/7))){
  288.     level1=8;
  289.   }
  290.  
  291.  
  292.     if ( valForLPF2 >= valmax2){
  293.     valmax2=valForLPF2;
  294.     }
  295. if (valForLPF2 >= valmax2-(7*(valmax2/7))){
  296.     level2=0;
  297.   }
  298.   if (valForLPF2 >= valmax2-(6*(valmax2/7))){
  299.     level2=2;
  300.   }
  301.   if (valForLPF2 >= valmax2-(5*(valmax2/7))){
  302.     level2=4;
  303.   }
  304.   if (valForLPF2 >= valmax2-(4*(valmax2/7))){
  305.     level2=5;
  306.   }
  307.   if (valForLPF2 >= valmax2-(3*(valmax2/7))){
  308.     level2=6;
  309.   }
  310.   if (valForLPF2 >= valmax2-(2*(valmax2/7))){
  311.     level2=7;
  312.   }
  313.   if (valForLPF2 >= valmax2-(1*(valmax2/7))){
  314.     level2=8;
  315.   }
  316.  
  317.  
  318.    
  319.     if ( valForLPF3 >= valmax3){
  320.     valmax3=valForLPF3;
  321.     }
  322.  
  323. if (valForLPF3 >= valmax3-(7*(valmax3/7))){
  324.     level3=0;
  325.   }
  326.   if (valForLPF3 >= valmax3-(6*(valmax3/7))){
  327.     level3=2;
  328.   }
  329.   if (valForLPF3 >= valmax3-(5*(valmax3/7))){
  330.     level3=4;
  331.   }
  332.   if (valForLPF3 >= valmax3-(4*(valmax3/7))){
  333.     level3=5;
  334.   }
  335.   if (valForLPF3 >= valmax3-(3*(valmax3/7))){
  336.     level3=6;
  337.   }
  338.   if (valForLPF3 >= valmax3-(2*(valmax3/7))){
  339.     level3=7;
  340.   }
  341.   if (valForLPF3 >= valmax3-(1*(valmax3/7))){
  342.     level3=8;
  343.   }
  344.  
  345.    
  346.     if ( valForLPF4 >= valmax4){
  347.     valmax4=valForLPF4;
  348.     }
  349.  
  350.     if (valForLPF4 >= valmax4-(7*(valmax4/7))){
  351.     level4=0;
  352.   }
  353.   if (valForLPF4 >= valmax4-(6*(valmax4/7))){
  354.     level4=2;
  355.   }
  356.   if (valForLPF4 >= valmax4-(5*(valmax4/7))){
  357.     level4=4;
  358.   }
  359.   if (valForLPF4 >= valmax4-(4*(valmax4/7))){
  360.     level4=5;
  361.   }
  362.   if (valForLPF4 >= valmax4-(3*(valmax4/7))){
  363.     level4=6;
  364.   }
  365.   if (valForLPF4 >= valmax4-(2*(valmax4/7))){
  366.     level4=7;
  367.   }
  368.   if (valForLPF4 >= valmax4-(1*(valmax4/7))){
  369.     level4=8;
  370.   }
  371.  
  372.  
  373.     if ( valForLPF5 >= valmax5){
  374.     valmax5=valForLPF5;
  375.     }
  376.  
  377.     if (valForLPF5 >= valmax5-(7*(valmax5/7))){
  378.     level5=0;
  379.   }
  380.   if (valForLPF5 >= valmax5-(6*(valmax5/7))){
  381.     level5=2;
  382.   }
  383.   if (valForLPF5 >= valmax5-(5*(valmax5/7))){
  384.     level5=4;
  385.   }
  386.   if (valForLPF5 >= valmax5-(4*(valmax5/7))){
  387.     level5=5;
  388.   }
  389.   if (valForLPF5 >= valmax5-(3*(valmax5/7))){
  390.     level5=6;
  391.   }
  392.   if (valForLPF5 >= valmax5-(2*(valmax5/7))){
  393.     level5=7;
  394.   }
  395.   if (valForLPF5 >= valmax5-(1*(valmax5/7))){
  396.     level5=8;
  397.   }
  398.  
  399.  
  400.     if ( valForLPF6 >= valmax6){
  401.     valmax6=valForLPF6;
  402.     }
  403.  
  404.     if (valForLPF6 >= valmax6-(7*(valmax6/7))){
  405.     level6=0;
  406.   }
  407.   if (valForLPF6 >= valmax6-(6*(valmax6/7))){
  408.     level6=2;
  409.   }
  410.   if (valForLPF6 >= valmax6-(5*(valmax6/7))){
  411.     level6=4;
  412.   }
  413.   if (valForLPF6 >= valmax6-(4*(valmax6/7))){
  414.     level6=5;
  415.   }
  416.   if (valForLPF6 >= valmax6-(3*(valmax6/7))){
  417.     level6=6;
  418.   }
  419.   if (valForLPF6 >= valmax6-(2*(valmax6/7))){
  420.     level6=7;
  421.   }
  422.   if (valForLPF6 >= valmax6-(1*(valmax6/7))){
  423.     level6=8;
  424.   }
  425. for (y=0; y < 7; y++){
  426.  
  427.   if (y == 0 ){
  428.     for (x=0; x < level0; x++){
  429.       LEDbuf[(7*y)+x][0]= newCol0;
  430.       LEDbuf[(7*y)+x][1]= newCol1;
  431.       LEDbuf[(7*y)+x][2]= newCol2;
  432.     }
  433.     for (x=level0-1; x < 7; x++){
  434.       LEDbuf[(7*y)+x][0]= 0;
  435.       LEDbuf[(7*y)+x][1]= 0;
  436.       LEDbuf[(7*y)+x][2]= 0;
  437.     }
  438.    
  439.   }
  440.  
  441.   if (y == 1 ){
  442.     for (x=0; x < level1; x++){
  443.       LEDbuf[(7*y)+x][0]= newCol0;
  444.       LEDbuf[(7*y)+x][1]= newCol1;
  445.       LEDbuf[(7*y)+x][2]= newCol2;
  446.     }
  447.     for (x=level1-1; x < 7; x++){
  448.       LEDbuf[(7*y)+x][0]= 0;
  449.       LEDbuf[(7*y)+x][1]= 0;
  450.       LEDbuf[(7*y)+x][2]= 0;
  451.     }
  452.    
  453.   }
  454.  
  455.   if (y == 2 ){
  456.     for (x=0; x < level2; x++){
  457.       LEDbuf[(7*y)+x][0]= newCol0;
  458.       LEDbuf[(7*y)+x][1]= newCol1;
  459.       LEDbuf[(7*y)+x][2]= newCol2;  
  460.     }
  461.     for (x=level2-1; x < 7; x++){
  462.       LEDbuf[(7*y)+x][0]= 0;
  463.       LEDbuf[(7*y)+x][1]= 0;
  464.       LEDbuf[(7*y)+x][2]= 0;
  465.     }
  466.    
  467.   }
  468.  
  469.   if (y == 3 ){
  470.     for (x=0; x < level3; x++){
  471.       LEDbuf[(7*y)+x][0]= newCol0;
  472.       LEDbuf[(7*y)+x][1]= newCol1;
  473.       LEDbuf[(7*y)+x][2]= newCol2;
  474.     }
  475.     for (x=level3-1; x < 7; x++){
  476.       LEDbuf[(7*y)+x][0]= 0;
  477.       LEDbuf[(7*y)+x][1]= 0;
  478.       LEDbuf[(7*y)+x][2]= 0;
  479.     }
  480.    
  481.   }
  482.  
  483.   if (y == 4 ){
  484.     for (x=0; x < level4; x++){
  485.       LEDbuf[(7*y)+x][0]= newCol0;
  486.       LEDbuf[(7*y)+x][1]= newCol1;
  487.       LEDbuf[(7*y)+x][2]= newCol2;
  488.     }
  489.     for (x=level4-1; x < 7; x++){
  490.       LEDbuf[(7*y)+x][0]= 0;
  491.       LEDbuf[(7*y)+x][1]= 0;
  492.       LEDbuf[(7*y)+x][2]= 0;
  493.     }
  494.    
  495.   }
  496.  
  497.   if (y == 5 ){
  498.     for (x=0; x < level5; x++){
  499.       LEDbuf[(7*y)+x][0]= newCol0;
  500.       LEDbuf[(7*y)+x][1]= newCol1;
  501.       LEDbuf[(7*y)+x][2]= newCol2;  
  502.     }
  503.     for (x=level5-1; x < 7; x++){
  504.       LEDbuf[(7*y)+x][0]= 0;
  505.       LEDbuf[(7*y)+x][1]= 0;
  506.       LEDbuf[(7*y)+x][2]= 0;
  507.     }
  508.    
  509.   }
  510.   if (y == 6 ){
  511.     for (x=0; x < level6; x++){
  512.       LEDbuf[(7*y)+x][0]= newCol0;
  513.       LEDbuf[(7*y)+x][1]= newCol1;
  514.       LEDbuf[(7*y)+x][2]= newCol2;
  515.     }
  516.     for (x=level6-1; x < 7; x++){
  517.       LEDbuf[(7*y)+x][0]= 0;
  518.       LEDbuf[(7*y)+x][1]= 0;
  519.       LEDbuf[(7*y)+x][2]= 0;
  520.     }
  521.    
  522.   }
  523. }
  524.  
  525.  
  526. for (y=0; y < 7; y++){
  527.   for (x=0; x < 7; x++){
  528.  
  529.   LEDs[y][x].colors[0]=LEDbuf[(7*y)+x][0];
  530.   LEDs[y][x].colors[1]=LEDbuf[(7*y)+x][1];
  531.   LEDs[y][x].colors[2]=LEDbuf[(7*y)+x][2];
  532. }
  533. }
  534.  
  535.   for (y=0; y < 7; y++){
  536.   for (x=0; x < 7; x++){
  537.       strip.setPixelColor(XY(x,y)  , strip.Color(LEDs[x][y].red(), LEDs[x][y].green(), LEDs[x][y].blue())); // Draw new pixel
  538.        // Erase pixel a few steps back
  539.      
  540.      
  541.       strip.show();
  542.      
  543. }
  544.   }
  545.  
  546.  
  547. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement