Advertisement
Guest User

Untitled

a guest
Sep 24th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.75 KB | None | 0 0
  1. #include <Keypad.h> // BIBLIOTECA DO TECLADO MATRIZ 4X3
  2. #include <Servo.h> // BIBLIOTECA SERVO MOTOR
  3. #include <Wire.h> // BIBLIOTECA PADRÃO
  4. #include <LiquidCrystal_I2C.h> // BIBLIOTECA DA TELA LCD COM ADAPTADOR I2C
  5. #include <SPI.h> // BIBLIOTECA UTILIZADA PARA RFID
  6. #include <MFRC522.h> // BIBLIOTECA DO LEITOR RFID RC522
  7. LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE); // PADRÃO DE CONTROLE DA TELA LCD
  8. #define SS_PIN 53 // DEFININDO O PINO SS NA PORTA 53
  9. #define RST_PIN 5 // DEFININDO O PINO RST NA PORTA 5
  10. MFRC522 mfrc522(SS_PIN, RST_PIN); // DECLARANDO A VARIAVEL DA BIBLIOTECA RFID
  11.  
  12. Servo servo_Motor; // DECLARANDO VARIAVEL SERVO MOTOR
  13. String senha = "1408"; // DECLARANDO VARIAVEL SENHA
  14. int position = 0; //VARIÁVEL PARA LEITURA DE POSIÇÃO DA TECLA PRESSIONADA
  15. const byte ROWS = 4; //NUMERO DE LINHAS DO TECLADO
  16. const byte COLS = 3; //NUMERO DE COLUNAS DO TECLADO
  17. char keys[ROWS][COLS] = { //DECLARAÇÃO DOS NUMEROS, LETRAS E CARACTERES DO TECLADO
  18. {'1','2','3'},
  19. {'4','5','6'},
  20. {'7','8','9'},
  21. {'*','0','#'}
  22. };
  23.  
  24. byte rowPins[ROWS] = { 31, 33, 35, 37 }; // PINOS DE CONEXAO DAS LINHAS DO TECLADO
  25. byte colPins[COLS] = { 39, 41, 43 }; //PINOS DE CONEXAO DAS COLUNAS DO TECLADO
  26. 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
  27.  
  28. const int ledVermelho = 7; // DECLARANDO LED VERMELHO NO PINO 7 DA PLACA
  29. const int ledAzul = 3; // DECLARANDO LED AZUL NO PINO 3 DA PLACA
  30. const int speakerPin = 10; // DECLARANDO O SPEAKER NO PINO 10 DA PLACA
  31.  
  32. void setup(){
  33.  
  34. lcd.begin (16,2); // INICIANDO O LCD DE 16X2
  35. Serial.begin(9600); // INICIA A COMUNICAÇÃO SERIAL EM 9600 BAUD RATE
  36.  
  37. SPI.begin(); // INICIA A COMUNICAÇÃO SPI
  38. mfrc522.PCD_Init(); // INICIA MFRC522
  39.  
  40. pinMode(ledVermelho, OUTPUT); // DECLARANDO LEDVERMELHO COMO OUTPUT
  41. pinMode(ledAzul, OUTPUT); // DECLARANDO LEDAZUL COMO OUTPUT
  42. pinMode(speakerPin, OUTPUT); // DECLARANDO SPEAKER COMO OUTPUT
  43. servo_Motor.attach(2); // DECLARANDO SERVO MOTOR NO PINO 2
  44. setLocked(true); // CHAMANDO A FUNÇÃO SETLOCKED COMO TRUE PARA INICIAR O PROGRAMA COM A 'PORTA FECHADA'
  45.  
  46. }// FIM SETUP
  47.  
  48. void loop()
  49. {
  50.  
  51. char key = keypad.getKey(); //LEITURA DAS TECLAS PRESSIONADAS
  52. if (key == '*' || key == '#') { //SE A TECLA PRESSIONADA POR IGUAL A CARACTERE "*" OU "#", FAZ
  53. position = 0; //POSIÇÃO DE LEITURA DA TECLA PRESSIONADA INICIA EM 0
  54. setLocked(true); //FECHADURA TRANCADA
  55.  
  56. } // FIM IF
  57. if (key == senha[position]){ //SE A TECLA PRESSIONADA CORRESPONDER A SEQUÊNCIA DA SENHA, FAZ
  58. position ++;//PULA PARA A PRÓXIMA POSIÇÃO
  59. } // FIM IF
  60. if (position == 4){ // SE VARIÁVEL FOR IGUAL A 3 FAZ (QUANDO AS TECLAS PRESSIONADAS CHEGAREM A 3 POSIÇÕES, SIGNIFICA QUE A SENHA ESTÁ CORRETA)
  61. setLocked(false); //FECHADURA DESTRANCADA
  62. position = 0; // VARIAVEL DE LEITURA DA TECLA RECEBE VALOR 0
  63. } // FIM IF
  64.  
  65. // INICIO DO CÓDIGO RFID
  66. if ( ! mfrc522.PICC_IsNewCardPresent()) // FAZENDO A LEITURA DO CARTÃO
  67. {
  68. return; // RETORNA
  69. } // FIM IF
  70.  
  71. if ( ! mfrc522.PICC_ReadCardSerial()) // SELECIONA UM DOS CARTÕES
  72. {
  73. return; // RETORNA
  74. } // FIM IF
  75.  
  76. String conteudo= ""; // DECLARANDO A VARIAVEL CONTEUDO COMO UMA STRING VAZIA
  77. byte letra; // CRIANDO A VARIAVEL LETRA DO TIPO BYTE
  78.  
  79. for (byte i = 0; i < mfrc522.uid.size; i++) // RECUPERANDO O CÓDIGO DA TAG E CARTÃO
  80. {
  81. Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
  82. Serial.print(mfrc522.uid.uidByte[i], HEX);
  83. conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ")); // ARMAZENANDO NA VARIAVEL CONTEUDO
  84. conteudo.concat(String(mfrc522.uid.uidByte[i], HEX)); // ARMAZENANDO NA VARIAVEL CONTEUDO
  85. } // FIM FOR
  86.  
  87. conteudo.toUpperCase(); // ATRIBUINDO CAIXA ALTA NA VARIAVEL CONTEUDO
  88.  
  89.  
  90. if (conteudo.substring(1) == "B0 7D E0 87") //UID 1 - CHAVEIRO. SE O VALOR RETORNADO FOR ESSE A FUNÇÃO SETLOCKED SERÁ ACIONADA COMO FALSE QUE INDICA A PORTA ABERTA
  91. {
  92. setLocked(false); // CHAMANDO A FUNÇÃO SETLOCKED COMO FALSE
  93.  
  94. } // FIM IF
  95.  
  96. if (conteudo.substring(1) == "1B 8D B1 AB") //UID 2 - CARTÃO. SE O VALOR RETORNADO FOR ESSE A FUNÇÃO SETLOCKED SERÁ ACIONADA COMO FALSE QUE INDICA A PORTA ABERTA
  97. {
  98. setLocked(false); // CHAMANDO A FUNÇÃO SETLOCKED COMO FALSE
  99.  
  100. } // FIM IF
  101.  
  102. } // FIM LOOP
  103.  
  104.  
  105. void setLocked(int locked){ //INICIO DA FUNÇÃO SETLOCKED QUE TRATA O ESTADO DA FECHADURA
  106. if (locked){ //SE FECHADURA TRANCADA, FAZ
  107. lcd.clear(); // LIMPA A TELA DO LCD
  108. digitalWrite(ledVermelho, HIGH); // LIGA O LED VERMELHO
  109. digitalWrite(ledAzul, LOW); // APAGA O LED AZUL
  110. servo_Motor.write(0); //POSIÇÃO DO SERVO FICA EM 0º
  111.  
  112. lcd.setBacklight(HIGH); // ACENDE O FUNDO DA TELA LCD
  113. lcd.setCursor(0,0); // ACIONA A PRIMERA LINHA DA TELA LCD
  114. lcd.print(" PORTA FECHADA!"); // ESCREVE NA PRIMEIRA LINHA A FRASE
  115.  
  116. tone(speakerPin, 3000); // ACIONA O SPEAKER COM O TOM AGUDO 3000
  117. delay(500); //ESPERA 0.5 SEC
  118. tone(speakerPin,1500); // ACIONA O SPEAKER COM O TOM AGUDO 1500
  119. delay(500); // ESPERA 0.5 SEC
  120. tone(speakerPin, 1000); // ACIONA O SPEAKER COM O TOM AGUDO 1000
  121. delay(500); // ESPERA 0.5 SEC
  122. noTone(speakerPin); // PARA DE APITAR O SPEAKER
  123. } // FIM IF
  124. else { // SE NÃO
  125. lcd.clear(); // LIMPA TELA LCD
  126. digitalWrite(ledAzul, HIGH); // ACENDE LED AZUL
  127. digitalWrite(ledVermelho, LOW); // DESLIGA LED VERMELHO
  128. servo_Motor.write(90);// SERVO GIRA A 90º
  129.  
  130. lcd.setBacklight(HIGH); // ACENDE O FUNDO DA TELA LCD
  131. lcd.setCursor(0,0); // CHAMA A PRIMERA LINHA DA TELA LCD
  132. lcd.print(" PORTA ABERTA "); // ESCREVE NA PRIMEIRA LINHA A FRASE
  133. lcd.setCursor(0,1); // CHAMA A SEGUNDA LINHA DA TELA LCD
  134. lcd.print("WWW.CODFY.COM.BR"); // ESCREVE NA SEGUNDA LINHA A FRASE
  135.  
  136. tone(speakerPin, 1000); // ACIONA O SPEAKER COM O TOM AGUDO 1000
  137. delay(500); // ESPERA 0.5 SEC
  138. tone(speakerPin,1500); // ACIONA O SPEAKER COM O TOM AGUDO 1500
  139. delay(500); // ESPERA 0.5 SEC
  140. tone(speakerPin, 3000); // ACIONA O SPEAKER COM O TOM AGUDO 3000
  141. delay(500); // ESPERA 0.5 SEC
  142. noTone(speakerPin); // PARA DE APITAR O SPEAKER
  143. delay(3000); // ESPERA 3SEC
  144. setLocked(true); // CHAMA A FUNÇÃO COMO TRUE 'FECHANDO A PORTA'
  145.  
  146.  
  147. } //FIM SENÃO
  148. } // FIM SETLOCKED
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement