Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <FilterDerivative.h>
- #include <RunningStatistics.h>
- #include <FilterOnePole.h>
- #include <Filters.h>
- #include <FloatDefine.h>
- #include <Firmata.h>
- #include <Boards.h>
- #include <Adafruit_NeoPixel.h>
- // Simple NeoPixel test. Lights just a few pixels at a time so a
- // 1m strip can safely be powered from Arduino 5V pin. Arduino
- // may nonetheless hiccup when LEDs are first connected and not
- // accept code. So upload code first, unplug USB, connect pixels
- // to GND FIRST, then +5V and digital pin 6, then re-plug USB.
- // A working strip will show a few pixels moving down the line,
- // cycling between red, green and blue. If you get no response,
- // might be connected to wrong end of strip (the end wires, if
- // any, are no indication -- look instead for the data direction
- // arrows printed on the strip).
- #define PIN 6
- #define N_LEDS 49
- Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);
- int p = 0;
- int reverseX;
- typedef struct tagRGBTripletInt
- {
- int colors[3];
- int red(){
- return colors[0];
- }
- int green(){
- return colors[1];
- }
- int blue(){
- return colors[2];
- }
- } RGBTripletInt;
- RGBTripletInt LEDs[7][7];
- const int kMatrixWidth = 7;
- const int kMatrixHeight = 7;
- int randX;
- int randY;
- // Param for different pixel layouts
- const bool kMatrixSerpentineLayout = true;
- // Set 'kMatrixSerpentineLayout' to false if your pixels are
- // laid out all running the same way, like this:
- //
- // 0 > 1 > 2 > 3 > 4
- // |
- // .----<----<----<----'
- // |
- // 5 > 6 > 7 > 8 > 9
- // |
- // .----<----<----<----'
- // |
- // 10 > 11 > 12 > 13 > 14
- // |
- // .----<----<----<----'
- // |
- // 15 > 16 > 17 > 18 > 19
- //
- // Set 'kMatrixSerpentineLayout' to true if your pixels are
- // laid out back-and-forth, like this:
- //
- // 0 > 1 > 2 > 3 > 4
- // |
- // |
- // 9 < 8 < 7 < 6 < 5
- // |
- // |
- // 10 > 11 > 12 > 13 > 14
- // |
- // |
- // 19 < 18 < 17 < 16 < 15
- //
- // Bonus vocabulary word: anything that goes one way
- // in one row, and then backwards in the next row, and so on
- // is call "boustrophedon", meaning "as the ox plows."
- // This function will return the right 'led index number' for
- // a given set of X and Y coordinates on your matrix.
- // IT DOES NOT CHECK THE COORDINATE BOUNDARIES.
- // That's up to you. Don't pass it bogus values.
- //
- // Use the "XY" function like this:
- //
- // for( uint8_t x = 0; x < kMatrixWidth; x++) {
- // for( uint8_t y = 0; y < kMatrixHeight; y++) {
- //
- // // Here's the x, y to 'led index' in action:
- // leds[ XY( x, y) ] = CHSV( random8(), 255, 255);
- //
- // }
- // }
- //
- //
- int XY( int x, int y)
- {
- uint16_t i;
- if( kMatrixSerpentineLayout == false) {
- i = (y * kMatrixWidth) + x;
- }
- if( kMatrixSerpentineLayout == true) {
- if( y & 0x01) {
- // Odd rows run backwards
- i = (y * kMatrixWidth) + x;
- } else {
- // Even rows run forwards
- reverseX = (kMatrixWidth - 1) - x;
- i = (y * kMatrixWidth) + reverseX;
- }
- }
- return i;
- }
- float valForLPF0;
- float valForLPF1;
- float valForLPF2;
- float valForLPF3;
- float valForLPF4;
- float valForLPF5;
- float valForLPF6;
- float filterFrequency0 = 32;
- float filterFrequency1 = 64;
- float filterFrequency2 = 256;
- float filterFrequency3 = 512;
- float filterFrequency4 = 2048;
- float filterFrequency5 = 8192;
- float filterFrequency6 = 16384;
- FilterOnePole lowpassFilter0( LOWPASS, filterFrequency0 );
- RunningStatistics lowpassFilter0Stats;
- FilterOnePole lowpassFilter1( LOWPASS, filterFrequency1 );
- RunningStatistics lowpassFilter1Stats;
- FilterOnePole lowpassFilter2( LOWPASS, filterFrequency2 );
- RunningStatistics lowpassFilter2Stats;
- FilterOnePole lowpassFilter3( LOWPASS, filterFrequency3 );
- RunningStatistics lowpassFilter3Stats;
- FilterOnePole lowpassFilter4( LOWPASS, filterFrequency4 );
- RunningStatistics lowpassFilter4Stats;
- FilterOnePole lowpassFilter5( LOWPASS, filterFrequency5 );
- RunningStatistics lowpassFilter5Stats;
- FilterOnePole lowpassFilter6( LOWPASS, filterFrequency6 );
- RunningStatistics lowpassFilter6Stats;
- int x=0;
- int y = 0;
- int level0;
- int level1;
- int level2;
- int level3;
- int level4;
- int level5;
- int level6;
- int LEDbuf[49][3];
- float valmax0=80;
- float valmax1=80;
- float valmax2=80;
- float valmax3=80;
- float valmax4=80;
- float valmax5=80;
- float valmax6=80;
- int newCol0= 100;
- int newCol1=100;
- int newCol2=100;
- int INPUT_PIN= A1;
- void setup() {
- Serial.begin(9600);
- lowpassFilter0Stats.setWindowSecs(10/32);
- lowpassFilter1Stats.setWindowSecs(10/64);
- lowpassFilter2Stats.setWindowSecs(10/256);
- lowpassFilter3Stats.setWindowSecs(10/512);
- lowpassFilter4Stats.setWindowSecs(10/2048);
- lowpassFilter5Stats.setWindowSecs(10/8192);
- lowpassFilter6Stats.setWindowSecs(10/16384);
- strip.begin();
- }
- void loop() {
- randomSeed(analogRead(A1));
- p++;
- if (p == 1000){
- p=0;
- valmax0=80;
- valmax1=80;
- valmax2=80;
- valmax3=80;
- valmax4=80;
- valmax5=80;
- valmax6=80;
- }
- lowpassFilter0.input( analogRead(INPUT_PIN ));
- lowpassFilter0Stats.input( lowpassFilter0.output() );
- valForLPF0=(lowpassFilter0Stats.mean()+(lowpassFilter0.output()*2))/3;
- Serial.println(valForLPF0);
- lowpassFilter1.input( analogRead(INPUT_PIN ));
- lowpassFilter1Stats.input( lowpassFilter1.output() );
- valForLPF1=(lowpassFilter1Stats.mean()+(lowpassFilter1.output()*2))/3;
- lowpassFilter2.input( analogRead(INPUT_PIN ));
- lowpassFilter2Stats.input( lowpassFilter2.output() );
- valForLPF2=(lowpassFilter2Stats.mean()+(lowpassFilter2.output()*2))/3;
- lowpassFilter3.input( analogRead(INPUT_PIN ));
- lowpassFilter3Stats.input( lowpassFilter3.output() );
- valForLPF3=(lowpassFilter3Stats.mean()+(lowpassFilter3.output()*2))/3;
- lowpassFilter4.input( analogRead(INPUT_PIN ));
- lowpassFilter4Stats.input( lowpassFilter4.output() );
- valForLPF4=(lowpassFilter4Stats.mean()+(lowpassFilter4.output()*2))/3;
- lowpassFilter5.input( analogRead(INPUT_PIN ));
- lowpassFilter5Stats.input( lowpassFilter5.output() );
- valForLPF5=(lowpassFilter5Stats.mean()+(lowpassFilter5.output()*2))/3;
- lowpassFilter6.input( analogRead(INPUT_PIN ));
- lowpassFilter6Stats.input( lowpassFilter6.output() );
- valForLPF6=(lowpassFilter6Stats.mean()+(lowpassFilter6.output()*2))/3;
- if (valForLPF0 >= 130){
- newCol0= random(20,100);
- newCol1=random(20,100);
- newCol2=random(20,100);
- }
- if ( valForLPF0 >= valmax0){
- valmax0=valForLPF0;
- }
- if (valForLPF0 >= valmax0-(7*(valmax0/7))){
- level0=0;
- }
- if (valForLPF0 >= valmax0-(6*(valmax0/7))){
- level0=2;
- }
- if (valForLPF0 >= valmax0-(5*(valmax0/7))){
- level0=4;
- }
- if (valForLPF0 >= valmax0-(4*(valmax0/7))){
- level0=5;
- }
- if (valForLPF0 >= valmax0-(3*(valmax0/7))){
- level0=6;
- }
- if (valForLPF0 >= valmax0-(2*(valmax0/7))){
- level0=7;
- }
- if (valForLPF0 >= valmax0-(1*(valmax0/7))){
- level0=8;
- }
- if ( valForLPF1 >= valmax1){
- valmax1=valForLPF1;
- }
- if (valForLPF1 >= valmax1-(7*(valmax1/7))){
- level1=0;
- }
- if (valForLPF1 >= valmax1-(6*(valmax1/7))){
- level1=2;
- }
- if (valForLPF1 >= valmax1-(5*(valmax1/7))){
- level1=4;
- }
- if (valForLPF1 >= valmax1-(4*(valmax1/7))){
- level1=5;
- }
- if (valForLPF1 >= valmax1-(3*(valmax1/7))){
- level1=6;
- }
- if (valForLPF1 >= valmax1-(2*(valmax1/7))){
- level1=7;
- }
- if (valForLPF1 >= valmax1-(1*(valmax1/7))){
- level1=8;
- }
- if ( valForLPF2 >= valmax2){
- valmax2=valForLPF2;
- }
- if (valForLPF2 >= valmax2-(7*(valmax2/7))){
- level2=0;
- }
- if (valForLPF2 >= valmax2-(6*(valmax2/7))){
- level2=2;
- }
- if (valForLPF2 >= valmax2-(5*(valmax2/7))){
- level2=4;
- }
- if (valForLPF2 >= valmax2-(4*(valmax2/7))){
- level2=5;
- }
- if (valForLPF2 >= valmax2-(3*(valmax2/7))){
- level2=6;
- }
- if (valForLPF2 >= valmax2-(2*(valmax2/7))){
- level2=7;
- }
- if (valForLPF2 >= valmax2-(1*(valmax2/7))){
- level2=8;
- }
- if ( valForLPF3 >= valmax3){
- valmax3=valForLPF3;
- }
- if (valForLPF3 >= valmax3-(7*(valmax3/7))){
- level3=0;
- }
- if (valForLPF3 >= valmax3-(6*(valmax3/7))){
- level3=2;
- }
- if (valForLPF3 >= valmax3-(5*(valmax3/7))){
- level3=4;
- }
- if (valForLPF3 >= valmax3-(4*(valmax3/7))){
- level3=5;
- }
- if (valForLPF3 >= valmax3-(3*(valmax3/7))){
- level3=6;
- }
- if (valForLPF3 >= valmax3-(2*(valmax3/7))){
- level3=7;
- }
- if (valForLPF3 >= valmax3-(1*(valmax3/7))){
- level3=8;
- }
- if ( valForLPF4 >= valmax4){
- valmax4=valForLPF4;
- }
- if (valForLPF4 >= valmax4-(7*(valmax4/7))){
- level4=0;
- }
- if (valForLPF4 >= valmax4-(6*(valmax4/7))){
- level4=2;
- }
- if (valForLPF4 >= valmax4-(5*(valmax4/7))){
- level4=4;
- }
- if (valForLPF4 >= valmax4-(4*(valmax4/7))){
- level4=5;
- }
- if (valForLPF4 >= valmax4-(3*(valmax4/7))){
- level4=6;
- }
- if (valForLPF4 >= valmax4-(2*(valmax4/7))){
- level4=7;
- }
- if (valForLPF4 >= valmax4-(1*(valmax4/7))){
- level4=8;
- }
- if ( valForLPF5 >= valmax5){
- valmax5=valForLPF5;
- }
- if (valForLPF5 >= valmax5-(7*(valmax5/7))){
- level5=0;
- }
- if (valForLPF5 >= valmax5-(6*(valmax5/7))){
- level5=2;
- }
- if (valForLPF5 >= valmax5-(5*(valmax5/7))){
- level5=4;
- }
- if (valForLPF5 >= valmax5-(4*(valmax5/7))){
- level5=5;
- }
- if (valForLPF5 >= valmax5-(3*(valmax5/7))){
- level5=6;
- }
- if (valForLPF5 >= valmax5-(2*(valmax5/7))){
- level5=7;
- }
- if (valForLPF5 >= valmax5-(1*(valmax5/7))){
- level5=8;
- }
- if ( valForLPF6 >= valmax6){
- valmax6=valForLPF6;
- }
- if (valForLPF6 >= valmax6-(7*(valmax6/7))){
- level6=0;
- }
- if (valForLPF6 >= valmax6-(6*(valmax6/7))){
- level6=2;
- }
- if (valForLPF6 >= valmax6-(5*(valmax6/7))){
- level6=4;
- }
- if (valForLPF6 >= valmax6-(4*(valmax6/7))){
- level6=5;
- }
- if (valForLPF6 >= valmax6-(3*(valmax6/7))){
- level6=6;
- }
- if (valForLPF6 >= valmax6-(2*(valmax6/7))){
- level6=7;
- }
- if (valForLPF6 >= valmax6-(1*(valmax6/7))){
- level6=8;
- }
- for (y=0; y < 7; y++){
- if (y == 0 ){
- for (x=0; x < level0; x++){
- LEDbuf[(7*y)+x][0]= newCol0;
- LEDbuf[(7*y)+x][1]= newCol1;
- LEDbuf[(7*y)+x][2]= newCol2;
- }
- for (x=level0-1; x < 7; x++){
- LEDbuf[(7*y)+x][0]= 0;
- LEDbuf[(7*y)+x][1]= 0;
- LEDbuf[(7*y)+x][2]= 0;
- }
- }
- if (y == 1 ){
- for (x=0; x < level1; x++){
- LEDbuf[(7*y)+x][0]= newCol0;
- LEDbuf[(7*y)+x][1]= newCol1;
- LEDbuf[(7*y)+x][2]= newCol2;
- }
- for (x=level1-1; x < 7; x++){
- LEDbuf[(7*y)+x][0]= 0;
- LEDbuf[(7*y)+x][1]= 0;
- LEDbuf[(7*y)+x][2]= 0;
- }
- }
- if (y == 2 ){
- for (x=0; x < level2; x++){
- LEDbuf[(7*y)+x][0]= newCol0;
- LEDbuf[(7*y)+x][1]= newCol1;
- LEDbuf[(7*y)+x][2]= newCol2;
- }
- for (x=level2-1; x < 7; x++){
- LEDbuf[(7*y)+x][0]= 0;
- LEDbuf[(7*y)+x][1]= 0;
- LEDbuf[(7*y)+x][2]= 0;
- }
- }
- if (y == 3 ){
- for (x=0; x < level3; x++){
- LEDbuf[(7*y)+x][0]= newCol0;
- LEDbuf[(7*y)+x][1]= newCol1;
- LEDbuf[(7*y)+x][2]= newCol2;
- }
- for (x=level3-1; x < 7; x++){
- LEDbuf[(7*y)+x][0]= 0;
- LEDbuf[(7*y)+x][1]= 0;
- LEDbuf[(7*y)+x][2]= 0;
- }
- }
- if (y == 4 ){
- for (x=0; x < level4; x++){
- LEDbuf[(7*y)+x][0]= newCol0;
- LEDbuf[(7*y)+x][1]= newCol1;
- LEDbuf[(7*y)+x][2]= newCol2;
- }
- for (x=level4-1; x < 7; x++){
- LEDbuf[(7*y)+x][0]= 0;
- LEDbuf[(7*y)+x][1]= 0;
- LEDbuf[(7*y)+x][2]= 0;
- }
- }
- if (y == 5 ){
- for (x=0; x < level5; x++){
- LEDbuf[(7*y)+x][0]= newCol0;
- LEDbuf[(7*y)+x][1]= newCol1;
- LEDbuf[(7*y)+x][2]= newCol2;
- }
- for (x=level5-1; x < 7; x++){
- LEDbuf[(7*y)+x][0]= 0;
- LEDbuf[(7*y)+x][1]= 0;
- LEDbuf[(7*y)+x][2]= 0;
- }
- }
- if (y == 6 ){
- for (x=0; x < level6; x++){
- LEDbuf[(7*y)+x][0]= newCol0;
- LEDbuf[(7*y)+x][1]= newCol1;
- LEDbuf[(7*y)+x][2]= newCol2;
- }
- for (x=level6-1; x < 7; x++){
- LEDbuf[(7*y)+x][0]= 0;
- LEDbuf[(7*y)+x][1]= 0;
- LEDbuf[(7*y)+x][2]= 0;
- }
- }
- }
- for (y=0; y < 7; y++){
- for (x=0; x < 7; x++){
- LEDs[y][x].colors[0]=LEDbuf[(7*y)+x][0];
- LEDs[y][x].colors[1]=LEDbuf[(7*y)+x][1];
- LEDs[y][x].colors[2]=LEDbuf[(7*y)+x][2];
- }
- }
- for (y=0; y < 7; y++){
- for (x=0; x < 7; x++){
- strip.setPixelColor(XY(x,y) , strip.Color(LEDs[x][y].red(), LEDs[x][y].green(), LEDs[x][y].blue())); // Draw new pixel
- // Erase pixel a few steps back
- strip.show();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement