PORTA COM SENHA ARDUINO

Bom, preciso fazer um projeto na escola que precisa estar pronto na próxima terça, o problema é que uma parte ja está pronta:

usei este código deste site com os mesmos componentes
Porém preciso colocar um push-button do lado de dentro do comodo para trancar a fechadura e não estou conseguindo, já tentei de tudo. Aqui está meu código atual:
#include <Keypad.h> // BIBLIOTECA PARA O FUNCIONAMENTO DO TECLADO DE MEMBRANA
#include <Servo.h> // BIBLIOTECA PARA O FUNCIONAMENTO DO SERVO

byte botao = 1;
int estadobotao = 0;
Servo servo_Motor; //OBJETO DO TIPO SERVO
char* password = "123"; //SENHA CORRETA PARA DESTRANCAR A FECHADURA
int position = 0; //VARIÁVEL PARA LEITURA DE POSIÇÃO DA TECLA PRESSIONADA
const byte ROWS = 4; //NUMERO DE LINHAS DO TECLADO
const byte COLS = 4; //NUMERO DE COLUNAS DO TECLADO
char keys[ROWS][COLS] = { //DECLARAÇÃO DOS NUMEROS, LETRAS E CARACTERES DO TECLADO
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};

byte rowPins[ROWS] = { 8, 7, 6, 9 }; // PINOS DE CONEXAO DAS LINHAS DO TECLADO
byte colPins[COLS] = { 5, 4, 3, 2 }; //PINOS DE CONEXAO DAS COLUNAS DO TECLADO
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );//AS VARIAVEIS rowPins E colPins RECEBERÃO O VALOR DE LEITURA DOS PINOS DAS LINHAS E COLUNAS RESPECTIVAMENTE

const int ledVermelho = 12; //PINO EM QUE ESTÁ CONECTADO O LED VERMELHO
const int ledVerde = 13; //PINO EM QUE ESTÁ CONECTADO O LED VERDE

void setup(){
pinMode(ledVermelho, OUTPUT); //DECLARA O PINO COMO SAÍDA
pinMode(ledVerde, OUTPUT); //DECLARA O PINO COMO SAÍDA
servo_Motor.attach(11); //PINO DE CONTROLE DO SERVO MOTOR
setLocked(true); //ESTADO INICIAL DA FECHADURA (TRANCADA)
}

void loop(){
estadobotao = digitalRead(botao);
char key = keypad.getKey(); //LEITURA DAS TECLAS PRESSIONADAS
if (key == '' || key == '#') { //SE A TECLA PRESSIONADA POR IGUAL A CARACTERE "" OU "#", FAZ
position = 0; //POSIÇÃO DE LEITURA DA TECLA PRESSIONADA INICIA EM 0
setLocked(true); //FECHADURA TRANCADA
}
if (key == password[position]){ //SE A TECLA PRESSIONADA CORRESPONDER A SEQUÊNCIA DA SENHA, FAZ
position ++;//PULA PARA A PRÓXIMA POSIÇÃO
}
if (position == 3){ // SE VARIÁVEL FOR IGUAL A 3 FAZ (QUANDO AS TECLAS PRESSIONADAS CHEGAREM A 3 POSIÇÕES, SIGNIFICA QUE A SENHA ESTÁ CORRETA)
setLocked(false); //FECHADURA DESTRANCADA
}
if (botao == HIGH){
estadobotao++;
}
if (botao == HIGH){
estadobotao--;
}
if (estadobotao = 1){
servo_Motor.write(0);
}
if (estadobotao = 0){
servo_Motor.write(82);
}
delay(100);//INTERVALO DE 100 MILISSEGUNDOS
}

