Psycho Eyes
From Fri3d WIKI 2018
Revision as of 00:08, 24 August 2018 by Hanst (Talk | contribs) (Created page with " <code>#</code>include <Fri3dMatrix.h> class GrayscaleMatrix : public Fri3dMatrix { public: int frameCounter; int dutyCycle[ 14 ][ 10 ]; public: void r...")
#
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++ ) {
// send right eye
for( int i = 0; i < 7; 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 );
}
// send left eye
for( int i = 0; i < 7; i++ )
if( ( frameCounter % dutyCycle[ 6 - i ][row] ) == 0 ) // here's the grayscale magic
shiftIntoRegister( 1 - buffer[ row ][ 6 - 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++;
}
}