Ya he dicho que he seguido los ejemplos del tutorial de este link: Review: Shield NFC para Arduino PN532 ISP - Hardware - Arduino Forum y que lo que me funciona es la lectura del ID de las tarjetas NFCs, pero que en la lectura y escritura de las mismas no consigo resultados.
Por eso pedía una explicación de cómo se lee y se escribe en las tarjetas, para resolver mi problema.
Si quieres copio algún ejemplo que SÍ me funciona, cómo el de cambiar color LED RGB en función de la tarjeta.
/**
* Author: Alberto Gil Tesa
* WebSite: http://giltesa.com
* License: CC BY-NC-SA 3.0
*
* Description:
* ARDUINO SHIELD NFC PN532 ISP
*
* Ejemplo de uso de la shield NFC con chip PN532.
* Lee llaveros NFC y enciende un Led RGB en el
* mismo color que el llavero.
*/
#include <PN532.h>
// Shield NFC:
#define SCK 13
#define MOSI 11
#define SS 10
#define MISO 12
// Pines LED RGB:
#define LED_AZUL 2
#define LED_VERDE 3
#define LED_ROJO 4
// IDs llaveros NFC:
#define LIMA 4256651814
#define AZUL 2906087206
#define ROJO 1564564006
#define AMARILLO 4249704998
#define BLANCO 2864817847
#define GRIS_OFF 1833064998
PN532 nfc(SCK, MISO, MOSI, SS);
void setup()
{
Serial.begin(9600);
nfc.begin();
nfc.SAMConfig();
pinMode( LED_AZUL , OUTPUT );
pinMode( LED_VERDE , OUTPUT );
pinMode( LED_ROJO , OUTPUT );
}
void loop()
{
uint32_t id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);
if( id > 0 )
{
switch(id)
{
// ROJO , VERDE , AZUL
case LIMA : ledRGB( 0 , 255 , 0 ); break;
case AZUL : ledRGB( 0 , 0 , 255 ); break;
case ROJO : ledRGB( 204 , 0 , 0 ); break;
case AMARILLO : ledRGB( 160 , 255 , 0 ); break;
case BLANCO : ledRGB( 255 , 255 , 255 ); break;
case GRIS_OFF : ledRGB( 0 , 0 , 0 ); break;
}
}
}
void ledRGB( byte rojo, byte verde, byte azul )
{
analogWrite( LED_ROJO , rojo );
analogWrite( LED_VERDE , verde );
analogWrite( LED_AZUL , azul );
}
Y otro que NO me funciona, el cual se basa en lo citado anteriormente, escribir en la memoria:
/**
* Author: Alberto Gil Tesa
* WebSite: http://giltesa.com
* License: CC BY-NC-SA 3.0
*
* Description:
* ARDUINO SHIELD NFC PN532 ISP
*
* Ejemplo de uso de la shield NFC con chip PN532:
* Contabiliza el numero de veces que se lee la llave.
* Con cada lectura se suma 1 al contador de la EEPROM de
* la llave y se imprime el resultado por el monitor serial.
*/
#include <PN532.h>
// Shield NFC:
#define SCK 13
#define MOSI 11
#define SS 10
#define MISO 12
PN532 nfc(SCK, MISO, MOSI, SS);
void setup()
{
Serial.begin(9600);
nfc.begin();
nfc.SAMConfig();
}
void loop()
{
// Contador es un array de bytes de tamaño 1, es necesario crear la variable de este modo ya que el metodo que escribe la informacion espera recibir un puntero hacia el dato.
byte contador[1];
// Es la clave de acceso necesaria para acceder a cada sector de la memoria:
byte keys[]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
uint32_t id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);
// Si se obtuvo un ID...
if( id > 0 )
{
// Antes de hacer uso de la memoria es necesario autenticarse con la clave de acceso, para ello se le pasa como parametro:
// - El tipo de tarjeta, pudiendo elegir entre 1 o 2.
// - El ID de dispositivo NFC al que queremos acceder a su memoria.
// - La direccion de memoria del bloque en el que queremos autenticarnos, no se le indica el bloque que contiene la clave, si no al que se quiere acceder. El solo se apaña para encontrar la clave correspondiente al bloque.
// - El tipo de clave, se puede elegir entre KEY_A o KEY_B.
// - La clave de arriba.
if( nfc.authenticateBlock(1, id ,0x08, KEY_A, keys) )
{
// Una vez autenticados se lee en el bloque 0x08, 1 byte de memoria.
if( nfc.readMemoryBlock(1, 0x08, contador) )
{
// Cada 255 lecturas de la tarjeta se resetea el contador:
if( contador[0] >= 255)
contador[0] = 0;
// Se suma 1 al contador cada vez que se hace una lectura con la Shield:
contador[0] += 1;
Serial.print("Contador= "); Serial.println(contador[0]);
// Se escribe el nuevo valor del contador en el bloque 0x08:
nfc.writeMemoryBlock(1, 0x08, contador);
}
}
else
{
Serial.println("Clave incorrecta o error de lectura");
}
}
}
Gracias de todas formas por responder 