💨
Arduino(9) Felica ID読み取り
はじめに
前回はスケッチ例でFelicaが動いてるのを確認したので、今回はFelicaIDを読み取ります。
IDとは
SONYさんのページにある「Felica技術方式の各種コードについて」資料内に記載がありました。製造ID(IDm)は8バイトのバイト列で、上位から以下の意味があるみたいです。
バイト数 | 内容 |
---|---|
2 | 製造者コード |
6 | カード識別番号 |
カード内に複数システムがある場合には、もちょっとややこしくなる様ですが、ここでは無視。 |
実装
スケッチ例の中にある「FelicaPush」から実装を変更していきます。
不要なLEDの点灯は削除しています。
#include <RCS620S.h>
#include <inttypes.h>
#include <string.h>
#define COMMAND_TIMEOUT 400
#define PUSH_TIMEOUT 2100
#define POLLING_INTERVAL 500
//#define LED_PIN 13
RCS620S rcs620s;
int waitCardReleased = 0;
void setup()
{
int ret;
//シリアルモニタ用のシリアル初期化
Serial.begin(9600);
//RCS602S用のシリアル初期化
Serial1.begin(115200);
//RCS602Sの初期化
ret = rcs620s.initDevice();
while (!ret) {}
}
void loop()
{
int ret;
String IDm = "";
char buf[2];
rcs620s.timeout = COMMAND_TIMEOUT;
//Felica状態の取得
ret = rcs620s.polling();
if (ret) {
//Felicaがタッチされた場合
for (int i = 0; i < 8; i++) {
sprintf(buf, "%02X", rcs620s.idm[i]);
IDm += buf;
}
Serial.println(IDm);
}
rcs620s.rfOff();
delay(POLLING_INTERVAL);
}
大きく変更したのは、loop関数内です。
Felicaがタッチされると、pollingにてその旨が返ってくるみたいです。その時IDは、そのもの「rcs602s.idm」という配列に入る様です。この中身はバイナリの値なので、表示する為に、文字列に変換する為、「sprintf」を使用して1文字ずつ変換しています。
残件
次は、このコードをマージして、SDカードとかにIDが書き込まれる様にします。
Discussion