Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
Sergio Ghirardelli
Published © CC BY-SA

OpticalShow - Transmit RGB leds by optical fibers

Use optical fibers to transmit RGB leds and animate your projects!

BeginnerFull instructions provided130
OpticalShow - Transmit RGB leds by optical fibers

Things used in this project

Hardware components

OpticalShow mask
×1
OpticalShow card
×1
Wemos D1 Mini
Espressif Wemos D1 Mini
×1
Fuse holder
×1
0,5A fuse 20x5
×1
PCB connector 2P 5mm
×4
PCB connector 3P 5mm
×1

Software apps and online services

KiCad
KiCad
Thinkercad
Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)

Story

Read more

Custom parts and enclosures

optical_show_00_00_qwqlIf0X1T.stl

Schematics

opticalshow_wemos_mini_card_00_vBO8Zw7vnu.pdf

opticalshow_wemos_mini_card_3d_00_fFNXfL2paj.png

Code

The World is mine code

Arduino
/*
  The World Is Mine!
 
  Versions:

  - Ver. 05 date 02/03/2023 created by Sergio Ghirardelli (first release)

*/


#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#include "muMatrix8ptRegular.h"
#include "muHeavy8ptBold.h"
#include "functions_5.h"
#include "continents.h"
#include "cities.h"


#ifndef PSTR
 #define PSTR // Make Arduino Due happy
#endif

#define PIN 14
#define LED_BLACK    0


// MATRIX DECLARATION:
// Parameter 1 = width of NeoPixel matrix
// Parameter 2 = height of matrix
// Parameter 3 = pin number (most are valid)
// Parameter 4 = matrix layout flags, add together as needed:
//   NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT:
//     Position of the FIRST LED in the matrix; pick two, e.g.
//     NEO_MATRIX_TOP + NEO_MATRIX_LEFT for the top-left corner.
//   NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: LEDs are arranged in horizontal
//     rows or in vertical columns, respectively; pick one or the other.
//   NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: all rows/columns proceed
//     in the same order, or alternate lines reverse direction; pick one.
//   See example below for these values in action.
// Parameter 5 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_GRBW    Pixels are wired for GRBW bitstream (RGB+W NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)


// Example for NeoPixel Shield.  In this application we'd like to use it
// as a 5x8 tall matrix, with the USB port positioned at the top of the
// Arduino.  When held that way, the first pixel is at the top right, and
// lines are arranged in columns, progressive order.  The shield uses
// 800 KHz (v2) pixels that expect GRB color data.
/*Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 16 , PIN,
  NEO_MATRIX_TOP     + NEO_MATRIX_LEFT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800); */

 Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(8, 8, 4, 2, PIN, 
  NEO_MATRIX_TOP     + NEO_MATRIX_LEFT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG +
  NEO_TILE_TOP + NEO_TILE_LEFT +
  NEO_TILE_ROWS + NEO_TILE_PROGRESSIVE,
  NEO_GRB            + NEO_KHZ800);
  
const uint16_t colors[] = {
  matrix.Color(0, 0, 0),      // 0 = Black
  matrix.Color(255, 0, 0),    // 1 = Red
  matrix.Color(0, 255, 0),    // 2 = Lime
  matrix.Color(0, 0, 255),    // 3 = Blue
  matrix.Color(255, 165, 0),  // 4 = Orange
  matrix.Color(255, 255, 0),  // 5 = Yellow
  matrix.Color(128, 0, 0),    // 6 = Maroon
  matrix.Color(128, 0, 128),  // 7 = Purple
  matrix.Color(255, 0, 255),  // 8 = Fuchsia
  matrix.Color(0, 128, 0),    // 9 = Green
  matrix.Color(128, 128, 0),  // 10 = Olive
  matrix.Color(0, 0, 128),    // 11 = Navy
  matrix.Color(0, 128, 128),  // 12 = Teal
  matrix.Color(0, 255, 255),  // 13 = Aqua
  matrix.Color(128, 128, 128),// 14 = Gray
  matrix.Color(192, 192, 192),// 15 = Silver
  matrix.Color(255, 255, 255),  // 16 = White
  matrix.Color(50, 50, 50),  // 17 = Dark grey
  };

