heres the revised schematic and also the revised code :
/**************************************************************************/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_PN532.h>
// If using the breakout or shield with I2C, define just the pins connected
// to the IRQ and reset lines. Use the values below (2, 3) for the shield!
#define PN532_IRQ (D3)
#define PN532_RESET (D6) // Not connected by default on the NFC Shield
const int DELAY_BETWEEN_CARDS = 500;
long timeLastCardRead = 0;
boolean readerDisabled = false;
int irqCurr;
int irqPrev;
// This example uses the IRQ line, which is available when in I2C mode.
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);
void startListeningToNFC();
void handleCardDetected();
void setup(void) {
Serial.begin(115200);
while (!Serial) delay(10); // for Leonardo/Micro/Zero
Serial.println("Hello!");
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
Serial.print("Didn't find PN53x board");
while (1); // halt
}
// Got ok data, print it out!
Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
startListeningToNFC();
}
void loop(void) {
if (readerDisabled) {
if (millis() - timeLastCardRead > DELAY_BETWEEN_CARDS) {
readerDisabled = false;
startListeningToNFC();
}
} else {
irqCurr = digitalRead(PN532_IRQ);
// When the IRQ is pulled low - the reader has got something for us.
if (irqCurr == LOW && irqPrev == HIGH) {
Serial.println("Got NFC IRQ");
handleCardDetected();
}
irqPrev = irqCurr;
}
}
void startListeningToNFC() {
// Reset our IRQ indicators
irqPrev = irqCurr = HIGH;
Serial.println("Starting passive read for an ISO14443A Card ...");
if (!nfc.startPassiveTargetIDDetection(PN532_MIFARE_ISO14443A)) {
Serial.println("No card found. Waiting...");
} else {
Serial.println("Card already present.");
handleCardDetected();
}
}
void handleCardDetected() {
uint8_t success = false;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
// read the NFC tag's info
success = nfc.readDetectedPassiveTargetID(uid, &uidLength);
Serial.println(success ? "Read successful" : "Read failed (not a card?)");
if (success) {
// Display some basic information about the card
Serial.println("Found an ISO14443A card");
Serial.print(" UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
Serial.print(" UID Value: ");
nfc.PrintHex(uid, uidLength);
if (uidLength == 4)
{
// We probably have a Mifare Classic card ...
uint32_t cardid = uid[0];
cardid <<= 8;
cardid |= uid[1];
cardid <<= 8;
cardid |= uid[2];
cardid <<= 8;
cardid |= uid[3];
Serial.print("Seems to be a Mifare Classic card #");
Serial.println(cardid);
}
Serial.println("");
timeLastCardRead = millis();
}
// The reader will be enabled again after DELAY_BETWEEN_CARDS ms will pass.
readerDisabled = true;
}
what i notice its only when i play with IRQ like : disconnect it, put it on my finger, reconnect it that i detect a card or see things in the serial monitor