เป็นที่ทราบกันอยู่แล้วว่าซอฟต์แวร์ Arduino ที่ใช้ใน POPBOT-XT และ Wiring ที่ใช้ใน Robo-Creator มีจุดกำเนิดเริ่มต้นมาจากที่เดียวกัน มีความคล้ายคลึงในการเขียนโปรแกรมค่อนข้างมาก ดังนั้นเมื่อนำมาติดต่อกับอุปกรณ์ต่าง ๆ ก็แทบจะใช้โค้ดตัวอย่างเดียวกันได้เลย
ก่อนหน้านี้ทาง inex แนะนำวิธีการเขียนโปรแกรมติดต่อระหว่างบอร์ด POP-XT กับเครื่องอ่าน NFC/RFID โดยใช้ตัวอย่างที่อ้างอิงจากเวปไซต์ adafruit และ elechouse ซึ่งดัดแปลงซอร์สโค้ดเพียงเล็กน้อยก็สามารถใช้งานกับ POP-XT ได้ ดังนั้นเมื่อนำมาใช้งานกับ Robo-Creator จึงไม่จำเป็นต้องแก้ไขโค้ดโปรแกรมมากนัก โดยทำตามขั้นตอนดังนี้
1. ดาวน์โหลดไลบรารี่สำหรับติดต่อเครื่องอ่าน NFC/RFID จากArdafruit โดยเข้าไปที่ https://github.com/adafruit/Adafruit_NFCShield_I2C/archive/master.zip
2. แตกโฟลเดอร์ Adafruit_NFCShield_I2C-master ไปไว้ที่ C:\Wiring\libraries
3. เปิดไฟล์ Adafruit_NFCShield_I2C.cpp ภายในโฟลเดอร์ Adafruit_NFCShield_I2C-master มาแก้ไข มีจุดที่ต้องแก้ไข 3 จุดดังนี้
3.1 บรรทัดที่ 43-47 จากเดิม
#if ARDUINO >= 100
#include “Arduino.h”
#else
#include “WProgram.h”
#endif
ให้แก้เหลือเพียงบรรทัดเดียวคือ
#include “wiring.h”
3.2 บรรทัดที่ 72-76 จากเดิม
#if ARDUINO >= 100
Wire.write((uint8_t)x);
#else
Wire.send(x);
#endif
ให้แก้เหลือเพียงบรรทัด
Wire.write((uint8_t)x);
3.3 บรรทัดที่ 86-90 จากเดิม
#if ARDUINO >= 100
return Wire.read();
#else
return Wire.receive();
#endif
ให้แก้เหลือเพียงบรรทัด
return Wire.read();
3.4 ทำการบันทึกไฟล์ที่แก้ไขให้เรียบร้อย
4. เปิดไฟล์ Adafruit_NFCShield_I2C.h ขึ้นมาแก้ไข ในบรรทัด 32-36 จากเดิม
#if ARDUINO >= 100
#include “Arduino.h”
#else
#include “WProgram.h”
#endif
ให้แก้เหลือเพียงบรรทัดเดียวคือ
#include “wiring.h”
5. ทำการเชื่อมต่อสายระหว่างบอร์ด Robo-Creator ในตำแหน่งดังรูป ขา SDA ของเครื่องอ่าน ต่อเข้ากับขา SDA/1 ของ Robo-Creator ขา SCL ของเครื่องอ่าน ต่อเข้ากับขา SCL/0 ของ Robo-Creator ขา IRQ ของเครื่องอ่าน ต่อกับขา RX1/2 ของ Robo-Creator
6. เปิดโปรแกรม Wiring และเขียนโปรแกรมเพื่ออ่านค่าจากการ์ด RFID ดังนี้
/**************************************************************************/ #include <wire.h> #include <adafruit_nfcshield_i2c.h> #include <atx.h> #define IRQ (2) #define RESET (3) // ไม่จำเป็นต้องต่อก็ได้ Adafruit_NFCShield_I2C NFC(IRQ, RESET); unsigned long versiondata ; void setup(void) { Serial.begin(115200); NFC.begin(); versiondata = NFC.getFirmwareVersion(); if (! versiondata) { lcd("No NFC Reader"); while (1); // halt } lcd("NFC Ver.%d.%d",(versiondata>>16) & 0xFF,(versiondata>>8) & 0xFF); NFC.SAMConfig(); // configure board to read RFID tags } void loop(void) { byte success; byte uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID byte uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type) success = NFC.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); if (success) { lcd("#n%d.%d.%d.%d",uid[0],uid[1],uid[2],uid[3]); } }