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(); } |
これはこのまま記述する. |