gpb01:
Veramente l'idea ce l'ha molto chiara e te l'ha detta ... sei tu che non l'hai capita ... rileggi la sua risposta !Guglielmo
Guglielmo alla fine ho risolto cosi'(devo fare un altra domanda pero su questo programma si deve chiudere questa e se ne fa un altra o continuiamo qua?):
#define P 4
#define L 4
#define ABBASTANZA 500
#define LperP 4
const byte LEDperPULSANTI [P] [LperP] = { 23,24,25,26};
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;
byte stato_pwd;
unsigned long start;
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]))
//Qui lo posso usare direttamente senza passare per una variabile perché appunto mi serve subito
{
digitalWrite (LED [i][puntatori[i]], LOW);
//Magata: spengo il led (sicuramente acceso)
//presente sotto il pulsante i, certamente premuto,
//nella posizione attuale presa da un array di posizioni, nella posizione il cui numero è ancora i
puntatori [i]++;//Alzo di 1 il puntatore
if (puntatori [i] == L)
{
puntatori [i] = 0;
}
digitalWrite (LED [i][puntatori[i]], HIGH);
delay (ABBASTANZA);
}
}
Ledperpulsanti;
if (!confronto())
{
stato_pwd = 0;
}
if (confronto() && stato_pwd == 0 )
{
start = millis();
stato_pwd = 1;
}
if (stato_pwd == 1 )
{
if ( millis() - start > 5000)
{
stato_pwd = 2;
}
}
if (stato_pwd == 2 )
{
gioco_luci();
stato_pwd = 3;
}
}
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);
}
}
byte confronto ()
{
boolean uguale = true;
for (byte i = 0; i < P; i++)
{
if (PASSWORD [i] != puntatori [i])
{
uguale = false;
}
}
return (uguale);
}
void gioco_luci()
{
Setta(0);
Lampeggiafila();
Setta(0);
Lampeggiatutti();
Setta(0);
digitalWrite (RELE, !digitalRead (RELE));
fatto = true;
}
void Ledperpulsanti()
{
for (byte i = 0; i < P; i++)
{
digitalWrite (LEDperPULSANTI[i], digitalRead (PULSANTI[i]));
}
}