Measured results of an XBee wireless sensor device are displayed a LCD on Nucleo board with an XBee coordinator which is in API mode.

Dependencies:   TextLCD mbed xbee sample04_sens

Dependents:   sample04_sens

Please refer to the following site for the details:

Revision:
0:0de2116533e1
Child:
4:09c0f8f67e63
diff -r 000000000000 -r 0de2116533e1 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Jun 22 06:37:51 2014 +0000
@@ -0,0 +1,102 @@
+/*********************************************************************
+サンプルアプリ4 センサー
+新しいセンサーデバイスを発見すると、そのデバイスから照度と温度を得ます。
+ここでは子機のXBeeセンサーにDigi純正のXBee Sensorを想定していますが、
+自作したセンサーでもDIO1~2(XBee_pin 19~18)に0~1.2Vのアナログ電圧を
+与えていれば、何らかの値を読みとることができます。
+
+新しいXBee子機のコミッションボタンDIO0(XBee_pin 20)を押下する(信号レベ
+ルがH→L→Hに推移する)と、子機から参加要求信号が発行されて、Arduino親機
+が子機を発見し、「found a device」と表示します。
+
+ただし、複数のZigBeeネットワークに対応するために、ペアリングは起動後の
+30秒間しか受け付けません。Arduino親機を起動して、コミッションボタンを
+押してペアリングを実施しておき、再度、コミッションボタンでデバイス発見
+します。デバイス発見は30秒のペアリング期間後でも行えます。
+
+本ソースリストおよびソフトウェアは、ライセンスフリーです。
+利用、編集、再配布等が自由に行えますが、著作権表示の改変は禁止します。
+
+解説:
+http://www.geocities.jp/bokunimowakaru/diy/xbee/xbee-nucleo.html
+
+                               Copyright (c) 2010-2012 Wataru KUNINO
+                               http://www.geocities.jp/bokunimowakaru/
+*********************************************************************/
+
+#include <xbee.h>
+#include "TextLCD.h"
+TextLCD lcd(PA_9, PC_7, PB_5, PB_4, PB_10, PA_8); // rs, e, d4-d7
+
+byte dev_sens[]   = {0x00,0x13,0xA2,0x00,0x40,0x00,0x00,0x00};	// 仮設定
+byte dev_en = 0;	// センサー発見の有無(0:未発見)
+
+void setup(){
+	lcd.cls(); lcd.printf("Sample 4 SENS");
+	xbee_init( 0x00 );					// XBee用COMポートの初期化(引数はポート番号)
+}
+
+void loop(){
+	byte i;
+	byte trig=0;
+	float value;
+	XBEE_RESULT xbee_result;			// 受信データ用の構造体
+
+	// デバイス探索
+	lcd.cls(); lcd.printf("Searching:SENSOR");
+	if( xbee_atnj(10) ){				// 10秒間の参加受け入れ
+		lcd.cls(); lcd.printf("Found a device");
+		xbee_from( dev_sens );			// 受信したアドレスをdev_sensへ格納
+		dev_en = 1;						// sensor発見済
+		xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ
+		xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ
+		// xbee_gpio_config( dev_sens, 3 , AIN ); // 接続相手のポート3をAIN入力へ
+	}else{
+		lcd.cls(); lcd.printf("Failed:no dev.");
+	}
+	wait(0.5);
+	lcd.cls(); lcd.printf("DONE");
+	
+	// メイン処理
+	lcd.cls(); lcd.printf("Receiving");
+	while(1){							// 永久に受信する
+		if( dev_en && trig == 0){
+			xbee_force( dev_sens );		// デバイスdev_sensへデータ要求(100回に1回の頻度で)
+			trig = 100;
+		}
+		trig--;
+
+		/* データ受信(待ち受けて受信する) */
+		xbee_rx_call( &xbee_result );
+										// データを受信します。
+		switch( xbee_result.MODE ){		// 受信したデータの内容(MODE値)に応じて
+			case MODE_RESP:				// sensorからの応答の場合に照度と温度を表示
+			case MODE_GPIN:				// 周期方式でデータ受信した場合も想定
+				if( bytecmp( dev_sens , &(xbee_result.FROM[0]) ,8 ) == 0 && xbee_result.STATUS == STATUS_OK ){
+					// 照度測定結果
+					value = xbee_sensor_result( &xbee_result, LIGHT);
+					lcd.cls(); lcd.printf( "%.1f",value );	lcd.printf(" Lux ");
+					// 温度測定結果
+					value = xbee_sensor_result( &xbee_result, TEMP);
+					lcd.locate(0,1); lcd.printf( "%.1f",value ); lcd.printf(" C");
+				}
+				break;
+			case MODE_IDNT:				// 新しいデバイスを発見
+				lcd.cls(); lcd.printf("found a new dev");
+				for( i=0;i<8;i++ ) dev_sens[i]=xbee_result.FROM[i];
+										// 発見したアドレスをdev_sensに読み込み
+				dev_en = 1;				// sensor発見済
+				xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ
+				xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ
+				// xbee_gpio_config( dev_sens, 3 , AIN ); // 接続相手のポート3をAIN入力へ
+				break;
+			default:
+				break;
+		}
+	}
+}
+
+int main(){
+	setup();
+	while(1) loop();
+}
\ No newline at end of file