Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Programa desenvolvido por Stella Marques
- //Data : 09/10/2017
- //Lavras - MG
- //Hora da compilação - 13:29hs
- /*
- Inormações tecnicas:
- Led vermelho na porta A2 - res 330 no positivo
- Led verde porta A1 - res 330 no positivo
- BUZZER porta 6
- Bluetooth:
- RX - 1
- TX - 0
- */
- #include <SPI.h>
- #include <MFRC522.h>
- #include "LiquidCrystal_I2C.h"
- #include <Wire.h>
- #include <SD.h>
- //RFID////
- #define SS_PIN 9
- #define RST_PIN 8
- MFRC522 mfrc522(SS_PIN, RST_PIN); // Cria a instancia do tipo MFRC522.
- MFRC522::MIFARE_Key key;
- /////RFID//
- // Inicializa o display LCD no endereco 0x27////
- //LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);
- LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
- char st[20];
- ///////LCd//////
- const int buzzer = 3;
- #define LEDVERDE A1
- #define LEDVERMELHO A2
- //Ponteiro para o arquivo do GPS
- File myFile;
- //Variaveis Global
- //int i = 5;
- void setup()
- {
- Serial.begin(9600); //Inicializa Comunicacao serial do Arduino Mega do pino 0[RX] e 1[TX] para depuracao do codigo
- Serial2.begin(9600); //Inicializa Bluetooth do Arduino Mega TX do bluetooth conectado ao pino 17[RX2] e RXD do Bluetooth conectado ao pino digital 16[TX2]
- SPI.begin(); // Inicia SPI bus
- mfrc522.PCD_Init(); // Inicia MFRC522
- //Inicializa o LCD 16x2
- lcd.begin(16, 2);
- //Prepara chave - padrao de fabrica = FFFFFFFFFFFFh
- for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
- // Define os pinos dos leds e buzzer como saida
- pinMode(LEDVERDE, OUTPUT);
- pinMode(LEDVERMELHO, OUTPUT);
- pinMode(buzzer, OUTPUT);
- Serial.print("\nInicializando SD...");
- if (!SD.begin(4))
- {
- Serial.println("Falha-SD");
- Serial2.println("Falha-SD");
- return;
- }
- Serial.println("SD-OK");
- Serial2.println("SD-OK");
- //Serial.println("Teste Inicializacao");
- }
- ///////////////////////////////////////////////// Fim SETUP Inicio LOOP ////////////////////////////////////////////////
- void loop()
- {
- String cartao = "";
- String inicia = "ok";
- String retorno = "";
- delay(2000);
- digitalWrite(LEDVERDE, HIGH);
- inicia = recebeStringSerial2();
- while (inicia != "fim")
- {
- retorno = leituraCartao();
- //Serial.println(retorno); //Teste para ver o retorno da função de leitura
- if (retorno != "NADA")
- {
- if ((retorno == "ERRO1") || (retorno == "ERRO2"))
- {
- erroLeitura();
- delay(500);
- } else { //caso a leitura da TAG tenha ocorrido com sucesso
- Serial.print("'" + retorno + "';");
- Serial2.print("'" + retorno + "';");
- cartao = escreveSD(retorno);
- Serial1.print("SD: ");
- Serial1.println(retorno);
- }
- }
- inicia = recebeStringSerial2();
- if (inicia == "fim")
- {
- Serial.print("Inicio Descarregar SD...");
- lcd_SD();
- delay(2000);
- descarregaSD();
- deletaArquivosSD();
- Serial.print("Fim Descarregar SD.");
- delay(2000);
- }
- }
- }
- ////////////////////////////////////////// Funcoes para funcionamento do cartao SD ////////////////////////////
- void descarregaSD()
- {
- myFile = SD.open("tags.txt");
- if (myFile)
- {
- // Le todo o arquivo txt
- while (myFile.available())
- {
- //Descarrega todo o arquivo gps na serial
- Serial.write(myFile.read());
- }
- // fecha o arquivo
- myFile.close();
- delay(10);
- myFile = SD.open("tags.txt");
- // Le todo o arquivo txt
- while (myFile.available())
- {
- //Descarrega todo o arquivo gps na serial 2 - Bluetooth conectado
- Serial2.write(myFile.read());
- }
- // fecha o arquivo
- myFile.close();
- } else {
- //Imprime erro ao abrir caso o arquivo teste nao possa ser aberto
- Serial.println("Erro ao abrir tags.txt");
- }
- }
- void deletaArquivosSD()
- {
- SD.remove("tags.txt");
- }
- String escreveSD(String dados)
- {
- myFile = SD.open("tags.txt", FILE_WRITE);
- if (myFile)
- {
- //Serial.print("Escrevendo no gps.txt... ");
- //myFile.println("Teste Stella Marques! :)");
- myFile.print(dados + "\n");
- // close the file:
- myFile.close();
- //Serial.println(" ...OK");
- dados = "OK";
- } else {
- // retorna um erro caso o arquvino testeStella.txt nao possa ser aberto
- Serial.println("Erro ao abrir tags.txt");
- dados = "Falha";
- }
- delay(50);
- return dados;
- }
- String recebeStringSerial()
- {
- String dados = "";
- char caractere;
- // Enquanto receber algo pela serial do usb
- if (Serial.available() > 0) {
- while (Serial.available() > 0)
- {
- // Lê byte da serial
- caractere = Serial.read();
- // Ignora caractere de quebra de linha
- if (caractere != '\n')
- {
- // Concatena valores
- dados.concat(caractere);
- }
- // Aguarda buffer serial ler próximo caractere
- delay(10);
- }
- } else {
- return "ok";
- }
- Serial.print("Recebido: ");
- Serial.println(dados);
- return dados;
- }
- String recebeStringSerial2()
- {
- String dados = "";
- char caractere;
- if (Serial2.available() > 0) {
- //Enquanto receber algo pela serial do usb
- while (Serial2.available() > 0)
- {
- //Lê byte da serial
- caractere = Serial2.read();
- // Ignora caractere de quebra de linha
- if (caractere != '\n')
- {
- //Concatena valores
- dados.concat(caractere);
- }
- //Aguarda buffer serial ler próximo caractere
- delay(10);
- }
- } else {
- return "ok";
- }
- Serial.print("Recebido: ");
- Serial.println(dados);
- return dados;
- }
- void ligaBuzzer() {
- // Aciona o buzzer 3 vezes
- //for (int i = 1; i <= 2; i++)
- //{
- //Pisca ligando e desligando led vermelho,verdee buzzer
- digitalWrite(LEDVERDE, HIGH);
- digitalWrite(LEDVERMELHO, HIGH);
- tone(buzzer, 1500, 1000);
- delay(200);
- noTone(buzzer);
- tone(buzzer, 1500, 1000);
- delay(200);
- noTone(buzzer);
- //Desligando o buzzer.
- //digitalWrite(LEDVERDE, LOW);
- digitalWrite(LEDVERMELHO, LOW);
- //delay(500);
- //}
- // noTone(buzzer);
- }
- String leituraCartao()
- {
- if ( ! mfrc522.PICC_IsNewCardPresent())
- {
- delay(100);
- }
- if ( ! mfrc522.PICC_ReadCardSerial())
- {
- // Serial.print(" -1 "); //-1 Representa erro na serial
- return "NADA" ;
- }
- String conteudo = "";
- byte letra;
- //bloco abaixo imprime o ID da tag
- for (byte i = 0; i < mfrc522.uid.size; i++)
- {
- ///Essa parte é nessearia para concatenar e imprimir a tag, em letras maiusculas
- //Retirei a parte que imprime em maiusculo, e colocoquei somente para concatenar.
- //Abaixo eu imprimo o resultado da concatenação na serial
- //Para imprimir em Maiusculo e durante a concatenação basta descomentar as 2 linhas abaixo e o println logo abaixo.
- //Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
- //Serial.print(mfrc522.uid.uidByte[i], HEX);
- conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : ""));
- conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
- }
- //Serial.println();
- //Serial.println(conteudo);
- //Obtem os dados do setor 1, bloco 4 = Sobrenome
- byte sector = 1;
- byte blockAddr = 4;
- byte trailerBlock = 7;
- byte status;
- byte buffer[18];
- byte size = sizeof(buffer);
- //Autenticacao usando chave A (Nome)
- status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
- if (status != MFRC522::STATUS_OK) {
- return "ERRO1";
- }
- status = mfrc522.MIFARE_Read(blockAddr, buffer, &size);
- if (status != MFRC522::STATUS_OK) {}
- //Mostra os dados do nome no Serial Monitor e LCD
- lcd.clear();
- lcd.setCursor(0, 0);
- for (byte i = 0; i < 16; i++)
- {
- //fSerial.print(char(buffer[i])); //Imprime o nome na Serial
- lcd.write(char(buffer[i]));
- }
- //Serial.println();
- //Obtem os dados do setor 0, bloco 1 = Nome
- sector = 0;
- blockAddr = 1;
- trailerBlock = 3;
- //Autenticacao usando chave B (Escola)
- status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
- if (status != MFRC522::STATUS_OK)
- {
- return "ERRO2";
- }
- status = mfrc522.MIFARE_Read(blockAddr, buffer, &size);
- if (status != MFRC522::STATUS_OK) { }
- //Mostra os dados do sobrenome no Serial Monitor e LCD
- lcd.setCursor(0, 1);
- for (byte i = 0; i < 16; i++)
- {
- //Serial.print(char(buffer[i])); //Imprime o sobrenome na serial
- lcd.write(char(buffer[i]));
- }
- ligaBuzzer();
- // Serial.println(); //Teste na serial
- delay(500);
- // Halt PICC
- mfrc522.PICC_HaltA();
- // Stop encryption on PCD
- mfrc522.PCD_StopCrypto1();
- delay(1000);
- //mensagem_inicial_cartao();
- //Se chegou ate aqui é porque leu um cartão valido então conta uma pessoa, com o retorno 3
- return conteudo;
- }
- void mensagem_inicial_cartao()
- {
- //Serial.println("Aproxime o seu cartao do leitor..."); //teste na serial
- lcd.clear();
- lcd.print(" Aproxime o seu");
- lcd.setCursor(0, 1);
- lcd.print("cartao do leitor");
- }
- void lcd_SD()
- {
- //Serial.println("Aproxime o seu cartao do leitor..."); //teste na serial
- lcd.clear();
- lcd.print(" Conectando");
- lcd.setCursor(0, 1);
- lcd.print(" Banco de Dados");
- }
- void erroLeitura()
- {
- //Serial.println("Equilibrio Administrativo"); //teste na serial
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print("Erro na leitura");
- //lcd.setCursor(2, 1);
- //lcd.print(" ");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement