2018年5月10日 星期四

ROSA 系統開發 58 ─ Motion_OTTO.h

http://4rdp.blogspot.tw/2018/05/rosa-58-motionottoh.html

OTTO like 已經預編行走與跳舞動作,進階玩家可以參考修改或新編動作,開啟 Motion_OTTO.h 檔案,可以看見下列內容:

const byte RUN_1[] PROGMEM = {                // OTTO wave
//   0, 1,   2, 3, 4,   5, 6,
_SERVO, hof, hof, hof, hof, hof, hof,   //0
_LOOP,    3, idl, idl, idl, idl, idl,   //1
_SERVO, LR4, idl, RR4, idl, idl, idl,   //2
_SERVO, LL4, idl, RL4, idl, idl, idl,   //3
_NEXT,    3, idl, idl, idl, idl, idl,   //4
_SERVO, LMD, LSD, RMD, RSD, idl, idl,   //5
_LOOP,    3, idl, idl, idl, idl, idl,   //6
_SERVO, hon, idl, hon, idl, idl, idl,   //7
_NEXT,    2, idl, idl, idl, idl, idl,   //8
_GOTO,   22,                      // goto RUN_N
};


const    代表常數設定
byte     資料是位元組型態
RUN_1[]  動作資料取名為 RUN_1 陣列
PROGMEM  資料儲存在 flash ROM

//   0, 1,   2, 3, 4,   5, 6,
//      左腿上肢 右腿上肢
//           左腿下肢 右腿下肢



_SERVO   設定 SG90 伺服馬達動作
hof      SG90 hold off,參考 5.2 節
hon      SG90 hold on
idl      SG90 動作不變,也可以用它填滿未使用的記憶區塊

_LOOP, 3, idl, idl, idl, idl, idl,   迴圈內動作重複三次
 XXXX
_NEXT, 3, idl, idl, idl, idl, idl,   迴圈結束,向上跳三行再執行

LR4, RR4, LL4, RL4, LMD, LSD, RMD, RSD     SG90 角度設定

_GOTO, 22,   跳到第 22 號動作程序

從 ROSA_Main.cpp 可看到 *ACTIONS[] 動作程序表,第 22 號是 RUN_N

為什麼這些動作程序要使用像 LMD, LSD 之類奇怪的代碼,而不是直接填寫馬達角度數值呢? 因為更換馬達後,可能需要微調角度,使用代碼的話,只要修改 #define 就可以立即套用到整個 ROSA 程式,而不必逐行修改數值。代碼的意義詳見 ROSA 系統開發 57 所描述說明。


const byte *ACTIONS[] = {
 RUN_N, // none,
 RUN_1, // 1
 RUN_2, // 2
 RUN_3, // 3
 RUN_4, // 4
 RUN_5, // 5
 RUN_6, // 6
 RUN_7, // 7
 RUN_8, // 8
 RUN_9, // 9
 RUN_0, // 0
        // mBot   KEYES CARMP3    AUDIO
 RUN_S, // F        * + >|
 RUN_P, // A        # - MENU
 RUN_U, // up       up EQ POWER
 RUN_D, // down     down FL- EQ
 RUN_R, // right    right CH+ CH+
 RUN_L, // left     left CH- CH-
 RUN_K, // *        OK FL+ RPT
 RUN_18,// B                  >> >>
 RUN_19,// C                  << <<
 RUN_20,// D                  >| V-
 RUN_21,// E                  CH V+
 RUN_N,

};

沒有留言:

張貼留言