MATLAB Answers

MATLABでのXbeeからのデータ取得について

10 views (last 30 days)
Takaaki Yamazaki
Takaaki Yamazaki on 25 Jul 2020
複数の子機のXbeeで送信してきたセンサのデータをMATLABで表示してプロットするプログラムを作成したいのですがどのようにすればいいのか分かりません。
serial関数を用いてシリアルポートを見る方法は調べたのですがこの方法だとどの子機からデータが来ているのか判別する方法が分かりません。
また、アドオンの「Continuous monitoring of wireless network of temperature sensors using MATLAB® and XBee®」を用いた方法は送信されてくる子機の判別はできます。
しかし、自分が使用するセンサはセンサ部分の電源のON・OFFを繰り返しONの時に測定する仕様であるため制御にマイコンを使用して、子機のXbeeとマイコンをシリアル通信で接続しています。
このアドオンではセンサからXbeeのアナログポートに接続しており上記のシステムに合致しません。
そのため上記のアドオンをそのまま使用することができません。
#include <XBee.h> //最初に必要な宣言
#include <MsTimer2.h>
#define led 3
#define Count_led 2
XBee xbee = XBee(); //XBeeオブジェクトの定義
volatile uint8_t payload[] = {0}; //XBeeで送信するデータです。ここでは2バイトの数値2つ分を定義
// SH + SL Address of receiving XBee
XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x40918AA3); //実際の送信先64bitアドレスを記入
ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload)); //上で定義したpayloadのデータサイズを指定
ZBTxStatusResponse txStatus = ZBTxStatusResponse(); //使用しなくても使える
volatile int val ;
volatile uint8_t light;
volatile int ms_count = 0;
void timerFire(){
//1ms毎にここが呼び出し
ms_count++;
if(ms_count > 1100)
ms_count = 0;
if(ms_count <= 1098)
analogWrite(Count_led, 0);
else {
analogWrite(Count_led, 200);
if(ms_count == 1100)
val = analogRead(0);
light = val / 4;
payload[0] = light-1;
analogWrite(led, light);
xbee.send(zbTx); //16bitのデータを送信!
}
}
void setup() {
pinMode(led,OUTPUT);
Serial.begin(9600);
MsTimer2::set(1, timerFire); //1ms毎に呼び出す設定
MsTimer2::start();
xbee.setSerial(Serial); //Serialxbeeに繋ぎます。
}
void loop() {
}

  0 Comments

Sign in to comment.

Answers (0)

Products


Release

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!