void setLocked(int locked){ //TRATANDO O ESTADO DA FECHADURA
if (locked){ //SE FECHADURA TRANCADA, FAZ
digitalWrite(ledVermelho, HIGH);// LED VERMELHO ACENDE
digitalWrite(ledVerde, LOW);// LED VERDE APAGA
servo_Motor.write(0); //POSIÇÃO DO SERVO FICA EM 0º (FECHADURA TRANCADA)
}
else{ //SENÃO, FAZ
digitalWrite(ledVerde, HIGH);// LED VERDE ACENDE
digitalWrite(ledVermelho, LOW);// LED VERMELHO APAGA
servo_Motor.write(82);// SERVO GIRA A 82º (FECHADURA DESTRANCADA)
}
}
Planejo fazer uma maquete de madeira e colocarei o sistema na maquete, com porta e tudo mais, porém preciso que este botão funcione mas não estou conseguindo. Se puderem me ajudar agradeceria!

Desculpa a indelicadeza, mas desisti de entender seu programa na metade.
Se estiver com pressa pague alguém para fazer, se não estiver, comece do zero.
Você vai usar um servo motor para fechar a porta?

Cara, o servo motor, apenas está fechando a tranca da porta. Eu só preciso de ajuda pra que assim que eu aperte o botão, o servo motor faça a mesma coisa do que quando eu aperto #, ou seja preciso q ele tranque a tranca.

Cara você pode fazer isso então
usa uma porta para receber o sinal do botão apertado, com um pulldown