//oscillator 0 initialization
unsigned long t0;
unsigned long speed0;


//oscillator 1 scrolling text
unsigned long t1;
unsigned long speed1;
bool trigger1;
int color1;
bool complete1;
String text1;
int j;

//oscillator 2 progressive pixels animation
unsigned long t2;
unsigned long speed2;
bool trigger2;
int color2;
bool complete2;

//oscillator 3 pixels disintegration animation
unsigned long t3;
unsigned long speed3;
bool trigger3;
int color3;
bool complete3;
bool pixels_status3 [32][8];
int x3;
int y3;
int count3;

//oscillator 4 random pixels animation
unsigned long t4;
unsigned long speed4;
bool trigger4;
int color4;
bool complete4;
bool pixels_status4 [32][8];
int x4;
int y4;
int count4;

//oscillator 5 peace text animation
unsigned long t5;
unsigned long speed5;
bool trigger5;
int color5;
int animation5;
int an_step;

//oscillator 6 flashlight animation
unsigned long t6;
unsigned long speed6;
bool osc6;
bool osc6_p;
bool osc6_p_mem;
bool osc6_n;
bool osc6_n_mem;

//oscillator 8 scrolling text
unsigned long t8;
unsigned long speed8;
bool trigger8;
int color8;
bool complete8;
String text8;
int j8;

//oscillator 9 scrolling text
unsigned long t9;
unsigned long speed9;
bool trigger9;
int color9;
bool complete9;
String text9;
int j9;
int x9;
int y9;
int a9;
int b9;
int c9;
int c9_old;
bool pixels_status9 [32][8];
int count9;
bool stop9;
bool unlock;

//timer1: for sequence
bool time1_q;
unsigned long time1_elapsed;
unsigned long time1_count;
int step7;

//buttons variables
bool but_u;
bool but_da;
bool u;
bool da;
bool both;
bool both_p;
bool u_n;
bool u_mem;
bool da_n;
bool da_mem;
bool dap_mem;
bool da_p;
bool both_mem;
unsigned long u_elapsed;
unsigned long u_count;
unsigned long da_elapsed;
unsigned long da_count;
unsigned long both_elapsed;
unsigned long both_count;




//program variables
int prog; //program number
int prog_tot;
bool prog1;
bool prog1_p;
bool prog1_mem;
bool prog2;
bool prog2_p;
bool prog2_mem;
bool prog3;
bool prog3_p;
bool prog3_mem;
bool prog4;
bool prog4_p;
bool prog4_mem;

bool initialize;


void setup() {
  
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setTextSize(1);
  
 // matrix.setFont(&muHeavy8ptBold);
  matrix.setBrightness(100);

  
// Init Serial Monitor
  Serial.begin(115200);
  Serial.println ("ok pronto");
  
  pinMode(13, INPUT_PULLUP); // Button 1
  pinMode(12, INPUT_PULLUP); // Button 2
  
  prog = 1;
  prog_tot = 4;
  prog1_mem = false;
  prog2_mem = false;
  prog3_mem = false;
  prog4_mem = false;
  an_step = 0;
    
  trigger1 = false;
  trigger2 = false;
  trigger3 = false;
  trigger4 = false;
  trigger5 = false;

  initialize = false;
  speed0 = 150;
  c9 = 2;
  c9_old = 0;
  stop9 = false;
   
}



