O que está mal neste codigo?

Viva eu tenho um projecto DTMF a funcionar correctamente apenas com um bug...

Ou seja quando eu ligo para o celular e pressiono a tecla 1 ele liga o led do pin 13, coisa que esta errada..

Eu apenas queria que ele ligasse o led do pin 13, quando eu colocasse o codigo 1234 primeiro..

por favor corrijam o que esta errado.

obrigado

#define RELE1 13
#define PASSWORD 1234 // Define a senha

int RELE1_STATE = LOW;

//=======================================================
// ENTRADAS DTMF DIGITAIS
//=======================================================
int pinBit01 = 8;
int pinBit02 = 9;
int pinBit03 = 10;
int pinBit04 = 11;
int pinBitSts= 12;

int bit01 = 0;
int bit02 = 0;
int bit03 = 0;
int bit04 = 0;
int bitSts= 0;

boolean proceed = false; //Fag que habilita o funcionamento dos comandos mediante senha digitada corretamente - inicializa falso!

String tmpPass =' '; //Armazenamento da senha digitada no telemóvel!

String password = "1234"; // Defina sua senha aqui - pode ser de quaisquer número de dígitos!

void setup() {

Serial.begin(9600);

pinMode(RELE1, OUTPUT);

digitalWrite(RELE1, LOW);

Serial.println("Aguardando comando...");
}

void loop() {

bitSts= digitalRead(pinBitSts);
bit01 = digitalRead(pinBit01);
bit02 = digitalRead(pinBit02);
bit03 = digitalRead(pinBit03);
bit04 = digitalRead(pinBit04);

numero = (bit01 * 1) + (bit02 * 2) + (bit03 * 4) + (bit04 * 8);

if (bitSts == HIGH && numero < 13) {

Serial.print("Recebido: ");
switch (numero){
case 1:
Serial.println("1");
tmpPass += '1'; //Adiciona o número digitado em tmpPass

/* COMANDO PARA RELE1 */
if (proceed == true) // Se proceed é verdadeiro (a senha foi digitada corretamente) comando é executado!
{
RELE1_STATE = !RELE1_STATE; // Troca de estado (HIGH/LOW) cada vez que pressionar o botão.
digitalWrite(RELE1, RELE1_STATE); //Liga-desliga Relé.
}
break;

case 2:
Serial.println("2");
tmpPass += '2'; //Adiciona o número digitado em tmpPass
break;

case 3:
Serial.println("3");
tmpPass += '3'; //Adiciona o número digitado em tmpPass
break;

case 4:
Serial.println("4");
tmpPass += '4'; //Adiciona o número digitado em tmpPass
break;

case 5:
Serial.println("5");
tmpPass += '5'; //Adiciona o número digitado em tmpPass
break;

case 6:
Serial.println("6");
tmpPass += '6'; //Adiciona o número digitado em tmpPass
break;

case 7:
Serial.println("7");
tmpPass += '7'; //Adiciona o número digitado em tmpPass
break;

case 8:
Serial.println("8");
tmpPass += '8'; //Adiciona o número digitado em tmpPass
break;

case 9:
Serial.println("9");
tmpPass += '9'; //Adiciona o número digitado em tmpPass
break;

case 10:
Serial.println("0");
tmpPass += '0'; //Adiciona o número digitado em tmpPass
break;

case 11: // Caractere ''
Serial.println("
");
tmpPass =' '; //Limpa para armazenar a senha novamente!
proceed = false; //Desabilita todos os comandos até que a senha seja digitada novamente!
break;

case 12: // Caractere '#'
Serial.println("#");

tmpPass = tmpPass.trim();//Retira os espaços em branco - ver caractere '*'!

if (tmpPass == password) { // Se a senha digitada for igual a senha armazenada...
Serial.println("Senha correta!");
proceed = true; //Habilita todos os comandos via telemóvel
}else{
Serial.println("Senha ERRADA!");
proceed = false; //Desabilita todos os comandos via telemóvel
}

/*
//Caso queira ver a saida da senha é só descomentar
Serial.print("tmpPass= ");
Serial.println(tmpPass);
Serial.print("password= ");
Serial.println(password);
*/

break;
}

// Zeram todas as variáveis
numero = 0;
bit01 = 0;
bit02 = 0;
bit03 = 0;
bit04 = 0;
bitSts= 0;
delay (500);
}

}

O erro está aqui:

 if (tmpPass == password) { // Se a senha digitada for igual a senha armazenada...

Num mundo ideal, as Strings seriam comparadas desta forma... no mundo actual as strings são comparadas com:

http://www.cplusplus.com/reference/clibrary/cstring/strcmp/

Ou

if (tmpPass.CompareTo(password) == 0) { //ambas são iguais.

Alem do comentário acima acho que isso pode ajudar:

String tmpPass["1111"]; // inica com o tamanho correto para que o compilador saiba o tamanho da string a ser guardada
troque tmpPass += '2' por strncpy (tmpPass,"2",pt); onde pt e o endereço que você quer armazenar o dado, que pode variar de 0 a 3;

tmpPass com 0x31 somado com 0x32 da 0x63 e não "21"