UECSノード開発用ミドルウェア(UARDECS Ver0.1)使用方法 その4

Writen by Ken-ichiro Yasuba

since 2013. 4. 17.

サンプルスケッチの解説

#include <SPI.h>
#include <Ethernet.h>
#include <avr/pgmspace.h>
#include <avr/wdt.h>
#include <CCM.h>
#include <EEPROM.h>
#include <EthernetManager.h>
ノードとして動作させるためのライブラリーをinclude
#define NONE -1
#define A_1S_0 0
#define A_1S_1 1
#define A_10S_0 2
#define A_10S_1 3
#define A_1M_0 4
#define A_1M_1 5
#define S_1S_0 6
#define S_1M_0 7
#define B_0 8
#define B_1 9

#define UECSSHOWDATA 0
#define UECSINPUTDATA 1
#define UECSSELECTDATA 2
#define UECSSHOWSTRING 3
スケッチの可読性を高めるための簡単なマクロ
const byte U_InitPin = 3; デジタルの3番ピンをLAN設定用に使用.ミドルウェアでプルアップされていて,

このピンをGNDに接続すると,
IPアドレス:192.168.1.7 サブネット:255.255.0.0で,
GNDに接続しないとブラウザの設定(p2.htmlで設定した値)で起動する.
const char PROGMEM U_name[] = "UARDECS Node v.1.0";
const char PROGMEM U_vender[] = "XXXXXX Co.";
const char PROGMEM U_uecsid[] = "00000000";
UECSの通信文で使用.詳しくは通信規約を参照のこと.(環境制御には直接関与しない)
const char PROGMEM U_footnote[] = "If you have any question, please contact Yasuba."
const int U_footnoteLetterNumber = 48;
ここで設定した文字列はTOPページの脚注に表示.helpのリンク先を記述することも可能.
2列目の数字はU_footnoteの文字数を設定する.
char U_nodename[20] = "Sample"; ブラウザで各ページで読み込んだときに表示される.
p2.htmlで値を変更可能であるし,ノード起動時に自動的に不揮発性メモリーから読み込まれる.
const int U_MAX_CCM = 2;
UECSCCM U_ccmList[U_MAX_CCM];
本ノードで使用するCCMの数(送受信あわせて)設定.設定した値はccmList配列でメモリーが確保される.
あまり大きな値にするとプログラムが動かなくなる可能性がある.
void UserInit()関数内の
UECSsetCCM()で登録したCCMの数を設定する.
const int U_HtmlLine = 3; ユーザが独自登録するhtml画面の行数.設定方法は後述する.
後でU_html配列を設定する時に配列数になる.
UECSOriginalAttribute U_orgAttribute; これはこのまま登録しておく.
const char PROGMEM NAME0[] = "Temperature";
const char PROGMEM NAME1[] = "UserSwitch";
const char PROGMEM NAME2[] = "SetTemp";

const char PROGMEM UECSOFF[] = "OFF";
const char PROGMEM UECSON[] = "ON";
const char PROGMEM UECSAUTO[] = "AUTO";
PROGMEM const char *stringONOFFAUTO[]={
UECSOFF,
UECSON,
UECSAUTO,
};
PROGMEM const char CENT[] = "C";
PROGMEM const char NONES[] = "";
PROGMEM const char note1[]= "Set the aime temp";
signed long InAirTemp;
signed long setSamp0;
signed long setSamp1;
const char** dummy = NULL;
U_html配列を登録する際に使用する定数と変数.
struct UECSUserHtml U_html[U_HtmlLine]={
 {NAME0, UECSSHOWDATA, CENT, NONES, dummy, 0, &(InAirTemp), 0, 0, 1},
 {NAME1, UECSSELECTDATA, NONES, NONES, stringONOFFAUTO, 3, &(setSamp0), 0, 0, 0},
 {NAME2, UECSINPUTDATA, CENT, note1, dummy, 0, &(setSamp1), 100, 400, 1},
};
・ U_html配列はこの場合3つなのでU_HtmlLineは3を設定する.
・ 個々で設定した配列は図3−2のStaus & SetValue以下で表示される.
・ 配列の設定方法は後述する.
const char PROGMEM ccmNameTemp[] = "AirTemp";
const char PROGMEM ccmTypeTemp[] = "InAirTemp";
const char PROGMEM ccmUnitTemp[] = "C";

const char PROGMEM ccmNameCnd[] = "NodeCondition";
const char PROGMEM ccmTypeCnd[] = "cnd.xXX";
const char PROGMEM ccmUnitCnd[] = "";
CCM(通信文)を登録するときに使用する.
void UserInit(){
 U_orgAttribute.mac[0] = 0x90;
 U_orgAttribute.mac[1] = 0xA2;
 U_orgAttribute.mac[2] = 0xDA;
 U_orgAttribute.mac[3] = 0x0D;
 U_orgAttribute.mac[4] = 0x29;
 U_orgAttribute.mac[5] = 0x71;
 UECSsetCCM(false, 0, ccmNameTemp, ccmTypeTemp, ccmUnitTemp, 30, 1, A_10S_0);
 UECSsetCCM(true, 1, ccmNameCnd, ccmTypeCnd, ccmUnitCnd, 30, 0, A_1M_1);
}
この関数内では
・ MACアドレスを登録(U_orgAttibute構造体の要素)
・ UserSetCCM関数を使ってCCMの登録
の2つをかならず実施する必要がある.


・ 関数の使い方は後述する
void setSendP1Page(){
}
必要に応じて記述.ブラウザで設定した後になにかしたいとき.空でも関数は必要.
void UserEvery1min(){
 InAirTemp = U_ccmList[0].value; 
 U_ccmList[1].value = 111;
}
1秒毎の処理をきさいしている.(U_ccmList[1].valueはダミーデータ)
U_ccmList[0].valueは他のノードからの受信値が入る(ただし,データの鮮度チェックは今回省略)
void UserEveryLoop(){
}
必要に応じて内部を記述.空でも関数は必要.
void loop(){
UECSloop();
}


void setup(){
UECSsetup();
}
これはこのまま記述する.



最初へ 前のページへ 次のページへ