Ciao a tutti,
con un piccolo Nano volevo leggere il valore del token RFID frequenza 13,56MHz e scriverlo su una micro SD. Detto così mi sembrava abbastanza semplice visto che gli esempi in rete sono parecchi.
Fatto il tutto e messo in parallelo le linee SPI e i CS su pin diversi : D10 e D4 o leggo il token, togliendo le linee del lettore/scrittore Sd o scrivo sulla microSd togliendo il lettore dei token
Vi allego il programmino che ho cercato di fare; nell'intestazione sono specificati i collegamenti con il Nano
Ovviamente sto sbagliando da qualche parte , ma non capisco dove
/*
* ARDUINO RFID KIT 13.56 MHZ
* -----------------------------------------------------------------------------------------
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Reader/PCD Uno Mega Nano v3 Leonardo/Micro Pro Micro
* Signal Pin Pin Pin Pin Pin Pin
* -----------------------------------------------------------------------------------------
* RST/Reset RST 9 5 D9 RESET/ICSP-5 RST
* SPI SS SDA(SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
* -----------------------------------------------------------------------------------------
* Reader/uSD Uno Nano v3
* Signal Pin Pin Pin
* -----------------------------------------------------------------------------------------
* CS CS D4 D4
* SPI MOSI MOSI 11 / ICSP-4 D11
* SPI MISO MISO 12 / ICSP-1 D12
* SPI SCK SCK 13 / ICSP-3 D13
*
*/
#include <SPI.h>
#include <MFRC522.h>
#include <SD.h>
#define SDA_FID 10
#define RESET_FID 9
unsigned long ccl;
File myFile;
MFRC522 RC522(SDA_FID, RESET_FID);
String codiceLetto;
int xarray[4];
int j;
//==============================================================================
void setup(){
Serial.begin(9600);
SPI.begin();
Serial.print("Setup SPI...");
Serial.println("Inizializzazione OK !!");
codiceLetto="prova registrazione token";
Serial.println("Scrivo intestazione !!");
scrivi();
leggi();
Serial.println("Avvicina token da leggere...");
}
//==============================================================================
void loop(){
RC522.PCD_Init();
delay(500);
if ( ! RC522.PICC_IsNewCardPresent() || ! RC522.PICC_ReadCardSerial() ) {
delay(50); return;}
for (byte i = 0; i < RC522.uid.size; i++) {
xarray[i]=(RC522.uid.uidByte[i]);
}
codiceLetto=String();
for (int j=0;j<4;j++)
{
codiceLetto+=xarray[j];
}
Serial.print("Codice letto ");
Serial.println(codiceLetto);
ccl=(codiceLetto.toInt());
Serial.print("Valore:");
Serial.println(ccl);
Serial.print("Stringa: ");
Serial.println(codiceLetto);
Serial.println();
scrivi();
delay(1000);
Serial.println("Avvicina token da leggere...");
}
//==================================================================
void scrivi(){
Serial.print("Inizializzo la SDcard...");
// pinMode(10, OUTPUT);
if (!SD.begin(4)) {
Serial.println("Inizializzazione FALLITA !!");
return;
}
Serial.println("Inizializzazione OK !!");
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
Serial.print("SCRIVO su file test.txt...");
myFile.println(codiceLetto);
myFile.close();
Serial.println(" FATTO !!");
Serial.println();
} }
//=============================================================
void leggi(){
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("LEGGO dati da file test.txt: ");
// Leggo dal file e scrivo su seriale fino a quando non trovo niente altro
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close(); // Chiudo il file
}
}
se leggo il tochen staccando le linee SPI della Sd ottengo
Setup SPI...Inizializzazione OK !!
Scrivo intestazione !!
Inizializzo la SDcard...Inizializzazione FALLITA !!
Avvicina token da leggere...
Codice letto 685776219
Valore:685776219
Stringa: 685776219
Inizializzo la SDcard...Inizializzazione FALLITA !!
Avvicina token da leggere...
Viceversa scrivo e leggo su Sd ma non leggo token
Un grazie in anticipo a chi mi vorrà aiutare
hai provato ad assegnare le porte nel setup()
pinMode(4,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(10,HIGH);
Fatto, ma nulla
così come è scrive e poi legge la sd e poi tutto fermo su leggi token
ho provato ad abilitare alternativamente 10 e il 4 ma nulla
Durante le varie prove ho notato che mettendo il MISO di uno o dell'altro abilitavo la relativa funzione come se ci fosse un'interruttore e per curiosità con un interruttore su pin12 che commuta i due MISO ora va uno ora l'altro.
Nel bus SPI, MISO, MOSI e SCK sono sempre in comune con tutti, non devi switcharli. In sostanza tutti vedono quel che ci passa sopra, ma l'unico che ci presta davvero attenzione è il dispositibo il cui SS è basso (nota infatti che SS è un segnale active-low), per cui è questo che devi switchare, eventualmente.
Comunque così a occhio lo sketch mi sembra corretto, è strano che non funzioni. Se ho tempo lo provo anch'io.
Grazie SukkoPera,
Ora riprovo facendo delle routine con basso 4 e alto 10 e alla fine alto4 e basso10 vediamo se combino qualcosa; Le linee SPI sono rigorosamente in parallelo e sono solo due.
vado a riprovare, ciao
ciao SukkoPera,
ho riprovato mettendo dei blocchi per settare le patenze, forse è esagerato ma comunque non va neppure così.
il tutto qui
/*
* ARDUINO RFID KIT 13.56 MHZ
* -----------------------------------------------------------------------------------------
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Reader/PCD Uno Mega Nano v3 Leonardo/Micro Pro Micro
* Signal Pin Pin Pin Pin Pin Pin
* -----------------------------------------------------------------------------------------
* RST/Reset RST 9 5 D9 RESET/ICSP-5 RST
* SPI SS SDA(SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
* -----------------------------------------------------------------------------------------
* Reader/uSD Uno Nano v3
* Signal Pin Pin Pin
* -----------------------------------------------------------------------------------------
* CS CS D4 D4
* SPI MOSI MOSI 11 / ICSP-4 D11
* SPI MISO MISO 12 / ICSP-1 D12
* SPI SCK SCK 13 / ICSP-3 D13
*
*/
#include <SPI.h>
#include <MFRC522.h>
#include <SD.h>
#define SDA_FID 10
#define RESET_FID 9
unsigned long ccl;
File myFile;
MFRC522 RC522(SDA_FID, RESET_FID);
String codiceLetto;
int xarray[4];
int j;
//==============================================================================
void setup(){
pinMode(4,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(10,HIGH);
Serial.begin(9600);
SPI.begin();
Serial.print("Setup SPI...");
Serial.println("Inizializzazione OK !!");
codiceLetto="prova registrazione token";
Serial.println("Scrivo intestazione !!");
scrivi();
Serial.println("Avvicina token da leggere...");
}
//==============================================================================
void loop(){
pinMode(4,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(10,HIGH);
digitalWrite(10,LOW);
RC522.PCD_Init();
delay(500);
if ( ! RC522.PICC_IsNewCardPresent() || ! RC522.PICC_ReadCardSerial() ) {
delay(50); return;}
for (byte i = 0; i < RC522.uid.size; i++) {
xarray[i]=(RC522.uid.uidByte[i]);}
codiceLetto=String();
for (int j=0;j<4;j++){
codiceLetto+=xarray[j]; }
Serial.print("Codice letto ");
Serial.println(codiceLetto);
ccl=(codiceLetto.toInt());
Serial.print("Valore:");
Serial.println(ccl);
Serial.print("Stringa: ");
Serial.println(codiceLetto);
Serial.println();
scrivi();
leggi();
delay(3000);
Serial.println("Avvicina token da leggere...");
}
//==================================================================
void scrivi(){
Serial.print("Inizializzo la SDcard...");
pinMode(4,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(10,HIGH);
digitalWrite(4,LOW);
if (!SD.begin(4)) {
Serial.println("Inizializzazione FALLITA !!");return;}
Serial.println("Inizializzazione OK !!");
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
Serial.print("SCRIVO su file test.txt...");
myFile.println(codiceLetto);
myFile.close();
Serial.println(" FATTO !!");
Serial.println(); }
}
//=============================================================
void leggi(){
pinMode(4,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(10,HIGH);
digitalWrite(4,LOW);
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("LEGGO dati da file test.txt: ");
while (myFile.available()) {
Serial.write(myFile.read());}
myFile.close(); // Chiudo il file
}
}
per questa sera basta, sono fuso, riprenderò domani a mente fersca, ciao e grazie a tutti per il supporto
Mettere nel loop() if (!SD.begin(4)) non mi sembra così corretto, si inizializza la SD una volta sola nel setup e poi resta solo da aprire il file, scrivere e chiuderlo, perchè inizializzare ad ogni loop?
SPI.begin(); serve a niente nel tuo caso
questo si
Brunello:
hai provato ad assegnare le porte nel setup()
pinMode(4,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(10,HIGH);
anche se non da nessun cambiamento ci va nel setup() però, non ovunque
void loop(){
pinMode(4,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(10,HIGH);
digitalWrite(10,LOW);
void setup(){
pinMode(4,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(10,HIGH);
void scrivi(){
Serial.print("Inizializzo la SDcard...");
pinMode(4,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(10,HIGH);
digitalWrite(4,LOW);
void leggi(){
pinMode(4,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(10,HIGH);
digitalWrite(4,LOW);
pare ci sia un po' di confusione
Buongiorno Pablos,
la confusione generata dalla disperazione e dalla poca conoscenza , in senso inverso.
Non sapevo più che fare, ora modifico secondo i suggerimenti e pulisco
Grazie
Ecco fatto, ho snellito il tutto e fatte le modifiche suggerite, ora risulta così
/*
* ARDUINO RFID KIT 13.56 MHZ
* -----------------------------------------------------------------------------------------
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Reader/PCD Uno Mega Nano v3 Leonardo/Micro Pro Micro
* Signal Pin Pin Pin Pin Pin Pin
* -----------------------------------------------------------------------------------------
* RST/Reset RST 9 5 D9 RESET/ICSP-5 RST
* SPI SS SDA(SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
* -----------------------------------------------------------------------------------------
* Reader/uSD Uno Nano v3
* Signal Pin Pin Pin
* -----------------------------------------------------------------------------------------
* CS CS D4 D4
* SPI MOSI MOSI 11 / ICSP-4 D11
* SPI MISO MISO 12 / ICSP-1 D12
* SPI SCK SCK 13 / ICSP-3 D13
*
*/
#include <SPI.h>
#include <MFRC522.h>
#include <SD.h>
#define SDA_FID 10
#define RESET_FID 9
unsigned long ccl;
File myFile;
MFRC522 RC522(SDA_FID, RESET_FID);
String codiceLetto;
int xarray[4];
int j;
//==============================================================================
void setup(){
pinMode(4,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(10,HIGH);
Serial.begin(9600);
SPI.begin();
Serial.print("Setup SPI...");
Serial.println("Inizializzazione OK !!");
if (!SD.begin(4)) {
Serial.println("Inizializzazione microSD FALLITA !!");return;}
Serial.println("Inizializzazione microSD OK !!");
codiceLetto="prova registrazione codice";
Serial.println("Scrivo intestazione !!");
scrivi();
Serial.println("Avvicina token da leggere...");
}
//==============================================================================
void loop(){
RC522.PCD_Init();
delay(500);
if ( ! RC522.PICC_IsNewCardPresent() || ! RC522.PICC_ReadCardSerial() ) {
delay(50); return;}
for (byte i = 0; i < RC522.uid.size; i++) {
xarray[i]=(RC522.uid.uidByte[i]);}
codiceLetto=String();
for (int j=0;j<4;j++){
codiceLetto+=xarray[j]; }
ccl=(codiceLetto.toInt());
Serial.print("Codice:");
Serial.println(ccl);
scrivi();
leggi();
delay(3000);
Serial.println("Avvicina token da leggere...");
}
//==================================================================
void scrivi(){
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
Serial.print("SCRIVO su file test.txt...");
myFile.println(codiceLetto);
myFile.close();
Serial.println(" FATTO !!");
Serial.println(); }
}
//=============================================================
void leggi(){
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("LEGGO dati da file test.txt: ");
while (myFile.available()) {
Serial.write(myFile.read());}
myFile.close(); // Chiudo il file
}
}
ma ancora se ci sono entrambi non va ; solo allo start
Setup SPI...Inizializzazione OK !!
Inizializzazione microSD OK !!
Scrivo intestazione !!
SCRIVO su file test.txt... FATTO !!
Avvicina token da leggere...
dopo di che si ferma tutto; se tolgo il collegamento del MISO della schedina Sd legge ma non registra.
Setup SPI...Inizializzazione OK !!
Inizializzazione microSD FALLITA !!
Codice:2431987843
Avvicina token da leggere...
Codice:2431987843
Avvicina token da leggere...
Codice:2431987843
forse non sto selezionando la SD? non andrebbe selezionato alternativamente RFID e SD?
se si come fare senza mettere le dichiarazioni di cs alto e basso?
grazie
ALTRA AMENITA' ovviamente per me povero apprendista stregone:
sempre con il MISO della Sd staccato ho staccato involontariamente anche il 3,3V che da Arduino alimenta la scheda RFID e con mia sorpresa legge ugualmente i codici.
Non è che sto distruggendo qualcosa? ad ogni buon conto ho ripristinato il tutto