Buongiorno a tutti, chiedo una cortesia riguardo al problema di utilizzo del codice che allego caricato su di un R4 Minima. Questo codice funziona su di un Arduino UNO. Infatti riesco a leggere le Tessere. Caricato su di una R4 ottengo solo la scritta "Didn't find PN53x board" Naturalmente ho collegato i terminali SCL-SDA specifici della scheda. Ho provato anche a collegarli sui terminali A4-A5, stesso risultato. Utilizzando le librerie PN532 della Adafruit è possibile selezionare solo gli ingressi di Reset e Irq ma non I2C, dopo aver abilitato la Arduino Minima. Chiedo gentilmente un aiuto riguardo a questa difficoltà. La R4 è la scheda che devo utilizzare. Grazie per l'attenzione.
A me sembra che stai facendo un miscuglio di librerie ...
... guardati SOLO gli esempi della Arduino_NFC (PN532_I2C fa parte di quel pacchetto) e prova se quelli funzionano ... poi vedi ciò che ti occorre eventualmente aggiungere.
Ho provato ma ottengo sempre questo errore "C:\Users\frman\OneDrive\Documents\Arduino\read_mifare\read_mifare.ino:26:1: error: 'PN532' does not name a type
PN532*board = new PN532_I2C(IRQ, RESET); riferito a questo codice :
**************************************************************************/
/*!
@file read_mifare.pde
@author odopod thisispete
@license
This file shows how to initialize either the SPI or I2C versions of the
pn532 development sheilds and read a mifare tag.
*/
/**************************************************************************/
//compiler complains if you don't include this even if you turn off the I2C.h
//@TODO: look into how to disable completely
#include <Wire.h>
//I2C:
#include <PN532_I2C.h>
#define IRQ 2
#define RESET 3
PN532*board = new PN532_I2C(IRQ, RESET);
//end I2C -->
//SPI:
//#include <PN532_SPI.h>
//
//#define SCK 13
//#define MOSI 11
//#define SS 10
//#define MISO 12
//
//PN532 * board = new PN532_SPI(SCK, MISO, MOSI, SS);
//end SPI -->
#include <Mifare.h>
Mifare mifare;
//init keys for reading classic
uint8_t Mifare::useKey = KEY_A;
uint8_t Mifare::keyA[6] = {0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7 };
uint8_t Mifare::keyB[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
uint32_t Mifare::cardType = 0; //will get overwritten if it finds a different card
#include <NDEF.h>
#define PAYLOAD_SIZE 224
uint8_t payload[PAYLOAD_SIZE] = {};
void setup(void) {
Serial.begin(115200);
board->begin();
uint32_t versiondata = board->getFirmwareVersion();
if (! versiondata) {
Serial.println("err");
while (1); // halt
}
// Got ok data, print it out!
Serial.print("5");Serial.println((versiondata>>24) & 0xFF, HEX);
// Serial.print("v: "); Serial.println((versiondata>>16) & 0xFF, DEC);
// Serial.println((versiondata>>8) & 0xFF, DEC);
// Serial.print("Supports "); Serial.println(versiondata & 0xFF, HEX);
if(mifare.SAMConfig()){
Serial.println("ok");
}else{
Serial.println("er");
}
}
void loop(void) {
uint8_t * uid = mifare.readTarget();
if(uid){
Serial.println(Mifare::cardType == MIFARE_CLASSIC ?"Classic" : "Ultralight");
memset(payload, 0, PAYLOAD_SIZE);
//read
mifare.readPayload(payload, PAYLOAD_SIZE);
FOUND_MESSAGE m = NDEF().decode_message(payload);
switch(m.type){
case NDEF_TYPE_URI:
Serial.print("URI: ");
Serial.println((int)m.format);
Serial.println((char*) m.payload);
break;
case NDEF_TYPE_TEXT:
Serial.print("TEXT: ");
Serial.println(m.format);
Serial.println((char*)m.payload);
break;
case NDEF_TYPE_MIME:
Serial.print("MIME: ");
Serial.println(m.format);
Serial.println((char*)m.payload);
break;
default:
Serial.println("unsupported");
break;
}
}
delay(5000);
}
PN32 * board è una variabile richiamata su Mifare .h
Ho provato con uno scanner e non trova nessuna scheda connessa. Posso pensare che è un problema di connessione I2C ma non so che fare! La scheda funziona sull'UNO!
Scusa ma l'ho riportato poi per correttezza del programma. Ho provato a togliere gli spazzi sia ne codice che nella libreria, riportando il tutto all'origine. Comunque non cambia nulla.
Scusami, sto vedendo un post di luglio dove dice di mettere dei resistori da 4K7 sulle linee SDA e SCL. Provo ma ho dubbi, sono connesso solo con questa schedina a 5 cm scarsi di distanza. Provo!
Dove le hai messe? Perché, purtroppo, quella è una collazione di moduli, ma NON è una libreria in formato valido per Arduino (mancano alcuni files) e non credo che il library manager la riconosca ...
Sto provando a compilare per R4 MINIMA, ma ... ricevo errori ... ci sono cose che sono tipiche in ambiente AVR e NON vanno bene in ambiente ARM ... non so se quelle librerie sono utilizzabili su ARM ... devo vedere se trovo come risolvere
Allora, sono riuscito a compilare l'esempio senza alcun errore per UNO R4 ... ma questo non significa che funzioni correttamente
Ti allego uno zip con la cartella del progetto con dentro i files modificati (essenzialmente NDEF.cpp che dava errore) ... prova ... compilare compila, andare chissà
Ti chiedo di tralasciare, ho messo le resistenze sui terminali SDA e SCL e ho caricato il programma Scanne I2c ed ha riconosciuto la scheda. Nel caricare il codice iniziale ha letto la tessera. Quindi tutto risolto. Ti ringrazio per la disponibilità