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.