int botaoFecha = número da porta;
...
void setup(){
 pinMode(número da porta, INPUT);
...
void loop(){
...
  if (digitalRead(número da porta)) { //SE A TECLA PRESSIONADA POR IGUAL A CARACTERE "*" OU "#", FAZ
      while(digitalRead(número daporta) == high){}
      position = 0; //POSIÇÃO DE LEITURA DA TECLA PRESSIONADA INICIA EM 0
      setLocked(true); //FECHADURA TRANCADA
}
...

Já que é só iss oque você quer

Não se acostume GuilhermeSemensat, mas segue abaixo o código que você precisa, faltando fazer as devidas alterações para adaptar o servo:

/*Author: Diego Lima
Ver. 0.1
12-02-2017
email: fisdiego@gmail.com
Objetivo:Restringir o acesso da aréa interna por meio de senha, o acesso a área externa liberada por mei ode um botão!
*/

int portasTeclado[] = {2,3,4,5,6,7,8,9};//portas onde estão ligados os pinos do teclado
                                        // olhando de frente, começa da esquerda para a direita
String teclas[4][4] = {{"1","2","3","A"},// configuração das teclas
                       {"4","5","6","B"},
                       {"7","8","9","C"},
                       {"*","0","#","D"}};


int ledVerde = 10;//Led que indica que a porta está aberta
int ledVermelho  = 11; // led que indica que a porta está fechada
int botaoAbre = 12;// botão para abrir a porta independente de senha
int switchPortaFechada = A0; // um Switch colocado para ser acionado quando a porta estiver fechada
int tamanhoSenha;// verifica qual tamanho da senha 
int contador = 0;// conta quantas vezes o teclado foi acionado
String senha = "123";// senha de acesso
String confirmaSenha;// variável para guradar as teclas digitadas
boolean abriuPorta = false;// Variável para veirficar se a abertura da porta foi liberada
boolean portaAberta = false;//Verifica se a porta foi aberta

void setup() {
  Serial.begin(9600);
  //configurando saídas
  for (int i= 0;i<4;i++){
    pinMode(portasTeclado[i],OUTPUT);
  }
  pinMode(ledVermelho,OUTPUT);
  pinMode(ledVerde,OUTPUT);
  //configurando entradas
  for(int i =4; i<8;i++){
    pinMode(portasTeclado[i],INPUT);
  }
  //verificando o tamanho da senha
  tamanhoSenha = senha.length();
  Serial.print("Digite a senha:");
  digitalWrite(ledVermelho,HIGH);

}

void loop() {

  if (digitalRead(botaoAbre) == HIGH){// verifica se o botão foi apertado
    while(digitalRead(botaoAbre));
    digitalWrite(ledVermelho,LOW);
    digitalWrite(ledVerde,HIGH);
    Serial.println("");
    Serial.println("Abre Porta!");
    abriuPorta= true;
    abrirPorta();
  }

 // esperando abrir a porta 
 if ((abriuPorta == true) && (portaAberta == false)) {
  while(digitalRead(switchPortaFechada) == HIGH){}
  Serial.println("");
  Serial.println("Abrindo Porta!");
  while(digitalRead(switchPortaFechada) == LOW){
    portaAberta = true;
  }
 }
  
  
  if((abriuPorta == true) && (portaAberta == true)){
      while(digitalRead(switchPortaFechada) == LOW){}
      if(digitalRead(switchPortaFechada) == HIGH){
        Serial.println("Porta Fechada!");
        fecharPorta();
        posicaoInicial();
      }
    }

  if (contador < tamanhoSenha){
    teclado();
  } else {
    if(senha == confirmaSenha) {
      Serial.println("");
      Serial.println("Acesso concedido!");
      digitalWrite(ledVermelho,LOW);
      digitalWrite(ledVerde,HIGH);
      contador = 0;
      confirmaSenha ="";
      abriuPorta = true;
      abrirPorta();
    } else {
      Serial.println("");
      Serial.println("Acesso Negado!");
      posicaoInicial();
      fecharPorta();
    }
  }

}

void teclado(){

  String tecla;
  for(int i=0;i<4;i++){

    digitalWrite(portasTeclado[i],HIGH);
  
    for(int j=4;j<8;j++){
      
      if(digitalRead(portasTeclado[j]) == HIGH){
        
        while(digitalRead(portasTeclado[j]) == HIGH){}
        tecla = teclas[i][j-4];
        if((tecla == "*") || (tecla == "#")) {
          posicaoInicial(); 
        } else {
          contador++;
          confirmaSenha +=  tecla;
          i = 5; j = 9;
          Serial.print("*"); 
        }
      }
    }
    digitalWrite(portasTeclado[i],LOW);
  }
}

void posicaoInicial(){
  contador = 0;
  confirmaSenha = "";
  abriuPorta = false;
  portaAberta = false;
  digitalWrite(ledVermelho,HIGH);
  digitalWrite(ledVerde,LOW);
  Serial.println("");
  Serial.print("Digite a senha:");
}

void abrirPorta(){

  //Coloque aqui o código para abrir a porta
}

void fecharPorta(){

  //coloque aqui o código para fechar a porta
}

Pô cara, obrigado, mas meu professor não deu nem aula pra gente disso, então não consegui configurar e fazer funcionar. Até consegui fazer o led acender porém o servo motor parou de mexer totalmente com o código. Se souber e algo mais que possa ajudar agradeceria.

O servo parou porque eu não adicionei ele ao projeto, deixei essa parte para você!

Então eu tentei adicionar o servo, e os comandos q ele precisa, mas não ocnsegui, ainda deu erro, porque eu não so muito bom de arduino, n sei quase nada

Baseado no seu código, copiado do site Site copiado segue as alterações:

/*Author: Diego Lima
Ver. 0.2
12-02-2017
Rev.01 : 12-05-2017
email: fisdiego@gmail.com
Objetivo:Restringir o acesso da aréa interna por meio de senha, o acesso a área externa liberada por mei ode um botão!
*/

#include <Servo.h> // incluindo a biblioteca do servor

int portasTeclado[] = {2,3,4,5,6,7,8,9};//portas onde estão ligados os pinos do teclado
                                        // olhando de frente, começa da esquerda para a direita
String teclas[4][4] = {{"1","2","3","A"},// configuração das teclas
                       {"4","5","6","B"},
                       {"7","8","9","C"},
                       {"*","0","#","D"}};


int ledVerde = 10;//Led que indica que a porta está aberta
int ledVermelho  = A1; // led que indica que a porta está fechada
int botaoAbre = 12;// botão para abrir a porta independente de senha
int switchPortaFechada = A0; // um Switch colocado para ser acionado quando a porta estiver fechada
int tamanhoSenha;// verifica qual tamanho da senha
int contador = 0;// conta quantas vezes o teclado foi acionado
String senha = "123";// senha de acesso
String confirmaSenha;// variável para guradar as teclas digitadas
boolean abriuPorta = false;// Variável para veirficar se a abertura da porta foi liberada
boolean portaAberta = false;//Verifica se a porta foi aberta
Servo servo_Motor; // instanciando o servor motor

void setup() {
  Serial.begin(9600);,
  servo_Motor.attach(11); //Pino do servor
  //configurando saídas
  for (int i= 0;i<4;i++){
    pinMode(portasTeclado[i],OUTPUT);
  }
  pinMode(ledVermelho,OUTPUT);
  pinMode(ledVerde,OUTPUT);
  //configurando entradas
  for(int i =4; i<8;i++){
    pinMode(portasTeclado[i],INPUT);
  }
  //verificando o tamanho da senha
  tamanhoSenha = senha.length();
  Serial.print("Digite a senha:");
  digitalWrite(ledVermelho,HIGH);

}

void loop() {

  if (digitalRead(botaoAbre) == HIGH){// verifica se o botão foi apertado
    while(digitalRead(botaoAbre));
    digitalWrite(ledVermelho,LOW);
    digitalWrite(ledVerde,HIGH);
    Serial.println("");
    Serial.println("Abre Porta!");
    abriuPorta= true;
    abrirPorta();
  }

 // esperando abrir a porta
 if ((abriuPorta == true) && (portaAberta == false)) {
  while(digitalRead(switchPortaFechada) == HIGH){}
  Serial.println("");
  Serial.println("Abrindo Porta!");
  while(digitalRead(switchPortaFechada) == LOW){
    portaAberta = true;
  }
 }
 
 
  if((abriuPorta == true) && (portaAberta == true)){
      while(digitalRead(switchPortaFechada) == LOW){}
      if(digitalRead(switchPortaFechada) == HIGH){
        Serial.println("Porta Fechada!");
        fecharPorta();
        posicaoInicial();
      }
    }

  if (contador < tamanhoSenha){
    teclado();
  } else {
    if(senha == confirmaSenha) {
      Serial.println("");
      Serial.println("Acesso concedido!");
      digitalWrite(ledVermelho,LOW);
      digitalWrite(ledVerde,HIGH);
      contador = 0;
      confirmaSenha ="";
      abriuPorta = true;
      abrirPorta();
    } else {
      Serial.println("");
      Serial.println("Acesso Negado!");
      posicaoInicial();
      fecharPorta();
    }
  }

}

void teclado(){

  String tecla;
  for(int i=0;i<4;i++){

    digitalWrite(portasTeclado[i],HIGH);
 
    for(int j=4;j<8;j++){
     
      if(digitalRead(portasTeclado[j]) == HIGH){
       
        while(digitalRead(portasTeclado[j]) == HIGH){}
        tecla = teclas[i][j-4];
        if((tecla == "*") || (tecla == "#")) {
          posicaoInicial();
        } else {
          contador++;
          confirmaSenha +=  tecla;
          i = 5; j = 9;
          Serial.print("*");
        }
      }
    }
    digitalWrite(portasTeclado[i],LOW);
  }
}

void posicaoInicial(){
  contador = 0;
  confirmaSenha = "";
  abriuPorta = false;
  portaAberta = false;
  digitalWrite(ledVermelho,HIGH);
  digitalWrite(ledVerde,LOW);
  Serial.println("");
  Serial.print("Digite a senha:");
}

void abrirPorta(){

   servo_Motor.write(82);

}

void fecharPorta(){

  servo_Motor.write(0);

}

Não usaria um servo para controlar a abertura da porta, eu usaria fechaduras elétricas/eletrônicas para ter uma aplicação mais eficiente no uso residencial!
P.S.: nunca usei esse servo motor e não possuo nenhum em estoque, por isso não tenho como testar e garantir que funcione, mas baseado no que tem no código, acho que funciona!!