Salve ragazzi. Ho un arduino uno rev. 3 ed ho anche un grosso problema sperando di risolverlo.
Se collego la NFC shield direttamente all'arduino va tutto liscio.
Ma se collego la NFC shield all'ethernet shield che è collegata a sua volta sull'arduino, iniziano i problemi.
Non mi legge il tag nfc.
In pratica io dovrei leggere un tag nfc, scriverlo su un file all'interno dell'sd e poi prenderlo tramite internet..
Riuscite ad aiutarmi? ditemi voi se devo postare il codice
Buona giornata
Il codice o i collegamenti, dato che l'RFID e' collegato in SPI come la ethernet card
l'rfid l'ho collegata come standard ovvero sda 10, sck 13, mosi 11, miso 12 e reset 9
questo è il codice
#include <SD.h>
#include <SPI.h>
#include <RFID.h>
/* Vengono definiti PIN del RFID reader*/
#define SDA_DIO 10
#define RESET_DIO 9
#define delayRead 1000 // Time of delay
/* Viene creata una istanza della RFID libreria */
RFID RC522(SDA_DIO, RESET_DIO);
Sd2Card card;
SdVolume volume;
SdFile root;
const int chipSelect = 4;
void setup()
{
Serial.begin(9600);
/* Abilita SPI*/
SPI.begin();
/* Viene inizilizzato RFID reader */
RC522.init();
Serial.println("Setup");
Serial.print("\nInitializing SD card...");
pinMode(53, OUTPUT);
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println("initialization failed");
return;
}
else {
Serial.println("Found a mirco SD card");
}
myFile = SD.open("file.php", FILE_WRITE);
if (myFile) {
Serial.print("Sto scrivendo nel file...");
myFile.println(codiceLetto);
// close the file:
myFile.close();
Serial.println("done.");
}
else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
}
void loop()
{
/* Temporary loop counter */
byte i;
//Se viene letta una tessera
if (RC522.isCard())
{
// Viene letto il suo codice
RC522.readCardSerial();
String codiceLetto ="";
Serial.println("Codice delle tessera letto:");
// Viene caricato il codice della tessera, all'interno di una Stringa
for(i = 0; i <= 4; i++)
{
codiceLetto+= String (RC522.serNum[i],HEX);
codiceLetto.toUpperCase();
}
Serial.println(codiceLetto);
delay(delayRead);
Serial.println();
Serial.println();
}
}
Sposta SDA_DIO su un'altro pin, il 10 e' riservato al CS della ethernet
l' 8 ad esempio, visto che e' libero
Ciao, grazie per l'aiuto..
Ho risolto il problema dell'RFID, sia i pin che i collegamenti, sono molto instabili quindi dovrò provvedere a saldarli..
Ora ho un altro problema.. Arduino non riesce a scrviere nel file che è dentro la sd..
questo è il codice aggiornato
#include <SD.h>
#include <SPI.h>
#include <RFID.h>
/* Vengono definiti PIN del RFID reader*/
#define SDA_DIO 3
#define RESET_DIO 5
#define delayRead 1000 // Time of delay
/* Viene creata una istanza della RFID libreria */
RFID RC522(SDA_DIO, RESET_DIO);
Sd2Card card;
SdVolume volume;
SdFile root;
const int chipSelect = 4;
File myFile;
void setup()
{
Serial.begin(9600);
/* Abilita SPI*/
SPI.begin();
/* Viene inizilizzato RFID reader */
RC522.init();
Serial.println("Setup");
Serial.print("\nInitializing SD card...");
pinMode(53, OUTPUT);
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println("initialization failed");
return;
}
else {
Serial.println("Found a mirco SD card");
}
/* Temporary loop counter */
byte i;
// Se viene letta una tessera
if (RC522.isCard())
{
// Viene letto il suo codice
RC522.readCardSerial();
String codiceLetto ="";
Serial.println("Codice delle tessera letto:");
// Viene caricato il codice della tessera, all'interno di una Stringa
for(i = 0; i <= 4; i++)
{
codiceLetto+= String (RC522.serNum[i],HEX);
codiceLetto.toUpperCase();
}
Serial.println(codiceLetto);
delay(delayRead);
myFile = SD.open("file.php", FILE_WRITE);
if (myFile) {
Serial.print("Sto scrivendo nel file...");
myFile.println(codiceLetto);
// close the file:
myFile.close();
Serial.println("done.");
}
else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
Serial.println();
Serial.println();
}
}
void loop()
{
}
Come fa' a scriverti su SD, visto che prima deve leggere un RFID... e il tutto e' inserito nel Setup ( che esegue solamente una volta al reset )
metti lettura e scrittura nel Loop
Ho risolto tutto.. Ora devo passare allo step successivo.
Ovvero io con il seguente codice mi creo ogni volta un file php nella sd.
Il mio intendo è quello di collegare arduino ad un router e io tramite pc collegato alla stessa rete prendere questo file nella sd e farci quello che mi pare.
devo usare webserver o webclient? è possibile?
questo è il codice aggiornato, grazie mille 
#include <SD.h>
#include <SPI.h>
#include <RFID.h>
#include <Ethernet.h>
/* Vengono definiti PIN del RFID reader*/
#define SDA_DIO 3
#define RESET_DIO 5
#define delayRead 1000 // Time of delay
/* Viene creata una istanza della RFID libreria */
RFID RC522(SDA_DIO, RESET_DIO);
const int chipSelect = 4;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(192,168,0,5);
IPAddress ip(192, 168, 0, 177);
EthernetClient client;
void setup()
{
Serial.begin(9600);
/* Abilita SPI*/
SPI.begin();
/* Viene inizilizzato RFID reader */
RC522.init();
Serial.println("Setup");
Serial.print("\nInitializing SD card...");
pinMode(53, OUTPUT);
if (!SD.begin(chipSelect)) {
Serial.println("initialization failed");
return;
}
else {
Serial.println("Found a mirco SD card");
}
}
void loop()
{
/* Temporary loop counter */
byte i;
// Se viene letta una tessera
if (RC522.isCard())
{
// Viene letto il suo codice
RC522.readCardSerial();
String codiceLetto ="";
Serial.println("Codice delle tessera letto:");
// Viene caricato il codice della tessera, all'interno di una Stringa
for(i = 0; i <= 4; i++)
{
codiceLetto+= String (RC522.serNum[i],HEX);
codiceLetto.toUpperCase();
}
Serial.println(codiceLetto);
delay(delayRead);
if (SD.exists("file.php"))
{
SD.remove("file.php");
Serial.println("Sto eliminando il vecchio file");
}
File myFile = SD.open("file.php", FILE_WRITE);
if (myFile) {
Serial.print("Sto scrivendo nel file...");
myFile.println("<?php");
myFile.println("<HTML>");
myFile.println("<BODY>");
myFile.print("<a href=”prodotto.php?cod=");
myFile.print(codiceLetto);
myFile.print('"');
myFile.println(">");
myFile.println("</BODY>");
myFile.println("</HTML>");
myFile.println("?>");
// close the file:
myFile.close();
Serial.println(codiceLetto);
}
else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
Serial.println();
Serial.println();
}
}