XBeeのデジタル(アナログも可)入力読み取りデバイスおよび、無線送信デバイスとして使用してもう一つのXBeeにデータを送信するためのスケッチです。今回はXBee(送信機)の電源がonかoffかを受信し(データが無線送信されているかのみを確認)、その情報をArduino(ATmega328)で読み取ります。消費電力を低減させるため、送信側のXBeeはスリープ機能で10秒ごとにしかデータを送りません。これに対応して、一度データを受け取ると10秒間は以前に読み取った情報(onかoffか)を保持する仕組みです。
/*
Read Digital Input
------------------
**Receiver= ZigBee Coordinator API mode ver 218C
Serial High=0
Serial Low=0
ATAP=2
ATSP=3E8
------------------
**Sender= ZigBee End Device AT mode ver 228C
Serial High=0
Serial Low=0
ATSM(sleep mode)= cyclic sleep
ATST(time before sleep)=3E8=1000 msec
ATSP(cyclic sleep period)=3E8=1000=10*1000 msec=10sec
IO sampling rate 64=100 msec
PORT
D0=Digital IN
-------------------
*/
boolean PowerOn; // 無線データを受信したか否かの状態を示す。
unsigned long TimeOn; //以前にonとなってからの時間。
void setup() {
pinMode(12, OUTPUT); //受信してHIGHの情報を読み取った時12番ピンをHIGHとする。
pinMode(13, OUTPUT); //受信チェック用,soundあり
Serial.begin(9600); //Serial通信の設定
digitalWrite(12,HIGH); delay(1000); digitalWrite(12,LOW); //確認用ランプ点灯
digitalWrite(13,HIGH); delay(100); digitalWrite(13,LOW); //確認用ランプ点灯
PowerOn=false; //立ち上げ時は子機無線off状態としておく。(データが送られて来ないのにon状態を維持することを防ぐため)
}
void loop() {
if(Serial.available() > 20){//0-21バイトを受信
if(Serial.read()==0x7E){//20バイト以上で先頭が0x7Eまで待つ
//スタートバイトを見つけたら
TimeOn=millis(); //onになった時間を記録
PowerOn=true; //状態をtrueとする。
digitalWrite(13,HIGH); delay(100); digitalWrite(13,LOW);//確認用のLED点灯+sound
}
}
else{PowerOn=false;}//20バイト以下のデータしか無ければ状態をfalseとする。
if(PowerOn==true){digitalWrite(12,HIGH);} //trueの時には12番端子の出力をHighとする。
else{if(millis()>(11000+TimeOn)){digitalWrite(12,LOW);}}//スタートバイトを見つけられない場合は11 sec経つとoffとする。
//(逆に、11秒間はデータが送られて来なくともon状態を保つ。)
}
戸田よろず研究所トップページへ
ここで公開するアイデア/装置は安全性を保障しておりません。
用途に応じた設計を行い、十分な安全検査を行ってからご利用ください。
本サイトの情報の営利目的での利用はご遠慮ください。
本サイトの内容の無断転載を禁じます。© 2012 TYK