Otto機器人動作之程式碼分析(Otto Source Code Understanding Part I)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

本文會將以OTTO_BT.inoOtto函式庫的程式碼,針對跳舞動作的程式碼做說明,例子會以抖右腳(ShakeRightLeg)。

首先要把以C++語言寫好的函式庫(Otto.h)定義改引用進來

這樣子OTTO_BT主程式就會知道有函式庫需要納進來處理,於是Arduino IDE的編譯器(Compiler ==> 先當成翻譯機,會將C/C++語言翻譯成Nano板子看得懂的語言)會知道要對Otto.cpp做翻譯的動作。

接著看看主程式對Otto中對Otto腳位的說明,可以看出程式用了servo這個陣列來儲存nano腳位(依序為腳位2、3、4、5)的清單,此servo陣列型態是Oscillator,Oscillator也是在Otto程式庫中針對伺服馬達做操作的程式庫,此處不談Oscillator的細節(但Oscillator和左右轉與走動有關)。

有了對應表後,還得讓OTTO_BT主程式知道有Otto機器人的程式庫(積木)可以用,這邊透過底下的程式碼可以做到。
Otto Otto;  //This is Otto!
這一行告訴程式,有一個名叫Otto的變數,這邊可先想成有一個機器人在程式裡,要告訴此機器人的腳在哪裡,就是用Otto.init()函式:
Otto.init(PIN_YL,PIN_YR,PIN_RL,PIN_RR,true);
這一行就會設定servo陣列清單(從0開始編號)的順序
清單編號為0為YL的腳位 ==> 也就是 Nano 腳位 2
清單編號為1為YR的腳位 ==> 也就是 Nano 腳位 3
清單編號為2為RL的腳位 ==> 也就是 Nano 腳位 4
清單編號為3為RR的腳位 ==> 也就是 Nano 腳位 5

接著找OTTO_BT主程式中的 shakeLeg 部分:
    case 17: //M 17 500 
      Otto.shakeLeg(1,T,1);
      break;
    case 18: //M 18 500 
      Otto.shakeLeg(1,T,-1);
      break;

這邊是呼叫Otto的shakeLeg函式(積木),那我們看看這函式的程式碼:

在shakeLeg函式中有呼叫到_moveServos()函式,_moveServo()函式內容如下:


從以上的程式碼,筆者整理出要讓Otto抖腳的流程如下:

以此流程,筆者所製作的mBlock積木如下:

沒有留言: