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;
}
}
}