void loop() {

    if (!initialize) {
        if (millis() - t0 >= speed0) 
                  {
                    prog++;
                    if (prog>prog_tot) {
                      prog = 1;
                      initialize = true;
                      }
                    t0 += speed0;
                  }
    
    }
    //oscillator 0 ("flashlight animation)
    
    else {
        
        but_u = !digitalRead(13); //digital channels reading
        but_da = !digitalRead(12);
        u = TON(but_u, 50, u_elapsed, u_count); //buttons must be pressed for at least 50 msec
        da = TON(but_da, 50, da_elapsed, da_count);
        both = TON ((u and da), 3000, both_elapsed, both_count);//both buttons are pressed for 3 seconds
        both_p = PosTrig(both, both_mem); //positive edge of both variable
        u_n = NegTrig(u, u_mem); //negative edge of u: when SW1 button is released
        da_n = NegTrig (da, da_mem); //negative edge of da: when SW2 button is released
        da_p = PosTrig (da, dap_mem);
    }
  
    

    if (u_n) {
      prog++;
      if (prog>prog_tot) { prog = 1;}
      }
    prog1_p = PosTrig(prog1, prog1_mem);
    prog2_p = PosTrig(prog2, prog2_mem);
    prog3_p = PosTrig(prog3, prog3_mem);
    prog4_p = PosTrig(prog4, prog4_mem);


  
    
    //oscillator 1 (the world is mine scrolling)
    if (millis() - t1 >= speed1) 
                  {
                    trigger1 = true;
                    t1 += speed1;
                  }

    //oscillator 2 (progressing pixels)
    if (micros() - t2 >= speed2) 
                  {
                    trigger2 = true;
                    t2 += speed2;
                  }

    //oscillator 3 (disintegration pixels)
    if (millis() - t3 >= speed3) 
                  {
                    trigger3 = true;
                    t3 += speed3;
                  }

      //oscillator 4 (random pixels)
    if (millis() - t4 >= speed4) 
                  {
                    trigger4 = true;
                    t4 += speed4;
                  }

      //oscillator 5 ("Peace" text animation)
    if (millis() - t5 >= speed5) 
                  {
                    trigger5 = true;
                    t5 += speed5;
                  }

    //oscillator 6 ("flashlight animation)
    if (millis() - t6 >= speed6) 
                  {
                    osc6 = !osc6;
                    t6 += speed6;
                  }
    osc6_p = PosTrig(osc6, osc6_p_mem);
    osc6_n = NegTrig(osc6, osc6_n_mem);

    //oscillator 8 (the world is mine scrolling)
    if (millis() - t8 >= speed8) 
                  {
                    trigger8 = true;
                    t8 += speed8;
                  }

    //oscillator 9 (the world is mine scrolling)
    if (millis() - t9 >= speed9) 
                  {
                    trigger9 = true;
                    t9 += speed9;
                  }

                              
//----------------------------------------------------------------------------------------------------------------------------
//"The World is mine" animation program
    
    if (prog==1) { 
      
          prog1 = true;
          prog2 = false;
          prog3 = false;
          prog4 = false;

           
          if (prog1_p) {
              j = matrix.width();
              speed2 = 1000000;
              matrix.fillRect(0, 0, 32, 16, colors[0]);
              matrix.show(); 
              complete1 = false;
              complete2 = false;
              complete3 = false;
              color1 = 4;
              speed1 = 80;
              text1 = "THE WORLD IS MINE";
              color2 = 1;
              speed3 = 0;
              for (x3 = 0; x3 <= 31; x3++) {
                    for ( y3 = 0; y3 <= 7; y3++) {
                      pixels_status3 [x3][y3] = false;
                      }
                    }
            }
          else {
                  if (trigger1) {//scrolling text
                      int lung = text1.length();
                      matrix.fillRect(0, 8, 32, 16, colors[0]);
                      matrix.setTextColor(colors[color1]);
                      matrix.setCursor(j, 8);
                      matrix.print(text1);
                      j--;
                      if(j < (-lung*6)) {
                        complete1 = true;
                        j = matrix.width();
                        color1 = random(1, 16);
                        }
                     matrix.show();
                     trigger1=false;
                    }
                  
                 
                 if (!complete2) {
                      if (trigger2) {//progressive pixels animation
                          matrix.fillRect(0, 0, 32, 8, colors[color2]);                
                          matrix.show();   
                          if (color2==1) {color2 = 3; } 
                          else if (color2==3) {color2 = 2; }
                          else if (color2==2) {color2 = 8; }
                          else if (color2==8) {color2 = 5; }
                          else if (color2==5) {color2 = 13; }
                          else if (color2==13) {color2 = 4; }
                          else if (color2==4) {color2 = 16; }
                          else if (color2==16) {color2 = 1; }
                          speed2 = speed2 - (speed2 / 100 * 5);
                          if (speed2< 100)  {
                            complete2 = true;
                            speed2 = 1000000;
                            }        
                          trigger2=false;
                      }

                 }

                 else {
                      int a = random(0, 32);
                      int b = random(0, 8);
                      if  (!pixels_status3 [a][b]) {
                              if (trigger3) 
                                {
                                  matrix.drawPixel(a, b, colors[0]);
                                  pixels_status3 [a][b]=true;  
                                  matrix.show();
                                  count3++;
                                 }
                             
                          }
                          
                      if (count3>255) {
                                  count3=0;
                                  complete3 = true;
                                  complete2 = false;
                                  for (x3 = 0; x3 <= 31; x3++) {
                                        for ( y3 = 0; y3 <= 7; y3++) {
                                              pixels_status3 [x3][y3] = false;
                                              }
                                  }
                  
                      }
                   
                  }   
          }
   
     }

//----------------------------------------------------------------------------------------------------------------------------
//"Peace" animation program
    
    if (prog==2) {
          prog1 = false;
          prog2 = true;
          prog3 = false;
          prog4 = false;
          
          if (prog2_p) {
              speed2 = 1000000;
              speed4 = 10;
              speed5 = 100;
              an_step = 0;
              animation5 = 1;
              color5 = 1;
              matrix.fillRect(0, 0, 32, 16, colors[0]); 
              matrix.show();
           
          }

          int a = random(0, 32);
          int b = random(0, 8);
          int c = random(1, 16);    

          if  (!pixels_status4 [a][b]) {
                  if (trigger4) 
                    {
                      matrix.drawPixel(a, b, colors[c]);
                      pixels_status4 [a][b]=true;  
                      matrix.show();
                      count4++;
                    }
                 
              }
              
          if (count4>255) {
                      matrix.fillRect(0, 0, 32, 8, colors[0]);
                      count4=0;
                      for (x4 = 0; x4 <= 31; x4++) {
                          for ( y4 = 0; y4 <= 7; y4++) {
                            pixels_status4 [x4][y4] = false;
                          }
          
                      }
                    }
          
          
                    
           if (trigger5) {

                    matrix.setTextColor(colors[color5]);
                    matrix.setCursor(0, 8);
                    matrix.print("P");
                    
                
                    matrix.setTextColor(colors[color5+1]);
                    matrix.setCursor(6, 8);
                    matrix.print("E");
                    
                
                    matrix.setTextColor(colors[color5+2]);
                    matrix.setCursor(12, 8);
                    matrix.print("A");
                    
               
                    matrix.setTextColor(colors[color5+3]);
                    matrix.setCursor(18, 8);
                    matrix.print("C");
                    
                
                    matrix.setTextColor(colors[color5+4]);
                    matrix.setCursor(24, 8);
                    matrix.print("E");
                    color5++;

                    if (color5>14) {color5 = 1; }
                                        
                    trigger5 = false;
                    
                 }
              }    
                  
//----------------------------------------------------------------------------------------------------------------------------
//"Continents" animation program   

 if (prog==3) {
          prog1 = false;
          prog2 = false;
          prog3 = true;
          prog4 = false;
          
          if (prog3_p) {
              speed6 = 250;
              step7 = 0;
              speed8 = 80;
              j8 = matrix.width();
              text8 = "North America";
              color8 = 9;
              matrix.fillRect(0, 0, 32, 16, colors[0]); 
              matrix.show();
            
           
          }

          time1_q = TON (!time1_q, 10000, time1_elapsed, time1_count);

          if (time1_q) {
                step7++;
                if (step7 > 7) {
                  step7 = 1;
                  speed8 = 80;
                  j8 = matrix.width();
                  text8 = "North America";
                  color8 = 9;
                  matrix.fillRect(0, 0, 32, 16, colors[0]); 
                  matrix.show();
                  }
            }  
         
          if (trigger8) {//scrolling text
                      int lung = text8.length();
                      matrix.fillRect(0, 8, 32, 16, colors[0]);
                      matrix.setTextColor(colors[color8]);
                      matrix.setCursor(j8, 8);
                      matrix.print(text8);
                      j8--;
                      if(j8 < (-lung*6)) {
                        complete8 = true;
                        j8 = matrix.width();                        
                        }
                     matrix.show();
                     trigger8 = false;
                    }
                    
          if (step7==1) { //North America           
                      if (osc6_p) {
                        matrix.drawBitmap(0, 0, continents[0], 8, 8, colors[9]);
                        matrix.show(); 
                        }
                      if (osc6_n) {
                        matrix.drawBitmap(0, 0, continents[0], 8, 8, colors[0]);
                        matrix.show(); 
                        }

                      
                        
                  }
          
          if (step7==2) { //South America             
                      if (time1_q) {
                        matrix.fillRect(0, 8, 32, 16, colors[0]); 
                        matrix.drawBitmap(0, 0, continents[0], 8, 8, colors[9]);
                        matrix.show();
                        j8 = matrix.width();
                        text8 = "South America";
                        color8 = 3;                
                        }
                      if (osc6_p) {
                        matrix.drawBitmap(0, 0, continents[1], 8, 8, colors[3]);
                        matrix.show(); 
                        }
                      if (osc6_n) {
                        matrix.drawBitmap(0, 0, continents[1], 8, 8, colors[0]);
                        matrix.show(); 
                        }

                      


                        
                  }
           if (step7==3) { //Europe            
                      if (time1_q) {
                        matrix.fillRect(0, 8, 32, 16, colors[0]); 
                        matrix.drawBitmap(0, 0, continents[1], 8, 8, colors[3]);
                        matrix.show();
                        j8 = matrix.width();
                        text8 = "Europe";
                        color8 = 1;
                        }
                      if (osc6_p) {
                        matrix.drawBitmap(8, 0, continents[2], 8, 8, colors[1]);
                        matrix.show(); 
                        }
                      if (osc6_n) {
                        matrix.drawBitmap(8, 0, continents[2], 8, 8, colors[0]);
                        matrix.show(); 
                        }
                  }      
           if (step7==4) { //Africa            
                      if (time1_q) {
                        matrix.fillRect(0, 8, 32, 16, colors[0]);
                        matrix.drawBitmap(8, 0, continents[2], 8, 8, colors[1]);
                        matrix.show();
                        j8 = matrix.width();
                        text8 = "Africa";
                        color8 = 5;
                        }
                      if (osc6_p) {
                        matrix.drawBitmap(16, 0, continents[3], 8, 8, colors[5]);
                        matrix.show(); 
                        }
                      if (osc6_n) {
                        matrix.drawBitmap(16, 0, continents[3], 8, 8, colors[0]);
                        matrix.show(); 
                        }
                  }   
            if (step7==5) { //Asia          
                      if (time1_q) {
                        matrix.fillRect(0, 8, 32, 16, colors[0]);
                        matrix.drawBitmap(16, 0, continents[3], 8, 8, colors[5]);
                        matrix.show();
                        j8 = matrix.width();
                        text8 = "Asia";
                        color8 = 13;
                        }
                      if (osc6_p) {
                        matrix.drawBitmap(8, 0, continents[4], 8, 8, colors[13]);
                        matrix.drawBitmap(16, 0, continents[5], 8, 8, colors[13]);
                        matrix.drawBitmap(24, 0, continents[6], 8, 8, colors[13]);
                        matrix.show(); 
                        }
                      if (osc6_n) {
                        matrix.drawBitmap(8, 0, continents[4], 8, 8, colors[0]);
                        matrix.drawBitmap(16, 0, continents[5], 8, 8, colors[0]);
                        matrix.drawBitmap(24, 0, continents[6], 8, 8, colors[0]);
                        matrix.show(); 
                        }
                  }   
             if (step7==6) { //Oceania           
                      if (time1_q) {
                        matrix.fillRect(0, 8, 32, 16, colors[0]);
                        matrix.drawBitmap(8, 0, continents[4], 8, 8, colors[13]);
                        matrix.drawBitmap(16, 0, continents[5], 8, 8, colors[13]);
                        matrix.drawBitmap(24, 0, continents[6], 8, 8, colors[13]);
                        matrix.show(); 
                        j8 = matrix.width();
                        text8 = "Oceania";
                        color8 = 8;                        
                        }
                      if (osc6_p) {
                        matrix.drawBitmap(24, 0, continents[7], 8, 8, colors[8]);
                        matrix.show(); 
                        }
                      if (osc6_n) {
                        matrix.drawBitmap(24, 0, continents[7], 8, 8, colors[0]);
                        matrix.show(); 
                        }
                  }    
              if (step7==7) { //For a united world!          
                      if (time1_q) {
                        matrix.fillRect(0, 8, 32, 16, colors[0]);
                        matrix.show(); 
                        j8 = matrix.width();
                        text8 = "FOR A UNITED WORLD!";
                        color8 = 16;                        
                        }
                      if (osc6_p) {
                        matrix.fillRect(0, 0, 32, 8, colors[16]);
                        matrix.show(); 
                        }
                      if (osc6_n) {
                        matrix.fillRect(0, 0, 32, 8, colors[0]);
                        matrix.show(); 
                        }
                  }                  
    }


//----------------------------------------------------------------------------------------------------------------------------
//"Cities" animation program   

  if (prog==4) {
          prog1 = false;
          prog2 = false;
          prog3 = false;
          prog4 = true;
          
            
          if (prog4_p) {
              
              matrix.fillRect(0, 0, 32, 16, colors[0]); 
              matrix.show(); 
              speed9 = 40;

              for (x9 = 0; x9 <= 31; x9++) {
                          for ( y9 = 0; y9 <= 7; y9++) {
                            pixels_status9 [x9][y9] = false;
                          }
              }
              count9 = 0;
              complete9 = true; 
          }
  
           if (complete9) {
                     
                     matrix.show();
                     a9 = random(0, 32);
                     b9 = random(0, 8);
                     
                    
                     
                
                     if  (!pixels_status9 [a9][b9]) {
                            pixels_status9 [a9][b9] = true;
                            count9++;
                            text9 = city [a9] [b9];
                            complete9 = false;
                         }
                 
              }
              else {
                  
                  if (osc6_p) {
                        matrix.drawPixel(a9, b9, colors[c9]);
                        matrix.show(); 
                        }
                      if (osc6_n) {
                        matrix.drawPixel(a9, b9, colors[0]);
                        matrix.show(); 
                        }
                  
               if (count9>255) {
                      matrix.fillRect(0, 0, 32, 8, colors[0]);
                      count9=0;
                      for (x9 = 0; x9 <= 31; x9++) {
                          for ( y9 = 0; y9 <= 7; y9++) {
                            pixels_status9 [x9][y9] = false;
                          }
          
                      }
                    }  
                  
                if (!stop9) {
                   
                      if (da_p) { unlock = true;}
                      if (unlock && da_n) {
                      unlock = false;
                      stop9 = true;
                      }
                
                      if (trigger9) {//scrolling text
                          int lung = text9.length();
                          matrix.fillRect(0, 8, 32, 16, colors[0]);
                          matrix.setTextColor(colors[c9]);
                          matrix.setCursor(j9, 8);
                          matrix.print(text9);
                          j9--;
                          if(j9 < (-lung*6)) {
                              j9 = matrix.width();
                              matrix.fillRect(0, 8, 32, 16, colors[0]);
                              matrix.drawPixel(a9, b9, colors[17]);
                              complete9 = true;                     
                            }
                         matrix.show();
                         trigger9 = false;
                        } 
                   }
                 
                  
                  
                  
                  Serial.println (unlock);
                  
                  if (stop9) {
                    if (da_p) { unlock = true;}
                    if (unlock && da_n) {
                      unlock = false;
                      stop9 = false;
                      }
                   }
                
                        

              }

         }

              
      
          
                
                
               
          
           
          

   



   
}

Github OpticalShow

Credits

Sergio Ghirardelli
3 projects • 5 followers
I'm a maker. I love to create, I love to travel and I never stop dreaming...
Contact

Comments

Please log in or sign up to comment.