Ciao a tutti , sono arrivato ad un punto strano del mio progetto, praticamente con una combinazione di led scatta il rele', il problema e' che prima di poter premere ancora un pulsante sembrerebbe che il programma debba leggere prima tutto l array e poi mi permette di far funzionare ancora i pulsanti, potreste dare un occhiata al programma ?Grazie in anticipo
#define P 4
#define L 4
#define ABBASTANZA 5000
const byte PULSANTI [P] = {2, 3, 4, 5};
const byte LED [P][L] =
{
6, 7, 8, 9,
10, 11, 12, 13,
14, 15, 16, 17,
19, 18, 21, 20
};
#define RELE 22
const byte PASSWORD [P] = {0, 1, 2, 0};
byte puntatori [P];
const byte T_acceso = 500;
const byte T_spento = 500;
boolean fatto = true;
void setup()
{
for (byte i = 0; i < P; i++)
{
pinMode (PULSANTI [i], INPUT);//Leggo tutto l'array di pulsanti e lo setto input
}
for (byte i = 0; i < P; i++)
{
for (byte j = 0; j < L; j++)
{
pinMode (LED [i][j], OUTPUT);
}
digitalWrite (LED [i][0], HIGH);//Accendo il primo led di ogni fila pulsanti (gli array cominciano con 0
}
}
//fine setup()
void loop()
{
for (byte i = 0; i < P; i++)
{
if (digitalRead (PULSANTI [i]))
{
digitalWrite (LED [i][puntatori[i]], LOW);
puntatori [i]++;//Alzo di 1 il puntatore
if (puntatori [i] == L)
{
puntatori [i] = 0;
}
digitalWrite (LED [i][puntatori[i]], HIGH);
delay (ABBASTANZA);
}
}
//Fine procedura cambio led. Inizio procedura confronto password
boolean uguale = true;
for (byte i = 0; i < P; i++)
{
if (PASSWORD [i] != puntatori [i])
{
uguale = false;
}
}
if (uguale && fatto)
{
Setta(0);
Lampeggiafila();
Setta(0);
Lampeggiatutti();
Setta(0);
digitalWrite (RELE, !digitalRead (RELE));
fatto = true;
}
}
void Lampeggiafila() {
for (byte i = 0; i < L + 1; i++)
{
for (byte lucifinali = 0; lucifinali < L ; lucifinali++) {
digitalWrite(LED[i][lucifinali], HIGH);
}
delay(1000);
for (byte lucifinali = 0; lucifinali < L ; lucifinali++) {
digitalWrite(LED[i][lucifinali], LOW);
}
}
}
void Setta(byte stato ) {
for (byte i = 0; i < L + 1; i++)
{
for (byte lucispente = 0; lucispente < L + 1; lucispente++) {
digitalWrite(LED[i][lucispente], stato);
}
}
}
void Lampeggiatutti() {
for (byte a = 0; a < 4; a++)
{
Setta(1);
delay (T_acceso);
Setta(0);
delay(T_spento);
}
}