4行目でサブスクライブ要求メッセージを、文字型配列に格納しています。トピックは'#'ですので、全てのトピックに対してサブスクリプション要求を送っていることになります。今回受け取りたいトピックは“ arduino/d2/ ”ですのでそのように設定することも可能です。
char sub[]={0x82,0x06,0x00,0x01,0x00,0x01,'#',0x00};
5行目で発光ダイオードをオンにするためのトピックとメッセージを文字型配列に格納し、6行目で発光ダイオードをオフにするためのトピックとメッセージを文字型配列に格納しています。これらの配列を用いて受け取ったメッセージがこれらと符合するか判断します。
char ledOn[] ="arduino/d2/1"; char ledOff[]="arduino/d2/0";
20行目で発光ダイオードがつながったピンを、出力モードに設定しています。33行目では文字型配列「sub」に格納されたメッセージを送出し、サブスクライブ要求を送っています。
pinMode(2, OUTPUT);
for (i=0;i<8;i++)mySerial.write(sub[i]);
36行目以降はloop関数で、文字型配列「ledOn」と「ledOff」と受け取ったメッセージが符合するかチェックします。
37行目ではスタティックな整数型変数「i」と「j」を宣言しています。変数iが12になれば受信メッセージが“arduino/d2/1”と符合したことを示します。その場合D2ピンの値をHIGHとし、発光ダイオードは点灯します。同様に変数jが12になれば受信メッセージが“arduino/d2/0”と符合したことを示します。その場合はD2ピンの値をLOWにします。このとき発光ダイオードは消灯します。それ以外の場合は何も起こりません。これを繰り返します。
void loop(){ static int i=0,j=0; char c; while (!mySerial.available()); c = mySerial.read(); if (ledOn[i++]!=c)i=0; if (i==12)digitalWrite(2, HIGH); if (ledOff[j++]!=c)j=0; if (j==12)digitalWrite(2, LOW); }
Copyright © ITmedia, Inc. All Rights Reserved.