This application provides a set of demos with X-NUCLEO-NFC01A1 expansion board.
Dependencies: NDefLib X_NUCLEO_NFC01A1 mbed
Fork of X-MBED-NFC1 by
This application provides a set of demos with X-NUCLEO-NFC01A1 expansion board.
The available demos are:
- SAMPLE_WRITE_URL: write a tag with the ST home page URL
- SAMPLE_COUNT_CLICK: create a custom tag to count and report the user button clicks.
- SAMPLE_WRITE_AND_CHANGE_ALL: write a tag with all the supported records and update the tag contents when the user button is pressed.
- SAMPLE_LOCK_TAG_CONTENT: use the M24SR component API to set the NFC tag as read-only.
To enable the different demos comment/uncomment the SAMPLE_* macros provided in main.cpp .
Diff: main.cpp
- Revision:
- 3:f7f818ee694e
- Parent:
- 2:0648c1561eb2
- Child:
- 4:f40b3505070c
diff -r 0648c1561eb2 -r f7f818ee694e main.cpp --- a/main.cpp Tue Dec 01 08:30:54 2015 +0000 +++ b/main.cpp Tue Dec 01 16:01:24 2015 +0000 @@ -1,9 +1,6 @@ -#include <cstring> +#if 0 #include "mbed.h" -#include "m24sr/m24sr_class.h" -//#include "lib_NDEF/lib_TagType4.h" - #include "Type4NfcTagSTM24SR.h" #include "NDefLib/RecordType/RecordAAR.h" @@ -21,7 +18,6 @@ DigitalOut myled(LED1); - void shiftLed(DigitalOut &led1,DigitalOut &led2,DigitalOut &led3){ const uint8_t prevLed1=led1; const uint8_t prevLed2=led2; @@ -31,9 +27,6 @@ led3=prevLed2; } -static const PinName M24SR_SDA=D14; -static const PinName M24SR_SDL=D15; - static const uint32_t MAX_WRITE_TRY=1; void setNFCTag(NDefLib::Type4NfcTag &tag){ @@ -285,7 +278,7 @@ } int main() { - I2C i2cChannel(M24SR_SDA,M24SR_SDL); + I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN); i2cChannel.frequency(400000); X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel); Type4NfcTagSTM24SR tag(nfcNucleo->getM24SR()); @@ -312,4 +305,137 @@ } } +#endif +#if 0 +#include "mbed.h" + +#include "Type4NfcTagSTM24SR.h" +#include "NDefLib/RecordType/RecordURI.h" + +#include "X_NUCLEO_NFC01A1.h" + +int main() { + Serial pc(SERIAL_TX, SERIAL_RX); + I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN); + i2cChannel.frequency(400000); + X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel); + //create the wrapper for use the NdefLib + Type4NfcTagSTM24SR tag(nfcNucleo->getM24SR()); + pc.printf("System Init done: !\n\r"); + //open the i2c session with the nfc chip + if(tag.openSession()){ + nfcNucleo->getLed1()=1; + + //create the NDef message and record + NDefLib::Message msg; + NDefLib::RecordURI rUri(NDefLib::RecordURI::HTTP_WWW,"st.com"); + msg.addRecord(&rUri); + + //write the tag + if(tag.write(msg)){ + pc.printf("Tag writed \n\r"); + nfcNucleo->getLed2()=1; + } + + + //close the i2c session + if(!tag.closeSession()){ + pc.printf("Error Closing the session\n\r"); + }else + nfcNucleo->getLed3()=1; + }else + pc.printf("Error open Session\n\r"); + + return 0; +} + +#endif + +#if 1 + +#include "mbed.h" + +#include "Type4NfcTagSTM24SR.h" +#include "NDefLib/RecordType/RecordText.h" + +#include "X_NUCLEO_NFC01A1.h" + +class MyRecord : public NDefLib::RecordText{ + +private: + char nClickStringBuffer[12]; + uint32_t nClick; + + void syncTextValue(){ + sprintf(nClickStringBuffer,"%d",nClick); + setText(nClickStringBuffer); + } + +public: + + MyRecord():nClick(0){ + syncTextValue(); + } + + void incrementClick(){ + nClick++; + syncTextValue(); + } + +}; + +static volatile bool buttonPress=false; + +void setButtonPress(){ + buttonPress=true; +}//if buttonPress + +void writeMessage(X_NUCLEO_NFC01A1 *nfcNucleo,NDefLib::Message &msg){ + Type4NfcTagSTM24SR tag(nfcNucleo->getM24SR()); + //open the i2c session with the nfc chip + if(tag.openSession()){ + nfcNucleo->getLed1()=! nfcNucleo->getLed1(); + + //write the tag + if(tag.write(msg)){ + nfcNucleo->getLed2()=!nfcNucleo->getLed2(); + }//if + + //close the i2c session + if(tag.closeSession()) + nfcNucleo->getLed3()=!nfcNucleo->getLed3(); + }//if open session +} + +void main() { + I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN); + i2cChannel.frequency(400000); + + X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel); + //create the wrapper for use the NdefLib + Type4NfcTagSTM24SR tag(nfcNucleo->getM24SR()); + + InterruptIn userButton(USER_BUTTON); + userButton.fall(setButtonPress); + + //create the NDef message and record + NDefLib::Message msg; + MyRecord rClickCount; + msg.addRecord(&rClickCount); + + writeMessage(nfcNucleo,msg); + + while(1){ + + if(buttonPress){ + rClickCount.incrementClick(); + writeMessage(nfcNucleo,msg); + buttonPress=false; + }//if + + }//while + +}//main + +#endif