Como gravar dados no cartão RFID - MakerHero

Como gravar dados no cartão RFID 181

Neste post vamos mostrar como gravar dados no Cartão RFID Programável Mifare 13,56Mhz, que pode ser usado juntamente com o leitor de cartões MFRC522, presente no Kit Módulo Leitor RFID MFRC522 . Esse cartão possui 1KB de memória, dos quais 768 bytes estão livres para gravação de dados pelo usuário.

Gravação tag RFID

Aqui no blog nós já apresentamos um projeto com leitor RFID, no post Controle de Acesso usando leitor RFID com Arduino, onde usamos o leitor para validar (ou não), a UID de um cartão.

ATENÇÃO! O programa de exemplo deste post apaga os dados do seu cartão RFID, portanto faça testes apenas com um cartão apropriado, evitando aproximar do leitor cartões de Banco, cartões de crédito, bilhete único, etc, que utilizem tecnologia RFID.

Material Necessário:

Ligação do módulo RFID ao Arduino

O esquema de ligação do módulo RFID ao Arduino é o mesmo do post sobre o Controle de Acesso, com a inclusão de dois botões para seleção das funções de leitura e gravação. Conecte o módulo conforme a imagem abaixo, observando que a alimentação dele é de 3,3V. Vamos utilizar um display LCD para mostrar as mensagens de leitura e gravação.

O push-button marcado com a letra L ativa o modo de leitura do cartão, e o push-button com a letra G ativa o modo de gravação.

Programa leitura e gravação cartão RFID

Colocamos em um mesmo programa as funções de leitura e gravação, e vamos selecionar cada uma delas com um push-button, conforme descrito acima. Para gravação dos dados no cartão, vamos utilizar o Serial Monitor como interface de entrada.

Carregue o seguinte programa no Arduino, que utiliza a biblioteca MFRC522, disponível neste link. Descompacte a pasta e coloque-a dentro da pasta LIBRARIES da IDE do Arduino.

//Programa: Leitura e gravacao de cartoes RFID
//Autor: MakerHero

#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>

//Pinos Reset e SS módulo MFRC522
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

LiquidCrystal lcd(6, 7, 5, 4, 3, 2);

#define pino_botao_le A2
#define pino_botao_gr A3

MFRC522::MIFARE_Key key;

void setup()
{
  pinMode(pino_botao_le, INPUT);
  pinMode(pino_botao_gr, INPUT);
  Serial.begin(9600);   //Inicia a serial
  SPI.begin();      //Inicia  SPI bus
  mfrc522.PCD_Init();   //Inicia MFRC522

  //Inicializa o LCD 16x2
  lcd.begin(16, 2);
  mensageminicial();

  //Prepara chave - padrao de fabrica = FFFFFFFFFFFFh
  for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
}

void loop()
{
  //Verifica se o botao modo leitura foi pressionado
  int modo_le = digitalRead(pino_botao_le);
  if (modo_le != 0)
  {
    lcd.clear();
    Serial.println("Modo leitura selecionado");
    lcd.setCursor(2, 0);
    lcd.print("Modo leitura");
    lcd.setCursor(3, 1);
    lcd.print("selecionado");
    while (digitalRead(pino_botao_le) == 1) {}
    delay(3000);
    modo_leitura();
  }
  //Verifica se o botao modo gravacao foi pressionado
  int modo_gr = digitalRead(pino_botao_gr);
  if (modo_gr != 0)
  {
    lcd.clear();
    Serial.println("Modo gravacao selecionado");
    lcd.setCursor(2, 0);
    lcd.print("Modo gravacao");
    lcd.setCursor(3, 1);
    lcd.print("selecionado");
    while (digitalRead(pino_botao_gr) == 1) {}
    delay(3000);
    modo_gravacao();
  }
}
void mensageminicial()
{
  Serial.println("nSelecione o modo leitura ou gravacao...");
  Serial.println();
  lcd.clear();
  lcd.print("Selecione o modo");
  lcd.setCursor(0, 1);
  lcd.print("leitura/gravacao");
}

void mensagem_inicial_cartao()
{
  Serial.println("Aproxime o seu cartao do leitor...");
  lcd.clear();
  lcd.print(" Aproxime o seu");
  lcd.setCursor(0, 1);
  lcd.print("cartao do leitor");
}

