Checking acces users / Acceso usuarios

Buenos días a todo el mundo.
Tengo un pequeño problema con mi codigo. No me dá errores de compilación pero cuando pruebo a introducir alguno de los codigos de usuario declarados previamente me devuelve siempre “PIN erroneo”. ¿Puede alquien indicarme qué está fallando? Abajo os dejo mi codigo.
Muchas gracias!!!

char usuario1[4]={'1','2','3','#'};
char usuario2[4]={'4','5','6','#'};
char usuario3[4]={'7','8','9','#'};
char usuario4[4]={'0','9','8','#'};
char usuario5[4]={'7','6','5','#'};
char attempt[4]={0,0,0,0};
char attempt2[4]={0,0,0,0};



void checkPIN()
{
  int correct=0;
  for (int q=0; q<=3; q++)
  {   
    if (attempt[q]==usuario1[q]||attempt[q]==usuario2[q]||attempt[q]==usuario3[q]||attempt[q]==usuario4[q]||attempt[q]==usuario5[q])
   {
     attempt2[q]=attempt[q];
     correct++;   
   }
  }
  if ((correct==3) && ((attempt2[4]==usuario1[4]) || (attempt2[4]==usuario2[4]) || (attempt2[4]==usuario3[4]) || (attempt2[4]==usuario4[4]) || (attempt2[4]==usuario5[4])))
   {   
    Serial.println("PIN correcto");
    digitalWrite(11, HIGH); // activa un contacto
    for (int zz=0; zz<=4; zz++) // borrar el último código introducido
    {
    attempt[zz]=0;
    }
    switchModule();
    setup2();
    loop2();    
   }   
    else
      {
        Serial.println("PIN erroneo");
        digitalWrite(12, HIGH); // activa un contacto
        delay(1000);   
        digitalWrite(12, LOW);
        for (int zz=0; zz<=4; zz++) // borrar el último código introducido
         {
         attempt[zz]=0;
         }
        setup();
       }
 }

Moderator edit:
</mark> <mark>[code]</mark> <mark>

</mark> <mark>[/code]</mark> <mark>
tags added.

... con mi codigo

¿Seguro?

¿Cómo metes los datos?