#include <SPI.h>
|
ノードとして動作させるためのライブラリーをinclude |
#define NONE -1 |
スケッチの可読性を高めるための簡単なマクロ |
const byte U_InitPin =
3; const byte U_InitPin_Sense=HIGH; |
U_InitPinにはIPアドレスの設定を初期化するピン番号を指定(現在はD3).このピンは自動的にプルアップされる.ピンの状態がU_InitPin_Senseになった時、 サブネット:255.255.0.0で,それ以外ではブラウザの設定(p2.htmlで設定した値)で起動する. |
const char PROGMEM
U_name[] = "UARDECS Node v.1.0"; |
UECSの通信文で使用.詳しくは通信規約を参照のこと.(環境制御には直接関与しない) |
const char PROGMEM U_footnote[]
= "If you have any question, please contact Yasuba." |
ここで設定した文字列はTOPページの脚注に表示.helpのリンク先を記述することも可能. |
char U_nodename[20] = "Sample"; |
ブラウザで各ページで読み込んだときに表示される. |
const int U_HtmlLine = 3; |
ユーザが独自登録するhtml画面の行数.設定方法は後述する. |
UECSOriginalAttribute U_orgAttribute; |
これはこのまま登録しておく. |
const int U_HtmlLine =
3; //Total number of HTML table rows. const char PROGMEM
NAME0[] = "Temperature"; const char PROGMEM
NAME1[] = "UserSwitch"; const char PROGMEM
NAME2[] = "SetTemp"; //select const char PROGMEM
UECSOFF[] = "OFF"; const char PROGMEM
UECSON[] = "ON"; const char PROGMEM
UECSAUTO[] = "AUTO"; PROGMEM const char
*stringONOFFAUTO[3]={ UECSOFF, UECSON, UECSAUTO, }; PROGMEM const char
CENT[] = "C"; PROGMEM const char
NONES[] = ""; PROGMEM const char
note1[]= "Set temp"; signed long webTemp; signed long
setONOFFAUTO; signed long setONTemp; const char** dummy = NULL; |
U_html配列を登録する際に使用する定数と変数. |
struct UECSUserHtml
U_html[U_HtmlLine]={ {NAME0, UECSSHOWDATA,
CENT, NONES, dummy, 0, &(webTemp), 0, 0, 1}, {NAME1,
UECSSELECTDATA, NONES, NONES, stringONOFFAUTO, 3, &(setONOFFAUTO), 0, 0,
0}, {NAME2, UECSINPUTDATA,
CENT, note1, dummy, 0, &(setONTemp), 100, 400, 1}, }; |
・ U_html配列はこの場合3つなのでU_HtmlLineは3を設定する. |
enum { CCMID_InAirTemp, CCMID_cnd, CCMID_dummy, }; |
可読性を高めるためにCCMIDという記号定数を定義している. CCMID_dummyは定義したCCMの総数を数えるのに使っている. |
const int U_MAX_CCM =
CCMID_dummy; |
本ノードで使用するCCMの数(送受信あわせて)設定.設定した値はccmList配列でメモリーが確保される. |
const char PROGMEM
ccmNameTemp[] = "AirTemp"; |
CCM(通信文)を登録するときに使用する. |
void UserInit(){ U_orgAttribute.mac[0]
= 0x90; U_orgAttribute.mac[1]
= 0xA2; U_orgAttribute.mac[2]
= 0xDA; U_orgAttribute.mac[3]
= 0x12; U_orgAttribute.mac[4]
= 0x34; U_orgAttribute.mac[5]
= 0x56; //Set ccm list UECSsetCCM(false,
CCMID_InAirTemp, ccmNameTemp, ccmTypeTemp, ccmUnitTemp, 30, 1, A_10S_0); UECSsetCCM(true, CCMID_cnd , ccmNameCnd ,
ccmTypeCnd , ccmUnitCnd , 30, 0, A_1S_0); |
この関数内では MACアドレスはArduino
EthernetまたはEthernetシールドに貼られたシールに書いてある.無い場合は新規に発行してもらう必要がある. |
void setSendP1Page(){ |
必要に応じて記述.ブラウザで設定した後に何かしたいとき.処理が無くても関数は必要. |
void UserEvery1min(){ { webTemp =
U_ccmList[CCMID_InAirTemp].value; } //Thermostat if(setONOFFAUTO==0)
{U_ccmList[CCMID_cnd].value=0;}//Manual OFF else
if(setONOFFAUTO==1)
{U_ccmList[CCMID_cnd].value=1;}//Manual ON else
if(setONOFFAUTO==2 && U_ccmList[CCMID_InAirTemp].validity &&
U_ccmList[CCMID_InAirTemp].value<setONTemp)
{U_ccmList[CCMID_cnd].value=1;}//Auto ON else
{U_ccmList[CCMID_cnd].value=0;}//OFF |
この関数は1秒間隔で呼び出される処理を記載する. 動作解説: U_ccmList[CCMID_InAirTemp].validityにより、InAirTempの値が正常に受信できているかどうか判定している.もし、受信できた場合webTempの値を更新する. サーモスタット動作: if(setONOFFAUTO==0) {U_ccmList[CCMID_cnd].value=0;}//Manual
OFF Webページp1.htmlのUserSwitchの項目がOFFになっている時にCCMのcnd.xXXに1を出力する. else if(setONOFFAUTO==1) {U_ccmList[CCMID_cnd].value=1;}//Manual ON Webページp1.htmlのUserSwitchの項目がONになっている時にCCMのcnd.xXXに0を出力する. else
if(setONOFFAUTO==2 && U_ccmList[CCMID_InAirTemp].validity &&
U_ccmList[CCMID_InAirTemp].value<setONTemp)
{U_ccmList[CCMID_cnd].value=1;}//Auto ON else
{U_ccmList[CCMID_cnd].value=0;}//OFF Webページp1.htmlのUserSwitchの項目がAUTOでかつ、InAirTempの値が正常に受信できており、InAirTempの値が設定値を下回った時にcnd.xXXに1を出力する.それ以外ではcnd.xXXに0を出力する. |
void UserEveryLoop(){ |
必要に応じて内部を記述.空でも関数は必要. |
void loop(){ |
これはこのまま記述する. |