Depois de algum tempo na frente de meu computador buscando uma solução viável para a implantação de um banco de dados de grande capacidade para Arduíno, criei um código que faz o que eu queria.
Fiz pesquisas na internet procurando encontrar uma luz para este problema mas nada encontrei, ai tive que por a mão na massa.
Funcionamento:
O usuário aproxima o cartão do leitor RFID, a tag lida do cartão é comparado com as tags cadastradas no cartão SD, e retorna informando se o cartão esta cadastrado ou não.
Caso o cartão esteja cadastrado ele também informa o nome do usuário que esta ligado a aquele cartão.
Decidi divulgar pois tudo que aprendi em Arduíno foi através de tutoriais da internet.
Obs. O código pode e deve ser melhorado, não fiz comentários nas linhas por falta de tempo e paciência!
\\------------------------------------------------------------------------------------------------------------#include /font>SD.h> File myFile;
#include /font>SPI.h>
#include /font>MFRC522.h>
MFRC522 mfrc522(10, 9);
int x = 0;
byte sel = 0;
byte c1 = 0;
byte c2 = 0;
byte c3 = 0;
String status = "";
String cconteudo = "";
String usuario = "";
String nome = "";
char caractere;
char carac;
void setup() {
Serial.begin(9600);
SPI.begin();
if (SD.begin(4)) {
myFile = SD.open("rfid.txt");
if (myFile) {
while (myFile.available()) {
for (x; myFile.read() == 13; x++) {
delay(10);
}
}
}
else {
Serial.println("Falha ao abrir banco de dados");
}
Serial.print(x);
Serial.println(" usuarios cadastrados: ");
myFile.close();
!SD.begin(4);
}
}
void loop() {
mfrc522.PCD_Init();
while (sel == 0) {
Serial.println("Aproxime o seu cartao do leitor...");
cconteudo = "";
while ( ! mfrc522.PICC_IsNewCardPresent()) {
}
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
for (byte i = 0; i /font> mfrc522.uid.size; i++) {
cconteudo.concat(String(mfrc522.uid.uidByte[i] /font> 0x10 ? " 0" : " "));
cconteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
}
cconteudo.toUpperCase();
cconteudo.trim();
mfrc522.PICC_HaltA();
myFile = SD.open("rfid.txt");
if (myFile) {
while (myFile.available() && (c2 == 0)) {
caractere = 0;
while (myFile.available() && (caractere != ';') && (caractere != 13) && (c1 == 0)) {
caractere = myFile.read();
if ((caractere != ';') && (caractere != 13)) {
usuario.concat(caractere);
}
}
usuario.trim();
if ((cconteudo == usuario ) && (c1 == 0) ) {
status = "Usuario encontrado";
Serial.println(status);
c1 = 1;
c3 = 1;
}
else {
usuario = "";
status = "Usuario nao encontrado ";
}
if (c3 == 1) {
carac = 0;
while (myFile.available() && (carac != 13) && (c3 == 1)) {
carac = myFile.read();
if ((carac != 13) && (carac != ';')) {
nome.concat(carac);
}
delay(10);
}
nome.trim();
if (c3 == 1) {
c3 = 0;
c2 = 1;
sel = 1;
}
}
}
}
else {
Serial.println("Falha ao abrir banco de dados");
}
if (status != "Usuario encontrado") {
Serial.println(status);
}
}
myFile.close();
Serial.print("Bem vindo ");
Serial.println(nome);
delay(2000);
}
\\-------------------------------------------------------------------------------------------------------------------------------------------- -
Arquivo rfid.txt contido no cartão de memoria (primeiro vai as tag dos cartões e após o nome do usuário do cartão.
11 22 33 44;nome1
22 22 33 44;nome2
31 11 22 33;nome3
22 33 54 22;nome4
12 22 33 33;nome5
32 44 12 99;nome6
32 68 11 12;nome7
88 99 11 74;nome8
51 88 99 33;nome9
33 F2 0D 01 ;Daniel Baltazar Schneider
12 P2 00 33;nome11
12 33 55 I7;nome12
88 99 33 55;nome13
\\----------------------------------------------------------------------------------------------------------------------------------------------
Alguma duvida ou sugestão? comente.
Tags:
Bom Dia . Tudo Bem.
Pelo que entendi devo ligar o sdcard no ICSp e o RFID nos pinos 11, 12 e 13 ?
kkkk
desculpe que o processador é lento
Muito obrigado
Entendeu certinho.
Enumerei os pinos do ICSP de 1 a 6. Pra tentar facilitar o entendimento.. rs
O 1 corresponde ao 12, o 3 ao 13 e o 4 ao pino 11 do Arduíno UNO.
Quando você liga somente o RFID no 11, 12, 13 funciona? Correto?
E quando você liga somente o modulo SD, também?
Mas se ligar junto da pala? né?
Desse jeito que te passei não da mais.
Disponha, estamos ai pra isso! rsrs
kkk, ok
liguei o sdcard no icsp :
MOSI NO PINO 4
SCK NO PINO 3
MISO NO PINO 1
E o pino CS eu coloco em qual pino do arduino ?
Pino 4.
Se nessa linha você colocar assim:
if (SD.begin(4)) {
ok, esta linha ja esta assim no prog de exemplo , agora vou ligar o rfid, mas me parece que não mudou nada nas ligações , estao iguais ao exemplo ?
estou ligando o rfid assim:
MOSI NO PINO 11
SCK NO PINO 13
MISO NO PINO 12
faltam SDA e IRQ ligo onde kkkk
Desculpa a burrada .
valeu
ok, esta linha ja esta assim no prog de exemplo , agora vou ligar o rfid, mas me parece que não mudou nada nas ligações , estao iguais ao exemplo ?
estou ligando o rfid assim:
MOSI NO PINO 11
SCK NO PINO 13
MISO NO PINO 12
faltam SDA e IRQ e RST ligo onde kkkk
Desculpa a burrada .
valeu
blz consegui funcionar, agora e so ver porque quando passo o cartao correto ele fica repetindo bem vindo. de qualquer forma resolveu meu problema , muito obrigado.
]
Não consegui achar nos comentários o link explicando as ligações.
Mas obrigada cara, você me ajudou muito. Deu certo aqui! ^^
blz consegui funcionar, agora e so ver porque quando passo o cartao correto ele fica repetindo bem vindo. de qualquer forma resolveu meu problema , muito obrigado.
]
Que bom!
Agora deve ser só logica mesmo né.
Boa sorte ai.. qualquer coisa, estamos ai.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por