Aiuto per capire qual'è il mio errore

Ciao a tutti ho creato questo programmino (è ancora in attesa di migliorie)

#include <LiquidCrystal.h>

LiquidCrystal lcd(2, 3, 4, 5, 6, 7, 8);
char password[5] = {95,95,95,95};
char Pcorretta[5] = {"1992"};
char tasti[5][5] = {
                    {"1", "2", "3", "A"}, 
                    {"4", "5", "6", "B"},
                    {"7", "8", "9", "C"},
                    {"*", "0", "#", "D"}
                   };
char tastoPremuto1;
char tastoPremuto2;
int latchPin = 12;
int clockPin = 13;
int dataPin = 11;
long oldTime;
int lockCr;
boolean Blink = HIGH;
boolean risposta = 0;
byte chiave1 [8] = {14,17,17,17,17,17,14};
byte chiave2 [8] = {0,0,0,31,2,2,0};

void setup()

{
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(14, INPUT);
  pinMode(15, INPUT);
  pinMode(16, INPUT);
  pinMode(17, INPUT);
  lcd.createChar(1, chiave1);
  lcd.createChar(2, chiave2);
  lcd.begin(7, 2);
  lcd.noCursor();
  Serial.begin(9600);
  //
  oldTime = 650;
  lcd.home();
  lcd.print("PASSWORD");
  Blink = 1;
}

void loop() 
{
  while(1)
  {
    for(int cr=0; cr<4; cr++)
    {
      if ((Blink == LOW) && (password[cr] == 95)){
        password[cr] = 32;
      }
      if ((Blink == HIGH) && (password[cr] == 32)){
        password[cr] = 95;
      }
      lcd.setCursor((cr+4), 1);
      lcd.write(password[cr]);
    }
    if (oldTime < millis())
    {
      Blink = !Blink;
      oldTime = (millis() + 650);  
    }
    if (lockCr == 4){
      break;
    }
    leggoKeyboar();
  }
  
  
  delay(1000);
  lcd.clear();
  for(int i=0; i<48; i++)
  {
    if(password[i]!=Pcorretta[i])
    {
      risposta=1;
      break;
    }
    else
    {
      risposta=0;
    }
  }
  Serial.println(risposta);
  if(risposta == 0)
  {
    lcd.clear();
    lcd.home();
    lcd.print("UNLOCKED");
    lcd.setCursor(6, 1);
    lcd.write(1);
    lcd.setCursor(7, 1);
    lcd.write(2);
    delay(5000);
    while(1){
    }
  }else{
    lcd.clear();
    lcd.home();
    lcd.print("ERROR");
    for(int j=0; j<9; j++)
    {
      lcd.setCursor(6, 1);
      lcd.write(1);
      lcd.setCursor(7, 1);
      lcd.write(2);
      delay(400);
      lcd.setCursor(6, 1);
      lcd.write(120);
      lcd.setCursor(7, 1);
      lcd.write(120);
      delay(400);
    }
    oldTime = 650;    //reset
    lcd.clear();
    lcd.home();
    lcd.print("PASSWORD");
    Blink = 1;
    lockCr=0;
    for(int i=0; i<5; i++)
    {
      password[i] = 95;
    }
    
  } 
}


void leggoKeyboar()
{
  for (int k=0, k<4, k++)
  {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, (B00000001 << k));
    digitalWrite(latchPin, HIGH);
    for (int l=0, l<4, l++)
    {  
      if (digitalRead(l+14) != 0)
      {
        tastoPremuto1 = tasti[l][k];
        break;
      }else{
        tastoPremuto1 = 0;
      }
    }
  }
  delay(30);
  for (int k=0, k<4, k++)
  {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, (B00000001 << k));
    digitalWrite(latchPin, HIGH);
    for (int l=0, l<4, l++)
    {  
      if (digitalRead(l+14) != 0)
      {
        tastoPremuto2 = tasti[l][k];
        break;
      }else{
        tastoPremuto2 = 0;
      }
    }
  }
  if(tastoPremuto1 == tastoPremuto2) && (tastoPremuto1 != 0)
  {
    while(tastoPremuto1 == tastoPremuto2)
    {
      for (int k=0, k<4, k++)
      {
        digitalWrite(latchPin, LOW);
        shiftOut(dataPin, clockPin, LSBFIRST, (B00000001 << k));
        digitalWrite(latchPin, HIGH);
        for (int l=0, l<4, l++)
        {  
          if (digitalRead(l+14) != 0)
          {
            tastoPremuto2 = tasti[l][k];
            break;
          }else{
            tastoPremuto2 = 0;
          }
        }
      }
    }
    password[lockCr] = tastoPremuto1;
    lockCr++;
  }
}

