Arduino+RC-S620/SでFeliCa IDmを取得してLCDに表示する

2012-05-13   treby   IDm Snatcher  , , , このエントリーをはてなブックマークに追加

今さら説明する必要もないのかもだけれど、まあ、書いておくだけ書いておく。まあまあ、なんくるないさー。

使うものリスト

目的

Arduinoには、「シールド」と呼ばれる拡張基板を取り付けられるようになっている。各シールドは便利な機能を持っていることが多く、シールドについている足はArduinoの各ピンにぴったり合わさるように作られている。Arduinoで何かモノづくりをするときは適切なシールドを使いこなせば良い。そしてこの気楽さこそが、Arduinoの醍醐味なのだ。

キャラクタLCDシールド

数多いシールドの内の一つにキャラクタLCDシールドがある。これを使うと任意の文字列や数値を表示することができる。LCDシールドのすごいところは文字を表示するのにシリアルポートを使わないことだ。つまり、ハードウェアシリアルポートが1ポートしかないArduino Unoなどでも問題なく情報を表示することができるのだ。さらに標準ライブラリ、LiquidCrystalを使えば苦労することなく情報を表示させることができる。素晴らしい。SoftwareSerialで悩んでいたのが嘘のようだ。

本記事では、FeliCa R/WであるRC-S620/Sで取得したIDmをLCDシールドに表示することを目標とする。

回路図

回路図というより配線図

  • (LCD Shield on Arduino)
  • Arduino D0(RX) – RC-S620/S 3(TXD)
  • Arduino D1(TX) – RC-S620/S 2(RXD)
  • Arduino 5V – RC-S620/S 1(Vdd)
  • Arduino GND – RC-S620/S 6(GND)

スケッチコード

#include 
#include 

#define COMMAND_TIMEOUT 400
#define POLLING_INTERVAL 500
#define LED_PIN 13

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
RCS620S rcs620s;

void setup() { 
  int ret;
  
  pinMode(LED_PIN, OUTPUT);   // for Polling Status
  digitalWrite(LED_PIN, LOW); 
  
  Serial.begin(115200);      // for RC-S620/S
  lcd.begin(16, 2);           // for LCD
  
  // initialize RC-S620/S
  ret = rcs620s.initDevice();
  while (!ret) {}             // blocking
}

void loop() {
  int ret, i;

  // Polling
  digitalWrite(LED_PIN, HIGH);
  rcs620s.timeout = COMMAND_TIMEOUT;
  ret = rcs620s.polling();

  lcd.clear();
  
  if(ret) {
    lcd.print("IDm:");
    lcd.setCursor(0, 1);
    for(i = 0; i < 8; i++)
    {
      if(rcs620s.idm[i] / 0x10 == 0) lcd.print(0);
      lcd.print(rcs620s.idm[i], HEX);
    }
  } else {
    lcd.print("Polling...");
  }
  
  rcs620s.rfOff();
  digitalWrite(LED_PIN, LOW);
  delay(POLLING_INTERVAL);
}

RCS620S.hを読めば分かるように、RC-S620/SライブラリはPollingで返ってきたIDmをpublic変数にしている。故、スケッチ中からも参照することができるのだ。

また、IDmの表示部では1バイトごとに表示を行っているが、これが2桁とならない場合(すなわち0x10より小さい場合)に以下のコードで0埋めするようにした。

      if(rcs620s.idm[i] / 0x10 == 0) lcd.print(0);

実行結果

Polling表示

Polling中

LEDがペカペカ光ってLEDにPolling...と表示されれば成功。

IDmを表示した状態

IDmの表示

Pollingに応答したカードやデバイスのIDmをLCDに表示してくれる(Riccaの中身はSUGOCA)。