Ciao a tutti,
dopo una breve presentazione nell'apposita sezione, spero ora di scrivere in quella giusta il mio problema, anche se la natura per il momento non è estremamente chiara ( hardware o software): il perché scrivo qui sarà chiaro tra poco.
Ho acquistato un RFID RC522 da questo sito:
http://www.electrodragon.com/product/mifare-rc522-rfid-card-readerdetector-ic-card/
Dallo stesso sito e dalla stessa pagina, cliccando su Reviews si può scaricare la libreria software per il suo utilizzo: l'ho correttamente importata. Ho aperto uno degli esempi in essa contenuti per fare una prova, precisamente il file ReadAndWrite.
Questo file in origine è stato scritto per la Arduino Mega, motivo per cui l'ho corretto sostituendo la giusta numerazione dei pin da considerare per la mia Arduino Uno, esattamente come l'autore riporta in commento.
Il mio problema è che una volta caricato lo sketch, non avviene proprio nulla: il lettore è insensibile al passaggio delle chiavi magnetiche. Ho controllato più volte i collegamenti anche su più siti e sono tutti corretti; inoltre sul lettore RFID resta costantemente acceso un led rosso etichettato D1 , e non capisco a questo punto se può trattarsi di un problema hardware magari di chiavi rovinate, o di una libreria poco affidabile.
Riguardo al led, dalle mie ricerche e anche dai video del lettore in esecuzione che si trovano in rete, l'ho visto sempre rosso anche con dispositivo funzionante, in un caso anche verde.
Ah aggiungo che il lettore è montato su una breadboard, da cui partono i cavetti fino ai rispettivi pin sulla arduino.
Ho provato in extremis a scremare un po' il codice anche utilizzando dei contributi dal web al di fuori dell'esempio menzionato, sempre utilizzando la giusta configurazione dei pin, ma non viene mai rilevata alcuna tessera.
Dopo tante ricerche anche su questo forum vi domando gentilmente una mano, magari un vostro sketch di prova riassunto all'osso e funzionante, o qualche info per capire se può trattarsi di chiavi magnetiche difettose, lettore difettoso o altro.
Scusandomi in anticipo per aver riproposto un problema di questo tipo, vi ringrazio molto per il tempo che perderete nel rispondere
Posto il codice dell'esempio che ho citato nel post precedente, e che non ho potuto inserire per via della lunghezza massima raggiunta
/*
- add pin configuration for arduino mega
- write simple read/write Code for new entry user
----------------------------------------------------------------------------- Nicola Coppola
* Pin layout should be as follows:
* Signal Pin Pin Pin
* Arduino Uno Arduino Mega MFRC522 board
* ------------------------------------------------------------
* Reset 9 5 RST
* SPI SS 10 53 SDA
* SPI MOSI 11 51 MOSI
* SPI MISO 12 50 MISO
* SPI SCK 13 52 SCK
*
* The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com.
*/
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
//Serial.println("Scan a MIFARE Classic PICC to demonstrate Value Blocks.");
}
void loop() {
// Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory.
MFRC522::MIFARE_Key key;
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
// Now a card is selected. The UID and SAK is in mfrc522.uid.
// Dump UID
Serial.print("Card 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);
}
Serial.println();
// Dump PICC type
byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
Serial.print("PICC type: ");
Serial.println(mfrc522.PICC_GetTypeName(piccType));
if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI
&& piccType != MFRC522::PICC_TYPE_MIFARE_1K
&& piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
//Serial.println("This sample only works with MIFARE Classic cards.");
return;
}
// In this sample we use the second sector (ie block 4-7). the first sector is = 0
// scegliere settore di lettura da 0 = primo settore
byte sector = 1;
// block sector 0-3(sector0) 4-7(sector1) 8-11(sector2)
// blocchi di scrittura da 0-3(sector0) 4-7(sector1) 8-11(sector2)
byte valueBlockA = 4;
byte valueBlockB = 5;
byte valueBlockC = 6;
byte trailerBlock = 7;
byte status;
// Authenticate using key A.
// avvio l'autentificazione A
//Serial.println("Authenticating using key A...");
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print("PCD_Authenticate() failed: ");
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
// Authenticate using key B.
// avvio l'autentificazione B
//Serial.println("Authenticating again using key B...");
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print("PCD_Authenticate() failed: ");
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
// Writing new value block A
// Scrivo i valori per il settore A
Serial.println("Writing new value block A(4) : the first of the sector TWO ");
byte value1Block[] = { 1,2,3,4, 5,6,7,8, 9,10,255,12, 13,14,15,16, valueBlockA,~valueBlockA,valueBlockA,~valueBlockA };
status = mfrc522.MIFARE_Write(valueBlockA, value1Block, 16);
if (status != MFRC522::STATUS_OK) {
Serial.print("MIFARE_Write() failed: ");
Serial.println(mfrc522.GetStatusCodeName(status));
}
/*
// Writing new value block B
// Scrivo i valori per il settore B
Serial.println("Writing new value block B");
byte value2Block[] = { 255,255,255,255, 0,0,0,0, 0,0,0,0, 255,255,255,255, valueBlockB,~valueBlockB,valueBlockB,~valueBlockB };
status = mfrc522.MIFARE_Write(valueBlockB, value2Block, 16);
if (status != MFRC522::STATUS_OK) {
Serial.print("MIFARE_Write() failed: ");
Serial.println(mfrc522.GetStatusCodeName(status));
}
// Writing new value block D
// Scrivo i valori per il settore C
Serial.println("Writing new value block C");
byte value3Block[] = { 255,255,255,255, 0,0,0,0, 0,0,0,0, 255,255,255,255, valueBlockC,~valueBlockC,valueBlockC,~valueBlockC };
status = mfrc522.MIFARE_Write(valueBlockC, value3Block, 16);
if (status != MFRC522::STATUS_OK) {
Serial.print("MIFARE_Write() failed: ");
Serial.println(mfrc522.GetStatusCodeName(status));
}
*/
Serial.println("Read block A(4) : the first of the sector TWO");
byte buffer[18];
byte size = sizeof(buffer);
// change this: valueBlockA , for read anather block
// cambiate valueBlockA per leggere un altro blocco
status = mfrc522.MIFARE_Read(valueBlockA, buffer, &size);
Serial.print("Settore : 0 Valore :");
Serial.println(buffer[0]);
Serial.print("Settore : 1 Valore :");
Serial.println(buffer[1]);
Serial.print("Settore : 2 Valore :");
Serial.println(buffer[2]);
Serial.print("Settore : 3 Valore :");
Serial.println(buffer[3]);
Serial.print("Settore : 4 Valore :");
Serial.println(buffer[4]);
Serial.print("Settore : 5 Valore :");
Serial.println(buffer[5]);
Serial.print("Settore : 6 Valore :");
Serial.println(buffer[6]);
Serial.print("Settore : 7 Valore :");
Serial.println(buffer[7]);
Serial.print("Settore : 8 Valore :");
Serial.println(buffer[8]);
Serial.print("Settore : 9 Valore :");
Serial.println(buffer[9]);
Serial.print("Settore :10 Valore :");
Serial.println(buffer[10]);
Serial.print("Settore :11 Valore :");
Serial.println(buffer[11]);
Serial.print("Settore :12 Valore :");
Serial.println(buffer[12]);
Serial.print("Settore :13 Valore :");
Serial.println(buffer[13]);
Serial.print("Settore :14 Valore :");
Serial.println(buffer[14]);
Serial.print("Settore :15 Valore :");
Serial.println(buffer[15]);
//byte value1Block[] = { 1,2,3,4, 5,6,7,8, 9,10,255,12, 13,14,15,16, valueBlockA,~valueBlockA,valueBlockA,~valueBlockA };
if (
buffer[0] == 1 &&
buffer[1] == 2 &&
buffer[2] == 3 &&
buffer[3] == 4 &&
buffer[4] == 5 &&
buffer[5] == 6 &&
buffer[6] == 7 &&
buffer[7] == 8 &&
buffer[8] == 9 &&
buffer[9] == 10 &&
buffer[10] == 255 &&
buffer[11] == 12 &&
buffer[12] == 13 &&
buffer[13] == 14 &&
buffer[14] == 15 &&
buffer[15] == 16
){
// sel a scrittura è uguale alla lettura allora e stato un successo !!
Serial.println("Read block A(4) : the first of the sector TWO : success");
Serial.println(":-)");
}else{
// scrittura Fallita
Serial.println("Read block A(4) : the first of the sector TWO : no match - write don't work fine ");
Serial.println(":-( ");
}
// risponde successo
//Serial.println(mfrc522.GetStatusCodeName(status));
// Dump the result
//mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
// Halt PICC
mfrc522.PICC_HaltA();
// Stop encryption on PCD
mfrc522.PCD_StopCrypto1();
}
visto questo ?
Ciao,
io ho preso questi
http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=301128535599&ssPageName=ADME:L:OC:IT:3160
che sembrano uguali al tuo, ho usato questa
e con la uno ha funzionato tutto al primo colpo, ma ho usato
#define SS_PIN 9
#define RST_PIN 8
MFRC522 mfrc522(SS_PIN, RST_PIN);
per inizializzare la libreria, il tuo codice va bene con la mega non con la uno.
vedi GitHub - bigjohnson/Tcpnfclockduino: Arduino nfc door lock with remote card database on webserver
Magari per iniziare usa l'esempio Dumpinfo della libreria che è il più semplice.
bigjohnson ti ringrazio per la risposta, ho sostituito la mia libreria con la tua e ho lanciato lo sketch che mi hai consigliato, ma non si muove foglia.
Se con te ha funzionato evidentemente la libreria è affidabile.. ti chiederei la cortesia di mandarmi ( se puoi ) una foto di come hai collegato il lettore, non sia mai che abbia fatto qualche cappellata lì.
Io l'ho agganciato alla breadboard con 6 di questihttp://store.arduino.cc/index.php?main_page=product_info&cPath=6&products_id=294 e poi faccio partire dalla breadboard i cavetti fino arduino. L'aggancio del lettore non è perfettamente stabile, nel senso che un minimo traballa e secondo come lo tocco si spegne anche, però generalmente riesce a rimanere acceso in tranquillità con il solito led rosso, quindi evidentemente la corrente in certe posizioni riesce a passare e dovrebbe funzionare tutto il resto...
Brunello grazie anche a te, sto verificando anche le saldature
Ho saldato sulla scheda rfid un connettore femmina per poter usare direttamente i cavetti della breadboard.
Ringrazio tutti per le risposte e per i consigli: con una buona saldatura la scheda funziona perfettamente.
Modifico il thread con la dicitura RISOLTO, un salutone