void modo_leitura()
{
  mensagem_inicial_cartao();
  //Aguarda cartao
  while ( ! mfrc522.PICC_IsNewCardPresent())
  {
    delay(100);
  }
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    return;
  }
  //Mostra UID na serial
  Serial.print("UID da tag : ");
  String conteudo = "";
  byte letra;
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    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();

  //Obtem os dados do setor 1, bloco 4 = Nome
  byte sector         = 1;
  byte blockAddr      = 4;
  byte trailerBlock   = 7;
  byte status;
  byte buffer[18];
  byte size = sizeof(buffer);

  //Autenticacao usando chave A
  status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A,
                                  trailerBlock, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("PCD_Authenticate() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }
  status = mfrc522.MIFARE_Read(blockAddr, buffer, &size);
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("MIFARE_Read() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
  }
  //Mostra os dados do nome no Serial Monitor e LCD
  lcd.clear();
  lcd.setCursor(0, 0);
  for (byte i = 1; i < 16; i++)
  {
    Serial.print(char(buffer[i]));
    lcd.write(char(buffer[i]));
  }
  Serial.println();

  //Obtem os dados do setor 0, bloco 1 = Sobrenome
  sector         = 0;
  blockAddr      = 1;
  trailerBlock   = 3;

  //Autenticacao usando chave A
  status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A,
                                  trailerBlock, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK)
  {
    Serial.print(F("PCD_Authenticate() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }
  status = mfrc522.MIFARE_Read(blockAddr, buffer, &size);
  if (status != MFRC522::STATUS_OK)
  {
    Serial.print(F("MIFARE_Read() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
  }
  //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]));
    lcd.write(char(buffer[i]));
  }
  Serial.println();

  // Halt PICC
  mfrc522.PICC_HaltA();
  // Stop encryption on PCD
  mfrc522.PCD_StopCrypto1();
  delay(3000);
  mensageminicial();
}

void modo_gravacao()
{
  mensagem_inicial_cartao();
  //Aguarda cartao
  while ( ! mfrc522.PICC_IsNewCardPresent()) {
    delay(100);
  }
  if ( ! mfrc522.PICC_ReadCardSerial())    return;

  //Mostra UID na serial
  Serial.print(F("UID do Cartao: "));    //Dump UID
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  }
  //Mostra o tipo do cartao
  Serial.print(F("nTipo do PICC: "));
  byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
  Serial.println(mfrc522.PICC_GetTypeName(piccType));

  byte buffer[34];
  byte block;
  byte status, len;

  Serial.setTimeout(20000L) ;
  Serial.println(F("Digite o sobrenome,em seguida o caractere #"));
  lcd.clear();
  lcd.print("Digite o sobreno");
  lcd.setCursor(0, 1);
  lcd.print("me + #");
  len = Serial.readBytesUntil('#', (char *) buffer, 30) ;
  for (byte i = len; i < 30; i++) buffer[i] = ' ';

  block = 1;
  //Serial.println(F("Autenticacao usando chave A..."));
  status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A,
                                    block, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("PCD_Authenticate() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  //Grava no bloco 1
  status = mfrc522.MIFARE_Write(block, buffer, 16);
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("MIFARE_Write() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  block = 2;
  //Serial.println(F("Autenticacao usando chave A..."));
  status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A,
                                    block, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("PCD_Authenticate() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  //Grava no bloco 2
  status = mfrc522.MIFARE_Write(block, &buffer[16], 16);
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("MIFARE_Write() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  Serial.println(F("Digite o nome, em seguida o caractere #"));
  lcd.clear();
  lcd.print("Digite o nome e");
  lcd.setCursor(0, 1);
  lcd.print("em seguida #");
  len = Serial.readBytesUntil('#', (char *) buffer, 20) ;
  for (byte i = len; i < 20; i++) buffer[i] = ' ';

  block = 4;
  //Serial.println(F("Autenticacao usando chave A..."));
  status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A,
                                    block, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("PCD_Authenticate() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  //Grava no bloco 4
  status = mfrc522.MIFARE_Write(block, buffer, 16);
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("MIFARE_Write() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  block = 5;
  //Serial.println(F("Authenticating using key A..."));
  status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A,
                                    block, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("PCD_Authenticate() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  //Grava no bloco 5
  status = mfrc522.MIFARE_Write(block, &buffer[16], 16);
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("MIFARE_Write() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    //return;
  }
  else
  {
    Serial.println(F("Dados gravados com sucesso!"));
    lcd.clear();
    lcd.print("Gravacao OK!");
  }

  mfrc522.PICC_HaltA(); // Halt PICC
  mfrc522.PCD_StopCrypto1();  // Stop encryption on PCD
  delay(5000);
  mensageminicial();
}

A seleção será feita pelo push-button, que vai mostrar por alguns segundos a mensagem “Modo gravação selecionado” ou “Modo leitura selecionado”.

Primeiramente selecione o modo de gravação (push-button direito) e mantenha o cartão RFID próximo ao leitor até o final da gravação. Digite o sobrenome do usuário no serial monitor, terminando com o caractere #:

Serial_Monitor_Gravacao_Sobrenome

Repita o mesmo processo, agora para o nome:

Serial_Monitor_Gravacao_Nome

Se a gravação ocorreu normalmente, a mensagem “Gravação OK!” será exibida no display.

Leitura dos dados do cartão

Para efetuar a leitura, pressione o push-button e selecione o “Modo de leitura”. Depois disso, simplesmente aproxime o cartão do leitor, e os dados serão mostrados no display LCD e também no serial monitor.

Você também pode utilizar o programa de exemplo DumpInfo, presente na biblioteca, para verificar como os dados foram gravados no cartão. Na IDE do Arduino, carregue o programa no menu Arquivo => Exemplos => MFRC522 => Dumpinfo

Aproxime o cartão do leitor, e será feito um dump das informações do cartão, com os dados sendo mostrados no serial monitor. Nesse dump você pode conferir os dados que foram gravados no cartão, especificamente nos setores 0 e 1:

Serial_Monitor_Dump_String

No cartão os dados são gravados no formato hexadecimal, e posteriormente convertidos em caracteres e mostrados no display com os comandos lcd.write(char(<dados>)). Você pode relacionar os códigos em hexadecimal com os caracteres utilizando uma tabela ascii, como fizemos na imagem acima, mostrando que o número 46 corresponde ao F, o 69 ao I, o 6C ao L e assim por diante.

 Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

181 Comentários

  1. tenho cartões com bloco 0 regravável, vocês tem alguma sugestão de codigo que grave bloco 0, ou copie e grave bloco de outros cartões?

  2. Sou um pouco inexperiente com projetos em arduino, mas me interessei muito por esse e gostaria de executa-lo.

    tenho duvidas em relação a qual potenciometro e resistores usar.

    Existe algum guia de montagem mais detalhado que eu consiga acessar?

    1. Olá Octavio,

      Ajustamos o post com o link para os materiais necessários.

      Abraços!
      Vinícius – MakerHero

      1. Boa noite, agradeço muito a agilidade na resposta.

        Mais uma duvida, qual a maneira mais fácil de fornecer a alimentação do arduino com 3.3v pro projeto?

        Através de uma fonte com essa potencia?

      2. Vou reformular a pergunta, como deve ser feita a alimentação 3.3v do projeto?

        1. Olá Octavio,

          O pino 3,3 V do Arduino Uno é um pino de saída, você alimenta o Arduino via USB e consegue ter a saída de 3,3 naquele pino.

          Abraços!
          Vinícius – Equipe MakerHero

  3. é possível gravar dados também com o modulo rdm6300?

    1. Olá Bruno!

      Até onde eu encontrei as informações é possível sim, desde que a TAG tenha espaço para a gravação de dados, algumas não tem.

      Abraços!
      Vinícius – Equipe MakerHero

  4. Excelente projeto para estudo do comportamento dos componentes eletronicos. Parabéns!!

  5. Muito bom, vou fazer. Obrigado.

  6. Eu adorei esse projeto. Já estou pensando em como posso fazer mais projetos com ele, como uma porta que só abre com o cartão correto, ou com um histórico de quem usou o meu computador. A matéria foi muito útil para mim, agradeço muito

    1. Guilherme,

      Ainda bem que lhe foi útil!!

      Abraços!
      Diogo – Equipe MakerHero

  7. como armazenar uma tabela as informações colhidas com nome e data/hora das tags.
    penso em fazer um controle de presença na universidade e esses dados collhidos em forma de tabela

  8. Bom dia,

    Existe alguma diferença para que possa ser feito a regravação de uma TAG RFID 13,56MHz comum e uma TAG RFID 13,56MHz com UID de Xbytes

  9. Ola,muito top esse projeto. teria como gravar uma porta digital do arduino junto com a tag cadastrada para acionar um dispositivo? tipo uma tag para cada porta.

  10. Muito bom obrigado pela a lição.

    1. Paiva,

      Nós que agradecemos!

      Abraços!
      Diogo – Equipe MakerHero

  11. Gostei do projeto, eu quero fazer algo parecido.
    Minha ideia é usar o cartao pra gravar a quantidade de creditos para liberar maquinas de fliperama.
    Preciso gravar na memoria do cartão, por ex. 10 creditos.
    Quando for levada até o leitor ele leia os creditos e subtraia um credito do total.
    Que o arduino só libere o sinal de saida qdo tem credito.
    Você pode dar uma ajuda?

    1. Charleskakashi no face.
      Ou (85) 985944249. Zap.
      Tô com o mesmo projeto q vc aqui em Fortaleza CE podemos nos ajudar.
      Manda zap ou face.

  12. Ola eu não estou conseguindo pagar o que esta gravado no RFID como poderia apagar os dados salvo?

    1. Antony,

      Você tentou gravar por cima?

      Abraços!
      Diogo – Equipe MakerHero

  13. estou com problemas, o cartão ou o ship azul não são efetuadas as leituras no respetivo leitor
    algo no codigo ou na ligção que faça a correção do problema?

    1. Diogo,

      Seu cartão/tag são de mesma frequência do leitor?

      Abraços!
      Diogo – Equipe MakerHero

  14. Ola, amigo queria ver se voce consegue me ajudar, utilizando o esp8266 nesse projeto, apos eu gravar o cartao, a serial trava.
    Exemplo eu coloquei no codigo uma chamada via serial para definir leitura ou escrita e quando eu leio, nao ha problemas, quando eu gravo o cartao, ele grava corretamente e depois a serial para de fucionar, impedindo que eu continue a gravar mais cartoes ou que eu ocntinue com ooutras aplicacoes quaisquer.Tem ideia do que esta ocorrendo? Tentei usar ESP.reset() mas essa funcao e instavel, as vezes funciona as vezes nao

    1. Você substituiu o Arduino pelo ESP? Nesse caso tente usar a biblioteca para o ESP8266: https://github.com/Jorgen-VikingGod/ESP8266-MFRC522

      Abraços!
      Diogo – Equipe MakerHero

      1. Sim amigo eu substitui senao nao seria nem sequer possivel gravar o firmware. Levando em conta que configuracoes e bibliotecas estao 100% ok, saberia dizer se ha alguma interrucao no SPI que possa travar a comunicacao serial no ESP, ou se a biblioteca do MFRC522 em algum momento desabilita o serial ou chama alguma interrupcao que possa dar esse conflito?

        1. Vlew Diego, verei isso. A principio consegui uma solucao paleativa aqui mas vou postar la pra descobrir se ha outro meio de arrumar. No codigo exemplo de voces esta perfeito tudo funcionando. Porem quando rodei o codigo aqui estava cortando a primeira letra do sobrenome quando executava a leitura. Ai na linha 135 eu alterei o for onde tem byte i = 1 eu coloquei byte i = 0 pra que ele imprima na serial desde a primeira letra do buffer la. Nao sei se e por eu usar o ESP e no exemplo ser atmel ou se realmente ha um equivoco ali. No mais muito obrigado pelas respostas

          1. Beleza, Nelson!

            Abraços!
            Diogo – Equipe MakerHero

            Diogo Zimmermann
        2. Desculpe Diogo, eu escrevi errado seu nome no anterior. abcs

  15. Boas…. Excelente demonstração, parabéns. Mas como ver, e poder programar um cartão encriptado???

    1. Carlos,

      Apenas com algum leitor que contenha a chave de criptografia para ler os dados.

      Abraços!
      Diogo – Equipe MakerHero

  16. Estou desenvolvendo um controle de acesso por Raspberry Pi, e atualmente uso as bibliotecas em Python para realizar o controle. Como eu tenho conhecimento básico em Python, a única forma de realizar a gravação da tag seria utilizando a programação para Arduino em C++ (dessa página). Eu preciso gravar as tag para que não haja o problema de alguém entrar no local sem ser autorizado. Como posso usar essa biblioteca de vocês em C++ no Raspberry sem ter que perder um certo tempo na tradução do código para Python? Alguma ideia???

    1. Olá Carolini,

      Acho que não é possível fazer essa “tradução” de uma biblioteca. O melhor é pesquisar por uma biblioteca que já esteja em Python.

      Abraço!
      Rosana – Equipe MakerHero

  17. estou querendo fazer com que o RFID grave apenas o dados do cartão (sem ter que gravar nome digitado no serial), por exemplo, uma mensagem padrão para todos os cartões. Quero apenas que os cartões sejam cadastrados sem o uso da serial. Qual parte do código recebe esses nomes digitados? não consegui identificar a parte para essa adaptação

    1. Olá Isabela,

      Não entendi direito o que você deseja fazer.
      Você gravar nos cartões um mensagem padrão?

      Abraço!
      Rosana – Equipe MakerHero

      1. Não.. Por exemplo, eu quero quando o cartão já tiver passado pela etapa de gravação e for apresentado depois na função de ler, o lcd apresente apenas uma mensagem padrão( exemplo:olá)… ou seja, não quero utilizar a serial para ficar digitando o nome e sobrenome, eu quero que apenas a UID do cartão fique gravada, sem a necessidade de estar digitando nomes na serial

        só quero que ele reconheça quais cartões já estam gravados e quais não estam. Não quero colocar nomes específicos para cada um, pois no meu projeto não vou poder contar com uma serial

        Att

        1. Olá Isabela,

          Então você não quer gravar nada no cartão RFID, apenas cadastrar algumas UIDs e mostrar uma mensagem padrão quando aproximar um cartão com UID conhecida. Nós já temos um tutorial para isso, dá uma olhada: https://www.makerhero.com/blog/controle-acesso-leitor-rfid-arduino/

          Abraço!
          Rosana – Equipe MakerHero

          1. mas esse outro programa grava os cartões no proprio programa, eu preciso desse botao de gravar e leitura

            por isso quero saber onde se localiza essa parte do codigo

          2. a parte que ele armazena o nome, eu não compreendo se ele armazena a UID junto.
            Eu só quero que ele não armazene mais nome nenhum relacionado a uid

          3. Olá Isabela,

            O cartão já vem com a UID de fabricada e a mesma não pode ser alterada. Quando você grava um nome (ou qualquer outra informação) ela fica atrelada a UID. Se você não deseja gravar o nome (ou qualquer outra informação), basta não gravar, a UID já vai estar lá.

            Abraço!
            Rosana – Equipe MakerHero

  18. muito obrigado pela aula. gostaria de saber se á como usar um cartao depois de gravado para acionar um rele, e guardar em um registro qual cartao foi usado

    1. Olá Fabiano,

      É possível fazer isso sim, dá uma olhadinha nesse tutorial: https://www.makerhero.com/blog/acionando-trava-eletrica-com-rfid/

      Abraço!
      Rosana – Equipe MakerHero

  19. Show muito bom

    1. Olá!

      É muito bom saber que gostou do nosso trabalho 😀

      Abraço!
      Rosana – Equipe MakerHero

  20. Meu Lcd não está funcionando, acende mas não aparecem as mensagens… apenas no serial… e qual o limite de caracteres para gravar o nome e sobrenome no tag?

    1. Olá Gilberto,

      Você ajustou o potenciômetro?
      Tanto as tags quanto os cartões possuem uma memória de 1KB.

      Abraço!
      Rosana – Equipe MakerHero

  21. Troquei por acidente a chave dos bloco. Tem uma forma de formatar o cartão?

  22. Preciso incrementar um sensor biométrico nesse código. Alguem sabe como fazer isso?

    1. Olá Eduardo,

      Vai depender de qual sensor você está utilizando. Mas acredito que esse post pode te ajudar: https://www.makerhero.com/blog/primeiros-passos-sensor-de-impressao-digital/

      Abraço!
      Rosana – Equipe MakerHero

  23. Olá. Qual seria a quantidade máxima de cartões que eu poderia ter sem que suas IDs se repetissem? Estou bolando um projeto grande nesse sentido…

    1. Olá William,

      Acredito que as UIDs não se repetem e também não podem ser alteradas. Com 8 dígitos o numero de IDs diferentes é maior que 600 bilhões.

      Abraço!
      Rosana – Equipe MakerHero

  24. Professor preciso de um que grave vários dados tais como: Nome completo, endereço, CPF, RG, Email, Fone, Celular, enfim todos os dados pessoais, etc.

    1. Olá,

      Para adicionar os dados que deseja é necessário inserir no sketch linhas de código parecidas como foi feito para nome e sobrenome. É importante observar que esse carão possui apenas 1KB de memória e talvez você não consiga gravar todos esses dados.

      Abraço!
      Rosana – Equipe MakerHero

  25. É possível associar varias informações a um cartão ?
    Por exemplo: quero colocar no cartão as informações de data de nascimento, nome e local de trabalho de um funcionário e queria ler em algum tipo de aplicativo

    1. Olá Lucélio!

      É possível gravar várias informações no mesmo cartão. Nesse, por exemplo, pode gravar até 768 bytes:
      https://www.makerhero.com/produto/tag-chaveiro-rfid-programavel-mifare-1356mhz/

      Acontece que para definir o que é cada informação, é melhor fazer isso na hora da leitura.

      Abraços!

      André – Equipe MakerHero

  26. #include
    #include
    #include
    //Apenas ler a ID do cartão, varrer a memória do ESP em busca da ID, se ela estiver armazenada,
    //liberar acesso;
    //Ter dois botões, um para ler ID do cartão como liberada, outro pra ler a ID do cartão e excluir da listagem;
    //Ter três LEDs, um verde, um azul e um vermelho: Apenas Verde = Acesso liberado;
    //Apenas Vermelho = Acesso negado
    //Leds Azul e Verde = Cadastrado cartão para liberar; Azul e Vermelho = Cartão excluído
    //Um servo motor para movimento da tranca/fechadura da porta.
    //Pinagem:
    #define SS_PIN 10
    #define RST_PIN 9
    #define SIZE_BUFFER 18
    #define MAX_SIZE_BLOCK 16
    #define pinoVerde 2
    #define pinoVermelho 3
    #define pinoAzul 4
    #define pinoServo 5
    #define BtAdd 7
    #define BtDel 8
    String rfidauth = “t3rfd5”;
    String rfiddisauth = “fgr567”;
    byte blocoLeitura = 2;
    byte TrailerBlock = 7;
    Servo tranca;
    MFRC522 mfrc522(SS_PIN, RST_PIN);
    char st[10];
    MFRC522::MIFARE_Key key;
    MFRC522::StatusCode status;

    void setup(){
    Serial.begin(9600);
    SPI.begin();
    mfrc522.PCD_Init();
    pinMode(pinoAzul, OUTPUT);
    pinMode(pinoVerde, OUTPUT);
    pinMode(pinoVermelho, OUTPUT);
    pinMode(pinoServo, OUTPUT);
    pinMode(BtAdd, INPUT_PULLUP);
    pinMode(BtDel, INPUT_PULLUP);
    tranca.attach(pinoServo);
    Serial.println(“Aproxime o seu cartao do leitor…”);
    Serial.println();
    }

    void loop(){
    if (digitalRead(BtAdd) == LOW){
    Serial.println(“Em modo Add”);
    //adiciona();
    delay(1000);
    }else if(digitalRead(BtDel) == LOW){
    Serial.println(“Em modo Dele”);
    //deleta();
    delay(1000);
    }else{
    //le rfid e autoriza ou nào o acesso
    Serial.println(“Em modo normal leitura”);
    leitura();
    delay(1000);
    }
    }

    void adiciona(){
    if ( ! mfrc522.PICC_IsNewCardPresent()){
    return;
    }
    if ( ! mfrc522.PICC_ReadCardSerial()){
    return;
    }
    delay(200);
    status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, TrailerBlock, &key, &(mfrc522.uid));
    if (status != MFRC522::STATUS_OK) {
    Serial.print(F(“PCD_Authenticate() failed: “));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
    }
    byte buffer[16];
    rfidauth.getBytes(buffer, 16);
    status = mfrc522.MIFARE_Write(2, buffer, 16);
    if (status != MFRC522::STATUS_OK) {
    Serial.print(F(“MIFARE_Write() failed: “));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
    }
    }

    void deleta(){
    if ( ! mfrc522.PICC_IsNewCardPresent()){
    return;
    }
    if ( ! mfrc522.PICC_ReadCardSerial()){
    return;
    }
    delay(200);
    status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, TrailerBlock, &key, &(mfrc522.uid));
    if (status != MFRC522::STATUS_OK) {
    Serial.print(F(“PCD_Authenticate() failed: “));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
    }
    byte buffer[16];
    rfiddisauth.getBytes(buffer, 16);
    status = mfrc522.MIFARE_Write(blocoLeitura, buffer, 16);
    if (status != MFRC522::STATUS_OK) {
    Serial.print(F(“MIFARE_Write() failed: “));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
    }
    }

    void leitura(){
    if ( ! mfrc522.PICC_IsNewCardPresent()){
    delay(100);
    }
    if ( ! mfrc522.PICC_ReadCardSerial()){
    return;
    }
    mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
    for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
    }
    status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A,
    TrailerBlock, &key, &(mfrc522.uid));
    if (status != MFRC522::STATUS_OK) {
    Serial.print(F("PCD_Authenticate() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
    }else{
    Serial.println("autenticado");
    }
    byte buffer[16];
    byte tamanho = 16;
    status = mfrc522.MIFARE_Read(blocoLeitura, buffer, &tamanho);
    if (status != MFRC522::STATUS_OK) {
    Serial.print(F("MIFARE_Read() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    }
    String str = (char*)buffer;
    if (str == rfiddisauth){
    digitalWrite(pinoVermelho, HIGH);
    delay(500);
    }else if (str == rfidauth){
    digitalWrite(pinoVerde, HIGH);
    delay(500);
    }
    }

    Esse é o meu código. Já tentei de tudo. Troquei peças, troquei tags. Dá sempre o mesmo erro :PCD_Authenticate() failed: Timeout in communication.
    To há 3 semanas empacado. Não consigo nem ler os dados. O dump da tag ele faz, então a ligação e as tags funcionam.

  27. Em vez dos butoes, usar o potenciometro funciona?

    1. Olá André!

      Funciona sim, mas tem que mexer na lógica de programação se quiser usar um potenciômetro no lugar dos dois botões.

      Abraços!

      André – Equipe MakerHero

  28. Comprei esse kit de leitura de tag, fiz o programa e funcionou perfeitamente. Recentemente comprei tag adesiva na mesma frequencia, porem ao inves de terem 8 digitos igual o do programa tem 12 digitos e está dando erro, sou iniciante e gostaria de saber o q posso fazer pra resolver o problema.

  29. Como faço para apagar dados pessoais que coloquei em minha tag e no meu cartao usando o exemplo da IDE do arduino? Depois que eu fiz esse teste eu tentei utilizar um outro sketch eu recebo essa mensagem… PCD_Authenticate() failed: Timeout in communication. e todos os sites que encontrei – em ingles- falam que é pq ja tenho dados escritos no cartao/tag. Alguem saberia me ajudar? Desde ja agradeço.

    Atenciosamente

    Marcos Paulo F. do Amaral

    1. Olá Marcos!

      Esse programa já apaga os dados do cartão. Acredito que o problema esteja no seu programa.

      Abraços!

      André – Equipe MakerHero

      1. Obrigado por responder Andre.

        Mas o que eu quis dizer é que eu usei os meus cartoes e tags em um exemplo do proprio IDE do arduino, agora quando tento usar em outro programa eu recebo essa mensagem PCD_Authenticate() failed: Timeout in communication. pesquisei em varios sites a maioria em site em ingles, e disseram que nao consigo acessar o cartao pq gravei alguma coisa neles que ficou cripitografado – nao sei se é verdade – e que nao tem como apagar.

        Gostaria tambem de saber se tem como usar esse codigo do site em um ESP32, se sim, o que devo modificar?

        Desde já agradeço

        Atenciosamente

        Marcos Paulo

        1. Marcos!

          Acredito que esse programa que você está utilizando deva estar com problemas para sobreescrever. ou mesmo faça isso de propósito para você não perder seus dados.

          Sobre o ESP32, é possível sim. Você deve conectar os pinos aos pinos SPI da outra placa.

          Abraços!

          André – Equipe MakerHero

          1. Obrigado por me responder novamente Andre.
            Desculpe a minha ignorancia mas, eu sou leigo nesses negocios da parte de eletrica, estou tentando fazer meu tcc pois faço sistema de informação, nao entendo o que são os pinos SPI, vc teria uma imagem dferenciando esses pinos entre o arduino e o Esp32, ou me explicar como eu faço para diferenciar ou descobrir quais sao os pinos SPI do Esp32.

            Mais uma vez obrigado.

        2. Marcos!

          Você nunca precisa pedir desculpas por não conhecer algo. Faz parte do aprendizado e todo mundo que sabe antes de aprender também não sabia.

          SPI é um tipo de comunicação, como USB, I2C, Serial.

          Depende de qual placa você usa. É interessante você dar uma olhada na pinagem dela, Fica mais fácil procurar em inglês “PinOut”

          Precisando, estamos aí!

          Abraços!

          André – Equipe MakerHero

          1. Ola novamente André, tudo bem com vc?
            Vc tem me ajudado muito e eu agradeço d mais…srsr

            Eu gostaria de fazer esse projeto do site usando o ESP32 e o I2C, so que pela configuração das conexoes o RFID e o I2C irão usar os mesmos PINOS ( 21 e 22) e por isso daria conflito e o RFID nao funcionaria. Vc saberia me ajudar com isso? Quais os pinos devo usar no ESP32, para usar esses os modulos RFID, I2C e o LCD?

            Desde já agradeço.

          2. Marcos!

            I2C é o tipo de comunicação. O bom dele é que quando você precisa ligar vários dispositivos é só juntar os SDA e SCL nos pinos.

            No programa cada um terá seu próprio endereço.

            Abraços!

            André – Equipe MakerHero

  30. bom dia, preciso muito da colaboração de vocês.
    necessito que essa programação abaixo, libere a passagem com “QWE” e que no monitor apareça um nome que também será salvo no cartão.
    #include //
    #include

    String nome[18];
    String nomel;
    String nomef;

    #define SS_PIN 53
    #define RST_PIN 49
    MFRC522 mfrc522(SS_PIN, RST_PIN);

    MFRC522::MIFARE_Key key;

    void setup()
    {
    Serial.begin(9600); //Inicia a serial
    SPI.begin(); //Inicia SPI bus
    mfrc522.PCD_Init(); //Inicia MFRC522

    mensageminicial();

    //Prepara chave – padrao de fabrica = FFFFFFFFFFFFh
    for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
    }

    void loop()
    {
    //Aguarda cartao
    while ( ! mfrc522.PICC_IsNewCardPresent())
    {
    delay(100);
    }
    if ( ! mfrc522.PICC_ReadCardSerial())
    {
    return;
    }
    //Mostra UID na serial
    Serial.print("UID da tag : ");
    String conteudo = "";
    byte letra;
    for (byte i = 0; i < mfrc522.uid.size; i++)
    {
    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();

    //Obtem os dados do setor 1, bloco 4 = Nome
    byte sector = 1;
    byte blockAddr = 4;
    byte trailerBlock = 7;
    byte status;
    byte buffer[18];
    byte size = sizeof(buffer);

    //Autenticacao usando chave A
    status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A,
    trailerBlock, &key, &(mfrc522.uid));
    if (status != MFRC522::STATUS_OK) {
    Serial.print(F("PCD_Authenticate() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
    }
    status = mfrc522.MIFARE_Read(blockAddr, buffer, &size);
    if (status != MFRC522::STATUS_OK) {
    Serial.print(F("MIFARE_Read() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    }
    //Mostra os dados do nome no Serial Monitor e LCD
    for (byte i = 1; i < 16; i++)
    {
    nomel=char(buffer[i]);
    Serial.print(nomel);
    }
    Serial.println();
    Serial.println();

    //Obtem os dados do setor 0, bloco 1 = Sobrenome
    sector = 0;
    blockAddr = 1;
    trailerBlock = 3;

    //Autenticacao usando chave A
    status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A,
    trailerBlock, &key, &(mfrc522.uid));
    if (status != MFRC522::STATUS_OK)
    {
    Serial.print(F("PCD_Authenticate() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
    }
    status = mfrc522.MIFARE_Read(blockAddr, buffer, &size);
    if (status != MFRC522::STATUS_OK)
    {
    Serial.print(F("MIFARE_Read() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    }
    //Mostra os dados do sobrenome no Serial Monitor e LCD
    for (byte i = 0; i < 16; i++)
    {
    nomel=char(buffer[i]);
    nomef=nomef+nomel;
    }
    Serial.println();
    Serial.println("Bem Vindo "+nomef);
    if (nomef == "Machado ")
    {
    Serial.println("Acesso Liberado");
    nomef="";
    }
    else
    {
    Serial.println("Acesso Negado");
    nomef="";
    }

    // Halt PICC
    mfrc522.PICC_HaltA();
    // Stop encryption on PCD
    mfrc522.PCD_StopCrypto1();
    delay(1000);
    mensageminicial();
    }

    void mensageminicial()
    {
    Serial.println("Aproxime o seu cartao do leitor…");
    }

    Felipe Gomes Machado Cardoso
  31. Nao teria como fazer com que o leitor informasse que o cartao nao está cadastros e perguntar se deseja cadastra dando duas opções sim e não…. Se a opção for sim, ele solicita uma senha para liberar o cadastro, apos colocar a senha a tag é cadastrada. Tem como fazer isso??

  32. Bom dia!
    Eu consigo gravar mais de um dado no cartão? Exemplo de aplicação: Eu tenho 04 controles de acesso e gostaria que de forma StandAlone (ou seja, não conectado à rede, como funcionam as fechaduras de hotel) eu deixasse gravado nestes controles de acesso os números dos cartões que estão habilitados para entrar.

    Na portaria, através do software eu gravaria NO CARTÃO o número habilitado para entrar na porta A. Caso o usuário esteja credenciado para entrar na porta A e B, eu gravaria os dados de liberação (que já se encontram gravados no controle de acesso) os números habilitados para a porta A e porta B.

    É possível?
    Muito obrigado

    1. Olá Henrique!

      É possível gravar mais dados, desde que ele não ultrapasse o limite de memória do cartão.

      Abraços!

      André – Equipe MakerHero

  33. Há um pequeno erro na linha 135. O programa começa a ler o buffer a partir do segundo byte (buffer[1]). Assim, ele não mostra a primeira letra do nome. Para consertar, basta trocar o 1 por 0. Ficaria assim: for (byte i = 0; i < 16; i++)

    No mais, não estou conseguindo fazer com que minha LCD mostre as informações (comprei-a aqui mesmo). Conferi todos os pinos e o código — e está tudo OK! Alguma sugestão do que possa ser?

    1. Olá Marconi!

      Você testou seu display separadamente?

      Você pode entrar em contato conosco através do [email protected]

      Abraços!

      André – Equipe MakerHero

  34. Está dando erro na linha
    Serial.println (mfrc522.GetStatusCodeName(status));

    E acontece em todos os blocos que contém a mfrc522, pode ser a biblioteca? Pois não baixei a que pediram no site

    1. Olá Letícia!

      É a biblioteca sim.

      Abraços!

      André – Equipe MakerHero

  35. Muito bom o tutorial.
    Faz um com NFC, tipo porteiro de acesso com celular como tag NFC.
    Abraço.
    Cleber

  36. Gostei muito do projeto amigo mais onde ligo a carga uma feichadura pode mim ajudar

  37. Boa tarde,

    sabe de algum material (ou como fazer isso) que me mostre como acessar os outros blocos do cartão?

    Obrigada.

  38. Adilson Thomsen, boa noite gostaria da sua ajuda para aplicação do meu tcc existe ao equipamento que consiga aumentar o distancia do rfid para 1 ou 2 metros de distância estou pesquisando mais ate o exato momento não achei nada ainda, a programação em si ja esta feita atraves desde aula que a MakerHero disponibilizar quero ate agradecer pelos outros videos.

  39. consigo ler um cartão de 129khz com esse leitor de 125khz?

  40. da para fazer uma equação de valor por tempo com os dados gravados? ex: a cada 10 minutos descontar um valor dos dados gravados

  41. Gostaria de saber quais foram os Materiais Utilizados, Desde já obrigado

  42. Olá Felipe parabéns pelo tutorial , deixa eu te pergunta seria possivel identificar um cartão pelo conteudo ex em vez do UID do cartao que esta no bloco 0 e 1 usar um outro codigo tipo no bloco 4 e 5 para reconhecer o cartão e acionar um led por exemplo?

  43. Na parte de obtenção dos dados, a que se refeririam os blocos e setores e outros dados nestas linhas ?

    FERNANDO LACERDA DE SOUZA SILVA
  44. Eu consigo alterar o byte de transmissão do cartão RFID a partir desse código de gravação?

  45. Caso eu precise gravar uma String um pouco maior que nome e sobrenome, o que eu precisaria fazer? aumentar o tamanho dos buffers ou algo assim?

  46. Alguém teve problema com a leitura como no meu caso q só está lendo o cartão,mas o chaveiro não? Sabe resolver esse problema ou é problema no rfid mesmo?

  47. Quantas vezes eu posso gravar / apagar informações do cartão? Apenas uma? várias?

  48. Ola Felipe gostaria de saber se é possivel em vez de gravar o nome cono no ex: gravar um contador tipo (for),para uns 3 acesso ,apartir dai não ter mais acesso ?

  49. Alguém já conseguiu passar esse código pra Python?

  50. Estou com este erro, alguém saberia solucionar?

    invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    1. ola Fernando tive o mesmo problema , vc solucionou o erro no seu programa?

      1. Bom dia. Não solucionei. Tentei rodar algumas outras versões da IDE, mas ainda nada…

  51. Estou com dois problemas.

    1 – Nao aparece os dados no LCD. Ele acende e ate regula a intensidade de luz mas nao traz informação nenhuma

    2 – O maior problema é que ao colocar no modo leitura nao aparece o nome no serial monitor, somente o UID.

    Peguei um cartão ja gravado em outro sistema onde ao colocar no modulo leitura (neste sistema) aparecia um nome e o UID porem ao gravar o cartao novamente por este sistema ao refazer a leitura somente aparece o UID.

    Alguem tem uma solução pra este problema.
    Fico no aguardo.
    Obrigado

      1. Poderia me enviar a biblioteca que estás usando do MFRC? [email protected]

        Obrigado.

  52. Boa noite, fiz o projeto e funcionou 100%, tenho uma duvida, como consigo cadastrar novas TAG’s ? , para a liberação de acesso ?

  53. Amigo, eu consigo escrever em uma TAG ou chip rfid???

  54. teria como mudar a Chave padrão de fabrica?ou isso é impossível?
    “//Prepara chave – padrao de fabrica = FFFFFFFFFFFFh
    for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;"

  55. Vc pode me mandar só o código que grava amigo? Muito grato… Gmail:[email protected]

  56. Boa tarde, gostaria de saber se tem como colocar os valores nos dados da tag através de uma variável do próprio programa e não por meio do teclado, pois quero armazenar na tag os valores de um sinal vindo do pino de entrada analógica do controlador.

  57. Muito bacana o tutorial! Só estou com duas dúvidas:
    1) A chave que é preparada na linha 33 do código tem a ver com a Chave A que é colocada no Bloco 1 do cartão?
    2) Teria como ler a Chave A de um cartão, armazena-la e defini-la como a Chave A de outro cartão?


    Linha 32 e 33::
    //Prepara chave – padrao de fabrica = FFFFFFFFFFFFh
    for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;

    Obrigado!

  58. Tenho o rfid com um cartão , e um chaveiro.
    Só o chaveiro lê os cartão não, passo ele e no serial não mostra nada, cheguei a comprar novos cartões e deu a mesma coisa. Seria isso um erro na placa rfid

    1. Tenho o mesmo problema, mas ao invés de ler só o chaveiro, ele só lê o cartão. Conseguiu resolver o problema? Era problema no rfid mesmo?

      1. Consegui resolver não cara. Como era só um protótipo usei só o chaveiro mesmo

  59. Muito bom! Justamente o que eu precisava para o meu projeto, obrigado!

  60. agora estou com o seguinte problema abaixo
    depois de gravar o nome ele da a mensagem: MIFARE_Write() failed: A MIFARE PICC responded with NAK.

    Modo gravacao selecionado
    Aproxime o seu cartao do leitor…
    UID do Cartao: 36 DF 4C 54
    Tipo do PICC: MIFARE 1KB
    Digite o sobrenome,em seguida o caractere #
    Digite o nome, em seguida o caractere #
    MIFARE_Write() failed: A MIFARE PICC responded with NAK.

    Selecione o modo leitura ou gravacao…

    Modo leitura selecionado
    Aproxime o seu cartao do leitor…
    UID da tag : 36 DF 4C 54

    1. Ola,
      gostaria de saber se conseguiu resolver o seu problema, pois estou com o mesmo.
      se for possível me ajudar fico muito grato.

  61. depois que eu digito o sobrenome e envio da esse erro da ultima linha

    Selecione o modo leitura ou gravacao…

    Modo gravacao selecionado
    Aproxime o seu cartao do leitor…
    UID do Cartao: 36 DF 4C 54
    Tipo do PICC: MIFARE 1KB
    Digite o sobrenome,em seguida o caractere #
    PCD_Authenticate() failed: Timeout in communication.

    1. e trava o arduino

    2. achei o que erra eu estava tirando o cartao do leitor e ate o final do processo ele necessita ficar no leitor como no video

  62. Olá.
    Tenho em mãos um leitor Mifare para cartões porém o software que uso me transmite informações somente o Código Hexadecimal invertido de acordo com as duplas do Mifare_1K. Para realizar a tarefa que tenho preciso dos códigos decimais de acordo com o código Hexadecimal normal, porém não consigo isso. Se tiveres alguma dica, um software diferente que eu possa usar ou algum comando eu ficaria agradecido, eu uso o programa ICTransfer, é bem limitado mas é tudo que tenho. Obrigado desde ja

  63. Boa tarde

    Gostaria de saber se é possivel armazenar as tags que entraram o ou a ultima tags utilizada.

  64. Tenho um projeto onde uso cartão master para cadastrar os UID, apos cadastrados permite o acesso. Porem o UID é imutável!!! Gostaria de saber se poderia lhe enviar meu programa e altera-lo para que o cadastro seja de uma variável diferente do UID. O projeto é pra um Hotel, porta dos quartos.

  65. Olá! Poderia me explicar a seguinte linha: “status = mfrc522.MIFARE_Write(block, &buffer[16], 16);” ?

    O que está sendo escrito neste bloco? Percebi que, após escrever os dados em um dado bloco, é escrito algo em outro bloco.

    Agradeço.

  66. esse projeto aqui esta com erro. vcs pode mim ajudar?

    Arduino: 1.6.9 (Windows 10), Placa:”Arduino/Genuino Uno”

    C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino: In function ‘void modo_leitura()’:

    CONTROLE_DE_ACESSO_RFID.ino:124: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    In file included from C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino:5:0:

    C:UsersMOISESDocumentsArduinolibrariesMFRC522/MFRC522.h:384:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    CONTROLE_DE_ACESSO_RFID.ino:130: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    In file included from C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino:5:0:

    C:UsersMOISESDocumentsArduinolibrariesMFRC522/MFRC522.h:384:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    CONTROLE_DE_ACESSO_RFID.ino:153: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    In file included from C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino:5:0:

    C:UsersMOISESDocumentsArduinolibrariesMFRC522/MFRC522.h:384:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    CONTROLE_DE_ACESSO_RFID.ino:160: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    In file included from C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino:5:0:

    C:UsersMOISESDocumentsArduinolibrariesMFRC522/MFRC522.h:384:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino: In function ‘void modo_gravacao()’:

    CONTROLE_DE_ACESSO_RFID.ino:198: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::PICC_Type’ [-fpermissive]

    In file included from C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino:5:0:

    C:UsersMOISESDocumentsArduinolibrariesMFRC522/MFRC522.h:388:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::PICC_GetTypeName(MFRC522::PICC_Type)’ [-fpermissive]

    const __FlashStringHelper *PICC_GetTypeName(PICC_Type type);

    ^

    CONTROLE_DE_ACESSO_RFID.ino:219: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    In file included from C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino:5:0:

    C:UsersMOISESDocumentsArduinolibrariesMFRC522/MFRC522.h:384:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    CONTROLE_DE_ACESSO_RFID.ino:227: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    In file included from C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino:5:0:

    C:UsersMOISESDocumentsArduinolibrariesMFRC522/MFRC522.h:384:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    CONTROLE_DE_ACESSO_RFID.ino:237: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    In file included from C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino:5:0:

    C:UsersMOISESDocumentsArduinolibrariesMFRC522/MFRC522.h:384:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    CONTROLE_DE_ACESSO_RFID.ino:245: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    In file included from C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino:5:0:

    C:UsersMOISESDocumentsArduinolibrariesMFRC522/MFRC522.h:384:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    CONTROLE_DE_ACESSO_RFID.ino:263: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    In file included from C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino:5:0:

    C:UsersMOISESDocumentsArduinolibrariesMFRC522/MFRC522.h:384:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    CONTROLE_DE_ACESSO_RFID.ino:271: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    In file included from C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino:5:0:

    C:UsersMOISESDocumentsArduinolibrariesMFRC522/MFRC522.h:384:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    CONTROLE_DE_ACESSO_RFID.ino:281: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    In file included from C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino:5:0:

    C:UsersMOISESDocumentsArduinolibrariesMFRC522/MFRC522.h:384:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    CONTROLE_DE_ACESSO_RFID.ino:289: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    In file included from C:UsersMOISESDesktopArduinoPROGRAMA LEITURA E GRAVAÇÃO CARTÃO RFIDCONTROLE DE ACESSO RFIDCONTROLE_DE_ACESSO_RFID.inoCONTROLE_DE_ACESSO_RFID.ino.ino:5:0:

    C:UsersMOISESDocumentsArduinolibrariesMFRC522/MFRC522.h:384:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    Foram encontradas múltiplas bibliotecas para “MFRC522.h”
    Usado: C:UsersMOISESDocumentsArduinolibrariesMFRC522
    Não usado: C:arduinoarduino-1.6.9librariesMFRC522
    exit status 1
    invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    Este relatório teria mais informações com
    “Mostrar a saida detalhada durante a compilação”
    opção pode ser ativada em “Arquivo -> Preferências”

  67. Amigo teria com criptografar o cartão rfid para evitar clonagem ? Se tem como fazer ?

  68. Olá, modifiquei um pouco o código, e fiz que cada vez que eu coloco uma Tag cadastrada acione um relé e mostre no LCD. Mais o problema é que as Tags que não foram cadastradas também acionam o relé. Como o programa pode cadastrar infinitas Tags surgiu esse seguinte problema problema, como eu posso colocar um controle para acionar o relé só nas Tags que foram cadastradas? Obrigado

  69. Pessoal com problema com o GetStatusCodeName.

    Essa é uma função antiga não mais suportada pelo criador da biblioteca. Baixem uma biblioteca antiga ou arrumem o código que dá certo.

    Abraços.

    1. Não existe uma solução pra substituir a função antiga por outra nova?

  70. No caso de perder um card ou chaveiro e possível deletar usando o mesmo esquema sem precisar entrar na serial usando essas configurações?

  71. Olá, tenho duas duvida sobre o código acima, a primeira é se é possível alterar o valor do UID da TAG;
    E a segunda duvida é como faço para copiar apenas parte da informação da UID, por exemplo UID: A9 C6 83 4A, e quero copiar cada um dos valores para uma variável, A = A9, B = C6, C = 83, D = 4A.
    como faço isso?

    Obrigado

    1. Primeiro – não. É por isso que se chama UID, unique ID… Cada cartão tem um ID que é inalterável.
      Segunda – Sim, você pode copiar o UID do cartão para outro bloco, estes dados estão no bloco 0 do setor 0

  72. No meu teste apareceu o seguinte erro:
    Modo leitura selecionado
    Aproxime o seu cartao do leitor…
    UID da tag : A5 11 6A 02
    PCD_Authenticate() failed: Error in communication.

    Gravando aparece o seguinte:
    Digite o sobrenome,em seguida o caractere #
    MIFARE_Write() failed: A MIFARE PICC responded with NAK.

    Existe algo de errado com minha tag?

    1. Você tem que abrir o “monitor serial” da IDE

  73. Olá, existe alguma forma de controlar o range da antena, eu precisaria que o mesmo fosse consideravelmente menor. Obrigado

  74. Boa tarde, para mim aparece este erro.

    Arduino: 1.6.8 (Windows 7), Placa:”Arduino/Genuino Uno”

    D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino: In function ‘void modo_leitura()’:

    grava__o_rfield:124: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    Serial.println(mfrc522.GetStatusCodeName(status));

    ^

    In file included from D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino:5:0:

    D:DocumentoArduinolibrariesrfid-master/MFRC522.h:384:36: error: initializing argument 1 of ‘static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    static const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    grava__o_rfield:130: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    Serial.println(mfrc522.GetStatusCodeName(status));

    ^

    In file included from D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino:5:0:

    D:DocumentoArduinolibrariesrfid-master/MFRC522.h:384:36: error: initializing argument 1 of ‘static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    static const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    grava__o_rfield:153: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    Serial.println(mfrc522.GetStatusCodeName(status));

    ^

    In file included from D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino:5:0:

    D:DocumentoArduinolibrariesrfid-master/MFRC522.h:384:36: error: initializing argument 1 of ‘static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    static const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    grava__o_rfield:160: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    Serial.println(mfrc522.GetStatusCodeName(status));

    ^

    In file included from D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino:5:0:

    D:DocumentoArduinolibrariesrfid-master/MFRC522.h:384:36: error: initializing argument 1 of ‘static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    static const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino: In function ‘void modo_gravacao()’:

    grava__o_rfield:198: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::PICC_Type’ [-fpermissive]

    Serial.println(mfrc522.PICC_GetTypeName(piccType));

    ^

    In file included from D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino:5:0:

    D:DocumentoArduinolibrariesrfid-master/MFRC522.h:388:36: error: initializing argument 1 of ‘static const __FlashStringHelper* MFRC522::PICC_GetTypeName(MFRC522::PICC_Type)’ [-fpermissive]

    static const __FlashStringHelper *PICC_GetTypeName(PICC_Type type);

    ^

    grava__o_rfield:219: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    Serial.println(mfrc522.GetStatusCodeName(status));

    ^

    In file included from D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino:5:0:

    D:DocumentoArduinolibrariesrfid-master/MFRC522.h:384:36: error: initializing argument 1 of ‘static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    static const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    grava__o_rfield:227: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    Serial.println(mfrc522.GetStatusCodeName(status));

    ^

    In file included from D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino:5:0:

    D:DocumentoArduinolibrariesrfid-master/MFRC522.h:384:36: error: initializing argument 1 of ‘static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    static const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    grava__o_rfield:237: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    Serial.println(mfrc522.GetStatusCodeName(status));

    ^

    In file included from D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino:5:0:

    D:DocumentoArduinolibrariesrfid-master/MFRC522.h:384:36: error: initializing argument 1 of ‘static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    static const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    grava__o_rfield:245: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    Serial.println(mfrc522.GetStatusCodeName(status));

    ^

    In file included from D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino:5:0:

    D:DocumentoArduinolibrariesrfid-master/MFRC522.h:384:36: error: initializing argument 1 of ‘static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    static const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    grava__o_rfield:263: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    Serial.println(mfrc522.GetStatusCodeName(status));

    ^

    In file included from D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino:5:0:

    D:DocumentoArduinolibrariesrfid-master/MFRC522.h:384:36: error: initializing argument 1 of ‘static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    static const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    grava__o_rfield:271: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    Serial.println(mfrc522.GetStatusCodeName(status));

    ^

    In file included from D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino:5:0:

    D:DocumentoArduinolibrariesrfid-master/MFRC522.h:384:36: error: initializing argument 1 of ‘static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    static const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    grava__o_rfield:281: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    Serial.println(mfrc522.GetStatusCodeName(status));

    ^

    In file included from D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino:5:0:

    D:DocumentoArduinolibrariesrfid-master/MFRC522.h:384:36: error: initializing argument 1 of ‘static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    static const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    grava__o_rfield:289: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    Serial.println(mfrc522.GetStatusCodeName(status));

    ^

    In file included from D:DocumentoArduinograva__o_rfieldgrava__o_rfield.ino:5:0:

    D:DocumentoArduinolibrariesrfid-master/MFRC522.h:384:36: error: initializing argument 1 of ‘static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    static const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    exit status 1
    invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    1. Também estou com esse erro, alguem resolveu?

  75. possui alguma maneira de quando o cartão não for reconhecido aparecer escrito , acesso negado ?

    1. Boa tarde,

      Sim, você pode usar as informações deste post: http://www.makerhero.com/blog/controle-acesso-leitor-rfid-arduino/

      Abraço!

      Adilson – Equipe MakerHero

  76. Tem alguma dica de como fazer isto em um pic?

    1. Sim tanto em ccs quando em mikroe, so da uma pesquizada ai , e tambem pode portar de atmega pra pic e vice versa so ter um pouco de conhecimento..

  77. estou tendo um pequeno problema, quando começo a gravar , nao aparece em meu computador aquela caixa para eu gravar os dados do cartao , como nome, sobrenome …
    vocês sabem qual pode ser o erro?

  78. Eu consigo fazer um jumper nas entradas PWM? que eu fiz este projeto mas estou querendo colocar um servomotor e n tem entradas disponíveis mais..

  79. estou tendo um problema , sempre que vou passar a minha programação para o ARDUINO da este erro

    Opções de compilação alteradas, recompilando tudo

    O sketch usa 12.678 bytes (39%) de espaço de armazenamento para programas. O máximo são 32.256 bytes.
    Variáveis globais usam 1.359 bytes (66%) de memória dinâmica, deixando 689 bytes para variáveis locais. O máximo são 2.048 bytes.

    sabe como resolver?

    1. Boa tarde Angelo,

      Esta não é uma mensagem de erro, são mensagens normais que a IDE do Arduino mostra no final da compilação, com informações sobre o consumo de memória e variáveis.

      Abraço!

      Adilson – Equipe MakerHero

    1. Boa tarde Eduarda,

      É o trimpot (potenciômetro) para ajuste do contraste do display: https://www.makerhero.com/pd-24795e-potenciometro-trimpot-1k.html

      Abraço!

      Adilson – Equipe MakerHero

      1. esse potenciomentro é só para o controle do brilho do display?

        1. Boa tarde Eduarda,

          Não, são para o controle do contraste do display. O brilho é controlado, no caso do display 16×2, pelos pinos 15 e 16.

          Abraço

          Adilson – Equipe MakerHero

  80. Pessoal, também tive os mesmos problemas.O erro estava na biblioteca do MRC522.Segue o link para a biblioteca do MRC522 que funciona sem erros o Sketch acima.Só instalar e funciona direitinho sem modificações no Arduino UNO e IDE 1.6.7
    Bom trabalho e estudos a todos.
    http://makecourse.weebly.com/week10segment1.html

    1. estava com este erro na compilação , baixei esta biblioteca e resolveu, muito obrigado .

      invalid conversion from ‘byte {aka unsigned char}’ to ‘MFRC522::StatusCode’ [-fpermissive]

  81. O mesmo codigo funciona no arduino nano?

  82. Boa tarde,

    Sou sindico de um condominio, temos essas tags no portão, , a empresa que fez a instalação me cobra 15 reais para fazer uma cópia da tag, com esse esquema consigo efetuar as cópias ?

  83. Quem tiver com problemas pra aparecer as informações no LCD, conecte na sequencia ao arduino: GND,5V,GND,7,GND,6, 0,0,0,0,5,4,3,2, 3.3V, GND (SEM TRIMPOT com iluminação do lcd nao tão alta)
    E mude no programa tb LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
    RFID ao arduino ficou: 3,3v, 9,GND,12,13,10

  84. Lindo proyecto pero me da estos errores

    sketch_jan11f:234: error: stray ‘302’ in program

    sketch_jan11f:234: error: stray ‘240’ in program

    In file included from C:UsersLuisDocumentsArduinosketch_jan11fsketch_jan11f.ino:5:0:

    C:UsersLuisDocumentsArduinolibrariesMFRC522/MFRC522.h:384:29: error: initializing argument 1 of ‘const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)’ [-fpermissive]

    const __FlashStringHelper *GetStatusCodeName(StatusCode code);

    ^

    exit status 1
    stray ‘302’ in program

    saludos

    1. O meu tbm…tentei de td pra ver se n tinha caractere a mais ou a menos mas n encontrei solução..

    2. Também não estou a conseguir. O problema é o mesmo.

    3. Penso que descobri a resposta.
      Experimente mudar o tipo da variável “status”.

      No código acima a variável “status” encontra-se presente nas funções:
      -void modo_gravacao();
      -void modo_leitura();

      Em ambas as funções a variável “status” é do tipo “byte”. Experimente mudar para o tipo “MFRC522::StatusCode”.

      E em relação à variável “piccType” que também é do tipo “byte” (presente na função “void modo_gravacao()”) mude para “MFRC522::PICC_Type”.

      É apenas uma sugestão. Desta forma consegui compilar sem erros mas ainda não tive a oportunidade de testar, logo não tenho garantias que dê certo.

      1. Tentei fazer algumas alterações mas n deu certo aqui…creio que não entendi muito bem como fazer..poderia ser mais claro?

    4. Conforme o Nuno falou, pra resolver o problema do piccType, substitua a linha

      byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);

      por

      MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);

      compilou aqui corretamente e funcinou a leitura do tipo de cartão.

  85. Bom dia, eu consigo usar esse cartão em um dispositivo Android?

    1. Boa tarde Paulo,

      Se o seu dispositivo possuir NFC, creio que sim. Não fizemos o teste ainda.

      Abraço.

      Adilson – Equipe MakerHero

  86. boa noite! comprei um kit com rfid e tenho umas duvidas;o cartao e o chaveiro já vêm com informação? e o leitor funciona solto mesmo ou só se soldar os conectores que vêm junto com o uno.
    pois não estou conseguindo fazer a leitura.

    agradeço desde já.

    1. Bom dia,

      O cartão e chaveiro está zerados, apenas contém a UID. O conector precisa ser soldado.

      Abraço

      Adilson – Equipe MakerHero

  87. Gostaria muito de uma ajuda! Queria poder gravar as IDs no cartao sd e sempre quando encostar a tag na RFID o arduino pesquisar no cartao sd, se estiver la, ele autentica se nao ele nega o acesso!

  88. Olá Boa Tarde,

    Preciso muito de sua ajuda, como faço para gravar números com casas decimais na memoria do cartão. Consigo gravar números inteiros tipo 1,2,3,4,5, usando mfrc522.MIFARE_Decrement(valueBlockA, value), mas gravar com casas decimais não tipo 1.50, 2.50, 3.50 não conseguir. Fico muito agradecido se puder me ajudar.

    1. Grava como 150, 250 e 350 e quando foi ler divide por 100. 😉

  89. Ola Boa tarde… gostaria de saber quantos cartões posso gravar com esse código?
    Parabéns pelo blog e origado..

    1. Bom dia Allysson,

      Quantos cartões você quiser, não há limite.

      Abraço!

      Adilson – Equipe MakerHero

      1. ola felipe flop parabens pelo site tudo bem detalhado, gostaria de saber se tem como eu gravar os dados num card sd e dps salvar no pc em execel tipo com data e hora gravado no sd ?

        1. Boa tarde José,

          Tem sim, os dados são gravados em formato “texto”, assim você pode abrir no Excel e trabalhar com esses dados da maneira que for mais conveniente.

          Abraço!

          Adilson – Equipe MakerHero

  90. o potenciômetro usado é de 1k ou 10k?

    1. Boa tarde Bruna,

      O potenciômetro usado é de 1K, mas como é apenas para ajuste do contraste do LCD, você pode utilizar outros valores sem problemas.

      Abraço.

      Adilson – Equipe MakerHero

  91. Sabe o limite de vezes que se pode inscrever nesse cartão RFID?

    1. depende do tamanho dos dados…o cartão e o chaveiro possuem memória de 1kb se não me engano

  92. Oá,

    Uma dúvida! Vi que o dado é gravado no Bloco 1…e depois é necessário autenticar no Bloco2…
    Dado gravado no Bloco 4 e depois autenticação no Bloco 5.

    Se eu for gravar um novo dado no Bloco 5, tenho que autenticar no Bloco 6 depois ?

    Poderia me explicar porque preciso autenticar no bloco seguinte ?

    Obrigada.

    1. Michela,

      de acordo com a documentação do mfrc522, para acesso a cada bloco é necessário a autenticação nele.

  93. Boa noite, estou precisando de uma ajuda urgente comprei um RFID-RC522 na loja FLIPEFLOP, porem, não estou conseguindo ler as tags, para adicionar no meu projeto, na verdade acho que ha um problema com o RC522 pois ele não esta lendo as tags, compilei o código que lê as tags e o mesmo apenas apresenta as frases iniciais como aproxime o cartão do leitor, e não apresenta a parte do UID do cartão. Esto precisando muito da ajuda de vcs obrigado.

    1. Olá! Você soldou os contatos ?

      Estava com problema também e só vi o leitor funcionar após soldar os contatos.

      Abraço.

      1. Sim Michela já soldei os contatos e verifiquei os mesmos, verifiquei toda fiação e o programa e não achei nenhum erro, o pior de tudo e que a loja MakerHero, não está retornado meus emails e isto e um trabalho de faculdade, solicitei informações para mandar o produto de volta para analise e eles não me respondem e cada vez o prazo de entregar o trabalho fica mais curto. Já tinha realizado compras na loja e aconselhava aos amigos e colegas pela qualidade dos produtos, pelo rápido prazo de entrega e o atendimento, mas após este episodio não aconselho mais a ninguém, se possível desaconselho a pessoa.

        Se outra pessoa tiver uma sugestão ou conselho pra me dar, pois se depender da boa vontade da loja perco um semestre na faculdade .
        Obrigado

        1. 1o – veja se a luz dele acende..se acender, ele n está queimado nem nd..
          2o – verifique se conectou certo os cabos…n sei se vc sabe eletronica mto bem entao digo que poderia ser algum erro de endtendimento da protoboard
          3o – ligue o arduino, instale o software dele, abra o monitor serial dando CTRL+SHIFT+M e logo ele dara a mensagem para aproximar o cartao…
          se vc n chegou ate esta parte de ler essa msg no monitor serial, ha coisas erradas conectadas msm..se vc chegou mas o cartao nem o chaveiro fazem leitura do UID o provável é que ele esteja realmente com defeito

  94. boa noite , estou tendo dificuldades para baixar a biblioteca RFID.H , gostaria de alguma dica ou ajuda .

    desde já agradeço a atenção de todos.

    Obrigado

  95. Boa tarde.

    Qual a distancia maxima para o reconhecimento pelo RFID?

  96. Como eu faria pra q essa distância aumentasse? é pela frequência do módulo RFID?

  97. Vc pode fazer um codigo com controle de acesso sem os botões e q acione o relé.

  98. Qual a distância mínima para reconhecimento do cartão?

    1. Bom dia Bruna,

      É bem próxima, coisa de uns 5 cm.

      Abraço

      Adilson – Equipe MakerHero

      1. Existe algum leitor pra arduino com uma distância maior?

        1. você ja achou estou a procura também quando acha me passa [email protected]!!!!!

        2. existem antenas e leitores, ai você poderia usar a comunicação RS-232 para integrar ao arduino