Switch di animazioni dot matrix con pin 2

ho fatto un video per capire quante volte la lampada lampeggiava, risultato circa 6 volte al secondo.
Ecco il code, l'ho un po stravolto per le varie modifiche che ho fatto ma a parte la rilevazione per colpa della lampada lampeggiante funzia perfettamente, cosa suggerisci per far rilevare la lampadina lampeggiante?

#include <LedControl.h>
int DIN = 10;
int CS =  9;
int CLK = 8;

    
    //Frecce
    byte sing[8]=   {0x41,0x22,0x14,0x08,0x00,0x00,0x00,0x00};
    byte doppia[8]= {0x41,0x22,0x14,0x08,0x41,0x22,0x14,0x08};
    byte vuoto[8]= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
   

    //animation
    byte r1[8]= {0xC3,0x66,0x3C,0x18,0x18,0x3C,0x66,0xC3};
    byte r2[8]= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
    byte r3[8]= {0x00,0xC3,0xC3,0x00,0x00,0xC3,0xC3,0x00};
   
  
    
    //lock
    byte b1[8]= {0x60,0x60,0x60,0x60,0x60,0x60,0x7C,0x7C};
    byte b2[8]= {0x3C,0x7E,0x66,0x66,0x66,0x66,0x7E,0x3C};
    byte b3[8]= {0x3C,0x7E,0x60,0x60,0x60,0x60,0x7E,0x3C};
    byte b4[8]= {0x66,0x66,0x6C,0x78,0x78,0x6C,0x66,0x66};
    byte b5[8]= {0x88,0x94,0x94,0xC8,0x35,0x46,0x46,0x35};
   

int statoPin = 0; //La variabile di lettura del pin collegato alla lampada
int vecchioStatoPin =0; // Memorizza il stato prima del cambio
int lampada = 2; //Pin dove è collegata la lampada
int passo = 1; //Tiene conto cosa deve fare
int ripeti = 1; //Tiene conto quante volte ripetere la serie

unsigned long tempoLetto = 0; //Variabile che tiene in memoria il tempo letto da millis();

LedControl lc=LedControl(DIN,CLK,CS,0);



void printByte(byte character [])
{
  int i = 0;
  for(i=0;i<8;i++)
  {
    lc.setRow(0,i,character[i]);
  }
}

void setup(){
 lc.shutdown(0,false);       
 lc.setIntensity(0,1);      //Adjust the brightness maximum is 1
 lc.clearDisplay(0);
 pinMode(lampada, INPUT); //Assegno lo stato del pin della lampada
}

void loop(){

  statoPin = digitalRead(lampada);
  if (statoPin != vecchioStatoPin)
  {
    passo = 1;
    ripeti = 1;
    vecchioStatoPin = statoPin;
  }

  if (statoPin == HIGH)
  {
    switch(passo)
    {
      case 1:
        //lock
        printByte(b1);
        if (millis() - tempoLetto >= 1000)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 2:
        //lock
        printByte(b2);
        if (millis() - tempoLetto >= 1000)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
       case 3:
        //lock
        printByte(b3);
        if (millis() - tempoLetto >= 1000)
          {
            passo++;
            tempoLetto = millis();
          }
      case 4:
        //lock
        printByte(b4);
        if (millis() - tempoLetto >= 1000)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 5:
        //lock
        printByte(b5);
        if (millis() - tempoLetto >= 3000)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 6:
        //lock
        printByte(sing);
        if (millis() - tempoLetto >= 1300)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 7:
        //lock
        printByte(doppia);
        if (millis() - tempoLetto >= 1300)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 8:
        //lock
        printByte(vuoto);
        if (millis() - tempoLetto >= 100)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 9:
        //lock
        printByte(doppia);
        if (millis() - tempoLetto >= 80)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
       case 10:
        printByte(vuoto);
        if (millis() - tempoLetto >= 80)
          {
            if (ripeti < 6)
            {
              passo = 9;
              ripeti++;
            }
            else
            {
              passo++;
              ripeti = 1;
            }
            tempoLetto = millis();
          }
        break;
      case 11:
        //lock
        printByte(doppia);
        if (millis() - tempoLetto >= 1300)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 12:
        //lock
        printByte(vuoto);
        if (millis() - tempoLetto >= 1000)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 13:
        //lock
        printByte(sing);
        if (millis() - tempoLetto >= 1300)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 14:
        //lock
        printByte(doppia);
        if (millis() - tempoLetto >= 1300)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 15:
        //lock
        printByte(vuoto);
        if (millis() - tempoLetto >= 100)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 16:
        //lock
        printByte(doppia);
        if (millis() - tempoLetto >= 80)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
       case 17:
        printByte(vuoto);
        if (millis() - tempoLetto >= 80)
          {
            if (ripeti < 6)
            {
              passo = 16;
              ripeti++;
            }
            else
            {
              passo++;
              ripeti = 1;
            }
            tempoLetto = millis();
          }
        break;
      case 18:
        //lock
        printByte(doppia);
        if (millis() - tempoLetto >= 1300)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 19:
        //lock
        printByte(vuoto);
        if (millis() - tempoLetto >= 1000)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 20:
        //lock
        printByte(sing);
        if (millis() - tempoLetto >= 1300)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 21:
        //lock
        printByte(doppia);
        if (millis() - tempoLetto >= 1300)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 22:
        //lock
        printByte(vuoto);
        if (millis() - tempoLetto >= 100)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 23:
        //lock
        printByte(doppia);
        if (millis() - tempoLetto >= 80)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
       case 24:
        printByte(vuoto);
        if (millis() - tempoLetto >= 80)
          {
            if (ripeti < 4)
            {
              passo = 23;
              ripeti++;
            }
            else
            {
              passo++;
              ripeti = 1;
            }
            tempoLetto = millis();
          }
        break;
      case 25:
        //lock
        printByte(doppia);
        if (millis() - tempoLetto >= 1300)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 26:
        //lock
        printByte(vuoto);
        if (millis() - tempoLetto >= 1000)
          {
            passo = 1;
            tempoLetto = millis();
          }
        break;
    }
  }
  else
  {
    switch(passo)
    {
      case 1:
        printByte(r2);
        if (millis() - tempoLetto >= 50)
          {
            passo++;
            tempoLetto = millis();
          }
        break;
      case 2:
        printByte(r3);
        if (millis() - tempoLetto >= 50)
          {
            if (ripeti < 11)
            {
              passo = 1;
              ripeti++;
            }
            else
            {
              passo++;
              ripeti = 1;
            }
            tempoLetto = millis();
          }
        break;
      case 3:
        printByte(r1);
        if (millis() - tempoLetto >= 3000)
          {
            passo = 1;
            tempoLetto = millis();
          }
        break;
    }
    
  }
}