Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of PN532_ReadUid by
Diff: main.cpp
- Revision:
- 0:54a12c4b19c2
- Child:
- 1:18f5ba9fb718
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Sep 13 06:18:59 2016 +0000 @@ -0,0 +1,154 @@ +// Basic example show how to read a tag uid. +// you can use i2c, spi, hsu interface. +// +// Assembled by dotnfc as Arducleo Sample +// 2016/09/10 + + + +#include "mbed.h" +#include "PN532.h" +#include "PN532_HSU.h" +#include "PN532_SPI.h" +#include "PN532_I2C.h" + +DigitalOut ledBrd (LED1); // arducleo onboard led + +DigitalOut ledNFC (D9); // status led + +DigitalOut rstNFC (D4); // pn532 chip reset control + +PwmOut buz(PB_1); + +Serial pc(SERIAL_TX, SERIAL_RX); + +// ----------------------------------------- HSU +//HardwareSerial pn532_hsu (PC_10, PC_11); +//PN532_HSU pn532_if (pn532_hsu); + +// ----------------------------------------- SPI +SPI pn532_spi (SPI_MOSI, SPI_MISO, SPI_SCK); +PN532_SPI pn532_if (pn532_spi, SPI_CS); + +// ----------------------------------------- I2C +//I2C pn532_i2c (I2C_SDA, I2C_SCL); +//PN532_I2C pn532_if (pn532_i2c); + + + +PN532 nfc(pn532_if); + +/*============================================================================== + * \brief reset the pn532 chip + */ +void reset_chip (void) +{ + rstNFC = 0; + wait_ms (100); + rstNFC = 1; +} + + +/*============================================================================== + * \brief init the peripheral + */ +void setup(void) +{ + ledBrd = 0; + ledNFC = 0; + reset_chip (); + + uint32_t versiondata = 0; + pc.baud(115200); + pc.printf ("Hello!\n"); + + while (1) { + nfc.begin(); + //nfc.SAMConfig(); + versiondata = nfc.getFirmwareVersion(); + if (! versiondata) { + pc.printf("Didn't find PN53x board\n\n"); + wait_ms(500); + } else { + break; + } + } + + // Got ok data, print it out! + pc.printf ("Found chip PN5%02X , Firmware ver. %d.%d\n", + (versiondata>>24) & 0xFF, + (versiondata>>16) & 0xFF, + (versiondata>>8) & 0xFF); + + // Set the max number of retry attempts to read from a card + // This prevents us from waiting forever for a card, which is + // the default behaviour of the PN532. + nfc.setPassiveActivationRetries(0xFF); + + // configure board to read RFID tags + nfc.SAMConfig(); + + pc.printf ("\nWaiting for an ISO14443A card\n"); +} + + +/*============================================================================== + * \brief find a tag + */ +void loop(void) +{ + bool success; + 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) + + // configure board to read RFID tags + nfc.SAMConfig(); + + // Wait for an ISO14443A type cards (Mifare, etc.). When one is found + // 'uid' will be populated with the UID, and uidLength will indicate + // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight) + success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength); + + printf ("\n"); + + if (success) { + tone (buz, 800); // turn on the buzzer + ledNFC = 1; // led on + + pc.printf("Found a card!\n"); + + pc.printf("UID Length: %d bytes\n", uidLength); + pc.printf("UID Value: "); + + for (uint8_t i=0; i < uidLength; i++) + pc.printf(" 0x%02X", uid[i]); + + pc.printf("\n"); + + wait_ms (100); + tone (buz, 0); // turn off the buzzer + + // wait until the card is taken away + while (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength, 500)) {} + + ledNFC = 0; // led off + } else { + // PN532 probably timed out waiting for a card + pc.printf("\nTimed out waiting for a card\n"); + ledNFC = 0; + wait_ms (200); + } +} + + +/*============================================================================== + * \brief main entry + */ +int main() +{ + setup(); + + while (1) + loop (); +} +