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.
Dependencies: TSI mbed tsi_sensor
Fork of readMifare by
main.cpp@3:3c63af6987d3, 2015-10-26 (annotated)
- Committer:
- michellen
- Date:
- Mon Oct 26 10:06:28 2015 +0000
- Revision:
- 3:3c63af6987d3
- Parent:
- 2:96f420fa4a6e
v1 - read and write from val
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| nebgnahz | 1:fb72a2f7cab5 | 1 | /**************************************************************************/ |
| nebgnahz | 1:fb72a2f7cab5 | 2 | /*! |
| nebgnahz | 0:54bf4b21c7fa | 3 | |
| nebgnahz | 1:fb72a2f7cab5 | 4 | @file main.cpp |
| nebgnahz | 1:fb72a2f7cab5 | 5 | @author Adafruit Industries |
| nebgnahz | 1:fb72a2f7cab5 | 6 | @modified_by Ben Zhang <benzh@eecs.berkeley.edu> |
| nebgnahz | 1:fb72a2f7cab5 | 7 | @license BSD (see license.txt) |
| nebgnahz | 1:fb72a2f7cab5 | 8 | |
| nebgnahz | 0:54bf4b21c7fa | 9 | This example will wait for any ISO14443A card or tag, and |
| nebgnahz | 0:54bf4b21c7fa | 10 | depending on the size of the UID will attempt to read from it. |
| nebgnahz | 0:54bf4b21c7fa | 11 | |
| nebgnahz | 0:54bf4b21c7fa | 12 | If the card has a 4-byte UID it is probably a Mifare |
| nebgnahz | 0:54bf4b21c7fa | 13 | Classic card, and the following steps are taken: |
| nebgnahz | 0:54bf4b21c7fa | 14 | |
| nebgnahz | 0:54bf4b21c7fa | 15 | - Authenticate block 4 (the first block of Sector 1) using |
| nebgnahz | 0:54bf4b21c7fa | 16 | the default KEYA of 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF |
| nebgnahz | 0:54bf4b21c7fa | 17 | - If authentication succeeds, we can then read any of the |
| nebgnahz | 0:54bf4b21c7fa | 18 | 4 blocks in that sector (though only block 4 is read here) |
| nebgnahz | 0:54bf4b21c7fa | 19 | |
| nebgnahz | 0:54bf4b21c7fa | 20 | If the card has a 7-byte UID it is probably a Mifare |
| nebgnahz | 0:54bf4b21c7fa | 21 | Ultralight card, and the 4 byte pages can be read directly. |
| nebgnahz | 0:54bf4b21c7fa | 22 | Page 4 is read by default since this is the first 'general- |
| nebgnahz | 0:54bf4b21c7fa | 23 | purpose' page on the tags. |
| nebgnahz | 0:54bf4b21c7fa | 24 | |
| nebgnahz | 0:54bf4b21c7fa | 25 | |
| nebgnahz | 0:54bf4b21c7fa | 26 | This is an example sketch for the Adafruit PN532 NFC/RFID breakout boards |
| nebgnahz | 0:54bf4b21c7fa | 27 | This library works with the Adafruit NFC breakout |
| nebgnahz | 0:54bf4b21c7fa | 28 | ----> https://www.adafruit.com/products/364 |
| nebgnahz | 0:54bf4b21c7fa | 29 | |
| nebgnahz | 0:54bf4b21c7fa | 30 | Check out the links above for our tutorials and wiring diagrams |
| nebgnahz | 0:54bf4b21c7fa | 31 | These chips use SPI to communicate, 4 required to interface |
| nebgnahz | 0:54bf4b21c7fa | 32 | |
| nebgnahz | 0:54bf4b21c7fa | 33 | Adafruit invests time and resources providing this open source code, |
| nebgnahz | 0:54bf4b21c7fa | 34 | please support Adafruit and open-source hardware by purchasing |
| nebgnahz | 0:54bf4b21c7fa | 35 | products from Adafruit! |
| nebgnahz | 0:54bf4b21c7fa | 36 | |
| nebgnahz | 0:54bf4b21c7fa | 37 | */ |
| nebgnahz | 0:54bf4b21c7fa | 38 | /**************************************************************************/ |
| nebgnahz | 0:54bf4b21c7fa | 39 | |
| nebgnahz | 0:54bf4b21c7fa | 40 | #include "mbed.h" |
| nebgnahz | 0:54bf4b21c7fa | 41 | #include "Adafruit_PN532.h" |
| michellen | 3:3c63af6987d3 | 42 | #include "TSISensor.h" |
| michellen | 3:3c63af6987d3 | 43 | |
| michellen | 3:3c63af6987d3 | 44 | |
| nebgnahz | 0:54bf4b21c7fa | 45 | |
| nebgnahz | 0:54bf4b21c7fa | 46 | #define SS PTD0 |
| nebgnahz | 1:fb72a2f7cab5 | 47 | // PTD1 is also LED_BLUE, it will blink during SPI communication. |
| nebgnahz | 0:54bf4b21c7fa | 48 | #define SCK PTD1 |
| nebgnahz | 0:54bf4b21c7fa | 49 | #define MOSI PTD2 |
| nebgnahz | 0:54bf4b21c7fa | 50 | #define MISO PTD3 |
| nebgnahz | 0:54bf4b21c7fa | 51 | |
| nebgnahz | 0:54bf4b21c7fa | 52 | DigitalOut red(LED_RED); |
| nebgnahz | 0:54bf4b21c7fa | 53 | DigitalOut green(LED_GREEN); |
| shong2010 | 2:96f420fa4a6e | 54 | DigitalOut blue(LED_BLUE); |
| nebgnahz | 0:54bf4b21c7fa | 55 | |
| nebgnahz | 0:54bf4b21c7fa | 56 | Serial pc(USBTX, USBRX); |
| nebgnahz | 0:54bf4b21c7fa | 57 | Adafruit_PN532 nfc(SCK, MISO, MOSI, SS); |
| michellen | 3:3c63af6987d3 | 58 | float readVal = 0; |
| michellen | 3:3c63af6987d3 | 59 | float lastTouch = 0; |
| nebgnahz | 0:54bf4b21c7fa | 60 | void loop(void); |
| michellen | 3:3c63af6987d3 | 61 | TSISensor tsi; |
| michellen | 3:3c63af6987d3 | 62 | PwmOut led(LED_GREEN); |
| nebgnahz | 0:54bf4b21c7fa | 63 | |
| nebgnahz | 0:54bf4b21c7fa | 64 | int main() { |
| nebgnahz | 0:54bf4b21c7fa | 65 | pc.printf("Hello!\n"); |
| shong2010 | 2:96f420fa4a6e | 66 | // By default, no color |
| shong2010 | 2:96f420fa4a6e | 67 | green = 1; red = 1, blue = 1; |
| michellen | 3:3c63af6987d3 | 68 | |
| michellen | 3:3c63af6987d3 | 69 | |
| michellen | 3:3c63af6987d3 | 70 | |
| michellen | 3:3c63af6987d3 | 71 | |
| michellen | 3:3c63af6987d3 | 72 | // while (true) { |
| michellen | 3:3c63af6987d3 | 73 | // float test= tsi.readPercentage(); |
| michellen | 3:3c63af6987d3 | 74 | // pc.printf("%f",test); |
| michellen | 3:3c63af6987d3 | 75 | // wait(0.1); |
| michellen | 3:3c63af6987d3 | 76 | // } |
| nebgnahz | 0:54bf4b21c7fa | 77 | nfc.begin(); |
| nebgnahz | 0:54bf4b21c7fa | 78 | |
| nebgnahz | 0:54bf4b21c7fa | 79 | uint32_t versiondata = nfc.getFirmwareVersion(); |
| nebgnahz | 0:54bf4b21c7fa | 80 | if (! versiondata) { |
| nebgnahz | 0:54bf4b21c7fa | 81 | pc.printf("Didn't find PN53x board"); |
| nebgnahz | 0:54bf4b21c7fa | 82 | while (1); // halt |
| nebgnahz | 0:54bf4b21c7fa | 83 | } |
| nebgnahz | 0:54bf4b21c7fa | 84 | // Got ok data, print it out! |
| nebgnahz | 0:54bf4b21c7fa | 85 | pc.printf("Found chip PN5%2X with Firmware ver. %d.%d\n", |
| nebgnahz | 0:54bf4b21c7fa | 86 | versiondata >> 24, |
| nebgnahz | 0:54bf4b21c7fa | 87 | (versiondata >> 16) & 0xFF, |
| nebgnahz | 0:54bf4b21c7fa | 88 | (versiondata >> 8) & 0xFF); |
| nebgnahz | 0:54bf4b21c7fa | 89 | |
| nebgnahz | 0:54bf4b21c7fa | 90 | // configure board to read RFID tags |
| nebgnahz | 0:54bf4b21c7fa | 91 | nfc.SAMConfig(); |
| nebgnahz | 0:54bf4b21c7fa | 92 | |
| nebgnahz | 0:54bf4b21c7fa | 93 | pc.printf("Waiting for an ISO14443A Card ...\n"); |
| nebgnahz | 0:54bf4b21c7fa | 94 | |
| nebgnahz | 0:54bf4b21c7fa | 95 | while(1) { loop(); } |
| nebgnahz | 0:54bf4b21c7fa | 96 | } |
| nebgnahz | 0:54bf4b21c7fa | 97 | |
| nebgnahz | 0:54bf4b21c7fa | 98 | |
| nebgnahz | 0:54bf4b21c7fa | 99 | void loop(void) { |
| shong2010 | 2:96f420fa4a6e | 100 | // Turn back to no color |
| shong2010 | 2:96f420fa4a6e | 101 | green = 1; red = 1, blue = 1; |
| michellen | 3:3c63af6987d3 | 102 | float tsiVal = tsi.readPercentage(); |
| michellen | 3:3c63af6987d3 | 103 | if (tsiVal > 0) { |
| michellen | 3:3c63af6987d3 | 104 | lastTouch = tsiVal; |
| michellen | 3:3c63af6987d3 | 105 | } |
| nebgnahz | 0:54bf4b21c7fa | 106 | uint8_t success; |
| nebgnahz | 0:54bf4b21c7fa | 107 | uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID |
| nebgnahz | 0:54bf4b21c7fa | 108 | uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type) |
| nebgnahz | 0:54bf4b21c7fa | 109 | |
| nebgnahz | 0:54bf4b21c7fa | 110 | // Wait for an ISO14443A type cards (Mifare, etc.). When one is found |
| nebgnahz | 0:54bf4b21c7fa | 111 | // 'uid' will be populated with the UID, and uidLength will indicate |
| nebgnahz | 0:54bf4b21c7fa | 112 | // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight) |
| nebgnahz | 0:54bf4b21c7fa | 113 | success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); |
| nebgnahz | 0:54bf4b21c7fa | 114 | |
| nebgnahz | 0:54bf4b21c7fa | 115 | if (success) { |
| nebgnahz | 0:54bf4b21c7fa | 116 | // Turn off to indicate Card swipe |
| shong2010 | 2:96f420fa4a6e | 117 | green = 1; red = 1, blue = 1; |
| nebgnahz | 0:54bf4b21c7fa | 118 | // Display some basic information about the card |
| nebgnahz | 0:54bf4b21c7fa | 119 | pc.printf("\n\nFound an ISO14443A card\n"); |
| nebgnahz | 0:54bf4b21c7fa | 120 | pc.printf(" UID Length: %d bytes", uidLength); |
| nebgnahz | 0:54bf4b21c7fa | 121 | pc.printf(" UID Value: "); |
| nebgnahz | 0:54bf4b21c7fa | 122 | nfc.PrintHex(uid, uidLength); |
| nebgnahz | 0:54bf4b21c7fa | 123 | pc.printf("\n"); |
| michellen | 3:3c63af6987d3 | 124 | // We are not actually writing to the card. We just want to know the ID. |
| michellen | 3:3c63af6987d3 | 125 | // Read value associated with ID to a database once we have an SD card... |
| michellen | 3:3c63af6987d3 | 126 | led = 1.0 - readVal; |
| michellen | 3:3c63af6987d3 | 127 | // Would write to database with ID card and lastTouch |
| michellen | 3:3c63af6987d3 | 128 | readVal = lastTouch; |
| nebgnahz | 0:54bf4b21c7fa | 129 | |
| nebgnahz | 0:54bf4b21c7fa | 130 | } |
| nebgnahz | 0:54bf4b21c7fa | 131 | |
| nebgnahz | 0:54bf4b21c7fa | 132 | } |