l'ho controllato e ricontrollato ma non mi sembra ci siano errori eppure l'IDE mi da i seguenti errori

password_lcd:11: error: too many initializers for 'char [5]'
password_lcd:11: error: too many initializers for 'char [5]'
password_lcd:11: error: too many initializers for 'char [5]'
password_lcd:11: error: too many initializers for 'char [5]'
password_lcd.ino: In function 'void leggoKeyboar()':
password_lcd:134: error: expected initializer before '<' token
password_lcd:191: error: expected primary-expression at end of input
password_lcd:191: error: expected `;' at end of input
password_lcd:191: error: expected primary-expression at end of input
password_lcd:191: error: expected `)' at end of input
password_lcd:191: error: expected statement at end of input
password_lcd:191: error: expected `}' at end of input

mi riuscireste ad aiutare a capire di che si tratta perchè io non riesco a far coincidere gli errori riportati con ciò che c'è scritto nello Sketch

char tasti[4][4] = {
                    {'1', '2', '3', 'A'}, 
                    {'4', '5', '6', 'B'},
                    {'7', '8', '9', 'C'},
                    {'*', '0', '#', 'D'}
                   };

Così dovrebbe funzionare. Il numero degli elementi effettivo è 4, enumerabili partendo da 0. 'A' per il compilatore è uguale a 65 e gli altri caratteri sono codificati secondo lo standard ASCII.

Quando un array è inizializzato con {1,2,3,4, ecc} non è necessario specificare il numero di elementi perchè il compilatore dimesiona l'array contando il numero di elementi. Se l'array è grande 5 e inizializzi solo 4 elementi, il 5 potrebbe contenere spazzatura, oppure essere inizializzato a 0.

Le stringhe sono collezioni di caratteri contenuti in un array nel quale l'ultimo elemento viene riempito con il carattere di fine stringa '\0'. Nota che '' apre la sequenza di escape e tutto ciò che segue viene interpretato in modo speciale, così '\t', '\n' sono rispettivamente una tabulazione e un fine riga.

La rappresentazione umana della stringa o di altro viene trattata sempre come numeri, anche il numero decimale è trattato come binario a fare questo è il compilatore. Il C/C++ è un linguaggio molto vicino alla macchina e molto meno all'uomo e si trova un gradino più alto dell'assembley il quale si trova un gradino più alto del linguaggio macchina composto da sequenze binarie.

void leggoKeyboar()
{
  for (int k=0, k<4, k++)

Al posto della virgola metti il punto e virgola.

Il compilatore protesta con messagi di errore criptici, che però sono molto dettagliati, c'è il nome del file, la funzione, il numero di riga, l'errore, ecc, il difficile è che non c'è un . a fine errore ma è una sequenza da interpretare.

Parere personale:
È frustrante perdersi per così poco, gli errori lessicali derivano da distrazione o mancato studio, ma anche da una predisposizione che porta l'osservatore ad osservare l'insieme è non il dettaglio, confondendo di conseguenza le virgole e altri caratteri considerati minori nella nostra lingua. Il compilatore è fiscale è non ha alternativa, fosse una macchina intelligente si rischierebbe di essere fraintesi come accade fra gli umani.

Codice troppo complicato per un principiante, devi costringerti a scrivere codice di tuo pugno che svolga anche funzionalità banali ma che coinvolga tutti i costrutti del linguaggio, if, if else, switch case, while, do while, ecc. Scrivendole di tuo pugno ti verra automatico aggiungere il ; a fine riga, non farai l'errore if (k=0) ma scriverai if (k==0) ecc.

Ciao.

aggiungerei che per evitare casini con gli indici, un sistema veloce e sicuro è non metterli se si inizializza l'array alla creazione!

char tasti[][] = {
                    {'1', '2', '3', 'A'}, 
                    {'4', '5', '6', 'B'},
                    {'7', '8', '9', 'C'},
                    {'*', '0', '#', 'D'}
                   };