Advertisement
Guest User

Untitled

a guest
May 30th, 2015
8,160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.76 KB | None | 0 0
  1. //RFID - Controle de Acesso com leitor RFID 13.56
  2.  
  3. //Biblioteca do protocolo SPI
  4. #include <SPI.h>
  5. //Biblioteca do RFID
  6. #include <MFRC522.h>
  7.  
  8. /*-importacao Necessaria para LCD + I2C*/
  9. #include <Wire.h>  
  10. #include <LiquidCrystal_I2C.h>
  11.  
  12.  
  13. //Pinos de definição
  14. #define SS_PIN 10
  15. #define RST_PIN 9
  16. //Cria a instacia do RFID (mfrc522)
  17. MFRC522 mfrc522(SS_PIN, RST_PIN);  
  18.  
  19. //Aqui colocamos as Tags que desejamos autorizar
  20. String tagsCadastrada[2] ={"24 B4 8B 19","55 FC F9 0D"};
  21.  
  22. //------------Objeto do LCD + I2C
  23. LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  24.  
  25.  //Pinos do LED RGB
  26.  int ledVermelho =2;
  27.  int ledVerde =3;
  28.  int ledAzul =4;
  29.  
  30.  //Esta parte do Rele é apenas 1 exemplo de utilidade---------
  31.  //neste caso precisaremos de fonte externa para o acionamento--------
  32.  //decidi não colocar para não complicar muito o exemplo---------------
  33.  //basta tirar o comentario para usar------------------
  34.  //int relay =7;
  35.  
  36.  
  37. void setup()
  38. {
  39.   // Inicia a serial
  40.   Serial.begin(9600);
  41.   //Inicia o LCD como 16 linhas e 2 colunas
  42.   lcd.begin(16,2);
  43.   //inicia a conexão SPI
  44.   SPI.begin();  
  45.   // Inicia MFRC522  
  46.   mfrc522.PCD_Init();  
  47.   Serial.println();
  48.  
  49.   //Inicia os pinos do LED RGB como saida
  50.   pinMode(ledVermelho, OUTPUT);
  51.   pinMode(ledVerde, OUTPUT);
  52.   pinMode(ledAzul, OUTPUT);
  53.  
  54.   //Metodo inicial (Menu)
  55.   mensageminicial();
  56.  
  57.  
  58.  
  59.   //Esta parte do Rele é apenas 1 exemplo de utilidade---------
  60.  //neste caso precisaremos de fonte externa para o acionamento--------
  61.  //decidi não colocar para não complicar muito o exemplo---------------
  62.  //basta tirar o comentario para usar------------------
  63.   //pinMode(relay, OUTPUT);
  64. }
  65.  
  66. void loop()
  67. {
  68.  
  69.   //Aguarda proximidade do cartão / tag
  70.   if ( ! mfrc522.PICC_IsNewCardPresent())
  71.   {
  72.     return;
  73.   }
  74.    //Seleciona o cartão / tag
  75.   if ( ! mfrc522.PICC_ReadCardSerial())
  76.   {
  77.     return;
  78.   }
  79.   //Mostra UID na serial
  80.   Serial.print("UID da tag :");
  81.   //String que armazenará o UID do cartão
  82.   String conteudo= "";
  83.   //variavel que coletará os bytes lidos
  84.   byte letra;
  85.  
  86.   //dentro deste FOR, armazena byte a byte e
  87.   //concatena na variavel conteudo
  88.   for (byte i = 0; i < mfrc522.uid.size; i++)
  89.   {
  90.      Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
  91.      Serial.print(mfrc522.uid.uidByte[i], HEX);
  92.      conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
  93.      conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
  94.   }
  95.  
  96.   Serial.println();
  97.   //booleana que valida a tag lida
  98.   //como autorizada ou não
  99.   boolean tagVerificada = false;
  100.  
  101.   //Limpa o LCD
  102.   lcd.clear();
  103.   //Seta o cursor para linha e coluna 0  
  104.   lcd.setCursor(0,0);
  105.  
  106.  
  107.   Serial.print("Leitura : ");
  108.  
  109.   //coloca o valor da variavel conteudo toda em Maisculo
  110.   conteudo.toUpperCase();
  111.  
  112.   //verifica se a tag lida coincide com uma das tags
  113.   //cadastada no array
  114.  for(int indice =0; indice < sizeof(tagsCadastrada); indice++){
  115.   //if (conteudo.substring(1) == "24 B4 8B 19") //UID 1
  116.    if (conteudo.substring(1) == tagsCadastrada[0]) //UID 1
  117.   {
  118.    //Se sim imprime no LCD e na Serial
  119.     Serial.println("Ola Thiago!");
  120.     Serial.println("Acesso Liberado!");
  121.    
  122.     lcd.print("Ola Thiago!");
  123.     lcd.setCursor(0,1);
  124.     lcd.println("Acesso Liberado!");
  125.    
  126.     //tag encontrada
  127.     tagVerificada = true;
  128.     //este metodo acende o led verde (autorizado)
  129.     //e liga o rele
  130.     tagValida();
  131.     delay(3000);
  132.     //Incia o processo novamente
  133.     mensageminicial();
  134.     //limpa a String conteudo para fazer nova leitura
  135.     conteudo= "";
  136.    
  137.    
  138.   }
  139.  
  140.   //if (conteudo.substring(1) == "55 FC F9 0D") //UID 1
  141.  
  142.   //verifica se a tag lida coincide com uma das tags
  143.   //cadastada no array
  144.   if (conteudo.substring(1) == tagsCadastrada[1]) //UID 1
  145.   {
  146.    
  147.     //Se sim imprime no LCD e na Serial
  148.     Serial.println("Oi Arduino e Android! ");
  149.     Serial.println("Acesso Liberado!");
  150.    
  151.     lcd.print("Oi Arduino e Android!");
  152.     lcd.setCursor(0,1);
  153.     lcd.println("Acesso Liberado!");
  154.    
  155.     //tag encontrada
  156.     tagVerificada = true;
  157.     //este metodo acende o led verde (autorizado)
  158.     //e liga o rele  
  159.     tagValida();
  160.     delay(3000);
  161.     //Incia o processo novamente
  162.     mensageminicial();
  163.     //limpa a String conteudo para fazer nova leitura
  164.     conteudo= "";
  165.   }
  166.  
  167.   //caso o conteudo não seja "" e a tag Verficada
  168.   //esteja falsa.
  169.   //Informa o usuario que não tem acesso
  170.   if((tagVerificada == false)&&(conteudo != "")){
  171.    
  172.     //Se ambas condições forem verdadeira
  173.     //imprime no LCD e na Serial uma mensagem de negação ao usuario
  174.     Serial.println("Usuario Desconhecido! ");
  175.     Serial.println("Acesso Negado!!");
  176.    
  177.     lcd.print("Usuario Negado!");
  178.     lcd.setCursor(0,1);
  179.     lcd.println("Acesso Negado!  ");
  180.    
  181.     //este metodo acende o led vermelho (nãp autorizado)
  182.     //e matem o rele desligado
  183.     tagInvalida();
  184.     delay(3000);  
  185.     //Incia o processo novamente
  186.     mensageminicial();
  187.     //limpa a String conteudo para fazer nova leitura
  188.     conteudo= "";
  189.   }
  190. }
  191.  
  192. }
  193.  
  194. //Metodo Inicial que informa ao usuario o que deve ser feito  
  195. void mensageminicial()
  196. {
  197.   Serial.println();
  198.   Serial.println("Aproxime o seu cartao de leitor");
  199.  
  200.   lcd.clear();
  201.   lcd.setCursor(0,0);
  202.   lcd.print("Aproxime a sua");
  203.   lcd.setCursor(0,1);
  204.   lcd.print("tag p/ Leitura!");
  205.  
  206.   digitalWrite(ledAzul,LOW);
  207.   digitalWrite(ledVermelho, HIGH);
  208.   digitalWrite(ledVerde, HIGH);
  209.  
  210.   //Esta parte do Rele é apenas 1 exemplo de utilidade---------
  211.  //neste caso precisaremos de fonte externa para o acionamento--------
  212.  //decidi não colocar para não complicar muito o exemplo---------------
  213.  //basta tirar o comentario para usar------------------
  214.   //digitalWrite(relay, HIGH);
  215.   Serial.println();
  216.  
  217.  
  218.  
  219. }
  220.  
  221. //Metodo chamado quando a tag é valida e cadastrada
  222. void tagValida()
  223. {
  224.   digitalWrite(ledAzul,HIGH);
  225.   digitalWrite(ledVermelho, HIGH);
  226.   digitalWrite(ledVerde, LOW);
  227.  
  228.   //Esta parte do Rele é apenas 1 exemplo de utilidade---------
  229.  //neste caso precisaremos de fonte externa para o acionamento--------
  230.  //decidi não colocar para não complicar muito o exemplo---------------
  231.  //basta tirar o comentario para usar------------------
  232.   //digitalWrite(relay, LOW);
  233.  
  234. }
  235.  
  236. //Metodo chamado quando a tag invalida / desconhecida
  237. void tagInvalida()
  238. {
  239.   digitalWrite(ledAzul,HIGH);
  240.   digitalWrite(ledVermelho,  LOW);
  241.   digitalWrite(ledVerde, HIGH);
  242.  
  243.   //Esta parte do Rele é apenas 1 exemplo de utilidade---------
  244.  //neste caso precisaremos de fonte externa para o acionamento--------
  245.  //decidi não colocar para não complicar muito o exemplo---------------
  246.  //basta tirar o comentario para usar------------------
  247.   //digitalWrite(relay, HIGH);
  248. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement