Switch di animazioni dot matrix con pin 2

Allora, vedi questo codice, ricavato dal tuo, al quale ho fatto alcune modifiche, prova a descrivermi cosa ho fatto (così se non comprendi qualcosa proviamo a spiegartelo), e poi anche come funziona (non ho quel display quindi non l'ho provato, fai anche una prova e dimmi l'esito).

#include <LedControl.h>

// Definizione dei pin
#define DIN 10
#define CS 9
#define CLK 8
// Pin di ingresso del sensore lampadina (da simulare con un pulsante)
#define LAMP 7

// Definisce quale animazione mostrare
#define ANIM 0
@define LOCK 1
// Animazione iniziale è 0 ANIM
int mostra = ANIM;

//animation
const byte r1[8]= {0xC3,0x66,0x3C,0x18,0x18,0x3C,0x66,0xC3};
const byte r2[8]= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
const byte r3[8]= {0x00,0xC3,0xC3,0x00,0x00,0xC3,0xC3,0x00};

//lock
const byte b1[8]= {0x60,0x60,0x60,0x60,0x60,0x60,0x7C,0x7C};
const byte b2[8]= {0x3C,0x7E,0x66,0x66,0x66,0x66,0x7E,0x3C};
const byte b3[8]= {0x3C,0x7E,0x60,0x60,0x60,0x60,0x7E,0x3C};
const byte b4[8]= {0x66,0x66,0x6C,0x78,0x78,0x6C,0x66,0x66};
const byte b5[8]= {0x88,0x94,0x94,0xC8,0x35,0x46,0x46,0x35};

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

void setup()
{
  pinMode(LAMP,INPUT);
  lc.shutdown(0,false);       
  lc.setIntensity(0,1);      //Adjust the brightness maximum is 1
  lc.clearDisplay(0);    
}

void loop()
{
  if ( digitalRead(LAMP) == HIGH )
    mostra = LOCK;
  else
    mostra = ANIM;

  switch (mostra)
  {
    case ANIM:
      //animation
      printByte(r2);
      delay(50);
      printByte(r3);
      delay(50);
      printByte(r2);
      delay(50);
      printByte(r3);
      delay(50);
      printByte(r2);
      delay(50);
      printByte(r3);
      delay(50);
      printByte(r2);
      delay(50);
      printByte(r3);
      delay(50);
      printByte(r2);
      delay(50);
      break;

    case LOCK:
      printByte(b1);
      delay(1000);
      printByte(b2);
      delay(1000);
      printByte(b3);
      delay(1000);
      printByte(b4);
      delay(1000);
      printByte(b5);
      delay(3000);
      break;
  }
}

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

Chiaramente ci sono ancora alcune cosette che si possono modificare per renderlo migliore e più generico, ma per ora non voglio stravolgerti eccessivamente con troppi cambiamenti.