Psycho Eyes

From Fri3d WIKI 2018
Jump to: navigation, search
 #include <Fri3dMatrix.h>
 
 class GrayscaleMatrix : public Fri3dMatrix {
 public:
   int frameCounter;
   int dutyCycle[ 14 ][ 10 ];  
 public:
   void render( int delay );
 };
 
 void
 GrayscaleMatrix::render( int delay ) {
   frameCounter++;
   for( int row = 0; row < 5; row++ ) {
     
     for( int i = 0; i < 14; i++ ) 
       if( ( frameCounter % dutyCycle[ 13 - i ][row]) == 0 ) // here's the grayscale magic
         shiftIntoRegister( 1 - buffer[ row ][ 13 - i ] );
       else
         shiftIntoRegister( 1 );
     for( int i = 0; i < 5; i++ ) {
       if( row == i  ) // here's the grayscale magic
         shiftIntoRegister( 1 );
       else
         shiftIntoRegister( 0 );
     }
       
     digitalWrite( LATCH_PIN, 0 );
     digitalWrite( LATCH_PIN, 1 );
     
     vTaskDelay( delay );
   }
 }
 
 GrayscaleMatrix matrix = GrayscaleMatrix();
 
 void rendereyes(int x, int y, int onoff){
   int del = 200;
   matrix.setPixel(x, y, onoff);
   matrix.setPixel(13 - x, y, onoff);
   matrix.dutyCycle[x][y] = 2;
   matrix.dutyCycle[13-x][y] = 2;
   for( int m = 0; m < del; m++ )
     matrix.render( 0 );
   for(int i=0;i<14;i++)
     for(int j=0;j<10;j++)
       matrix.dutyCycle[i][j] = matrix.dutyCycle[i][j]*1.3+.5;
 }
 
 void setup() {
   for(int i=0;i<14;i++)
     for(int j=0;j<10;j++)
         matrix.dutyCycle[i][j] = 1000;
   matrix.clear();
   Serial.begin(9600);
   matrix.stopRenderThread(); // we'll run our own renderer
 }
 
 void loop() {
   //int onoff = (onoff +1)%2;
   int onoff = 1;
   int d = 1;
   int r = 1;
   int x = 3;
   int y = 2;
   rendereyes(x,y,onoff);
   for (int i=0;i<5; i++){
     for (int j=1;j<=d; j++){
       x = x+r;
       rendereyes(x,y,onoff);
     }
     for (int j=1;j<=d; j++){
       y = y+r;
       rendereyes(x,y,onoff);
     }
     r= r * -1;
     d++;
   }
 }