質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

2979閲覧

arduino RFIDの使い方

horisuke3232

総合スコア109

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2015/04/15 13:36

parallaxのrfidリーダーを使って便利な物を作りたいと思っています。
arduino初心者です。
よろしくお願いします。

http://playground.arduino.cc/Learning/PRFID

上記のサイトにサンプルコードがあったのでこちらを少し変更して、簡単な物をつくりたいと思っています。
そこで、最初に タグコード 650012BA4D が読まれたら、シリアルモニターにYESと表示させる。としたいと思い、下記のようにスケッチしたのですが、

sketch_apr15a.ino:44:18: error: invalid suffix "BA4D" on integer constant

とエラーが出てしまいます。
エラーの原因は何でしょうか?

スケッチ

#include <SoftwareSerial.h>

int val = 0;
char code[10];
int bytesread = 0;

#define rxPin 8
#define txPin 9
// RFID reader SOUT pin connected to Serial RX pin at 2400bps to pin8

void setup()
{
Serial.begin(2400); // Hardware serial for Monitor 2400bps

pinMode(2,OUTPUT); // Set digital pin 2 as OUTPUT to connect it to the RFID /ENABLE pin
digitalWrite(2, LOW); // Activate the RFID reader
}

void loop()
{
SoftwareSerial RFID = SoftwareSerial(rxPin,txPin);
RFID.begin(2400);

if((val = RFID.read()) == 10)
{ // check for header
bytesread = 0;
while(bytesread<10)
{ // read 10 digit code
val = RFID.read();
if((val == 10)||(val == 13))
{ // if header or stop bytes before the 10 digit reading
break; // stop reading
}
code[bytesread] = val; // add the digit
bytesread++; // ready to read next digit
}

if(bytesread == 10) { // if 10 digit read is complete Serial.print("TAG code is: "); // possibly a good TAG Serial.println(code); // print the TAG code if(code == 650012BA4D) { Serial.print("YES"); } else { Serial.print("NO"); } } bytesread = 0; delay(500); // wait for a second

}
}

どなたかご存知の方よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まずエラーメッセージ読んでいきましょう

sketch_apr15a.ino:44:18: error: invalid suffix "BA4D" on integer constant

整数の定数の後ろに変なの:「BA4D」が付いているぞ
と怒られているわけです。

怒られている場所はここですね:

lang

1 if(code == 650012BA4D)...

左辺のcodeはコードを読むとchar[]型であることがわかります。
TAGコードとやらが文字列で来るのかは知りませんが、
だとすると

lang

1 if(code == "650012BA4D")...

なのかなと思います。

投稿2015/04/15 14:01

ozwk

総合スコア13528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

horisuke3232

2015/04/15 14:10

早速の回答ありがとうございました。 ""をつけたところ解消されました。 ただ、650012BA4Dのコードを読み込んでもNOと表示されてしまいました。 文字列ではないからなのでしょうか?
ozwk

2015/04/15 14:13

yes/noと表示する前に Serial.print("TAG code is: "); // possibly a good TAG Serial.println(code); // print the TAG code とcodeが具体的に何なのか出力してくれているのですから それを見ればいいのでは?
horisuke3232

2015/04/15 14:26

シリアルモニターを確認すると650012BA4Dと表示されていますが、650012BA4Dの次にNOと表示されてしまいます。
ozwk

2015/04/15 14:46

すっかり忘れてましたが、Cの仕様として "ABC"は{'A','B','C','\0'}と解釈されます。 "650012BA4D"は11バイトになります。 最後にNull文字が付きます。 というわけでif文の中身を strncmp(code,"650012BA4D",10)==0 とすれば先頭10バイトの比較になって終端の\nを無視できます。
horisuke3232

2015/04/15 14:57

ozwkさん ありがとうございました。 YESとなりました。 これから、音を出したり、モーターを動かしたりとできそうです。 大変勉強になりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問