Robotbit 版的 OTTO 控制邏輯與程式—開機狀態程式與控制程式概述 Part II

2018-02-16 20:58

[otto延伸版] Robotbit版的OTTO 控制邏輯與程式—開機狀態程式與控制程式概述

 

關於Micro:bit版OTTO機器人的那些事(持續更新)

控制邏輯與程式—開機狀態程式與控制程式概述

       經過若干天的調試與測試,終於完成了Micro:bit版OTTO機器人的基本動作程式的編寫,直接使用Makecode圖形化編寫,可能各位親們在看到編寫過後的十分長的積木塊時會感到害怕,沒有關係,跟著工程師一起去探索程式的奧秘!

       看過我們功能演示視頻的小夥伴應該知道,我們Micro:bit通過Robot:bit的強大的拓展功能的幫助,實現了同時操控八個舵機同時進行工作的能力,使得Micro:bit版OTTO機器人不同於其他開源的Arduino版本的OTTO機器人直接多了四個舵機,使得機器人的動作更加的靈活和模擬,大大提高了程式設計所帶來的樂趣。

重點來了,或許你以前做過圖形化發麵的程式設計,那麼如果你能真正弄明白Micro:bit版OTTO機器人的控制邏輯並用圖形化指令將它編譯出來,說明你的邏輯能力已經初具程式師的水準了,哈哈哈!開個玩笑,話不多說讓我們開始講講關於程式控制邏輯的那些事!!!

 

開機狀態控制邏輯

開機狀態設置邏輯流程圖

開機狀態程式簡介

       開機控制時設置程式段開始的初始狀態,也把握著程式的大方向,這裡使用抽調陣列的程式控制每個舵機旋轉的角度,說的專業一點,將每一個舵機旋轉所涉及到的角度參數規定成陣列,並按照順序排列在一起,一個舵機對應一個陣列,程式運行時從陣列中抽取數位,並根據經驗公式進行計算得到此刻舵機所轉動的角度,並將其以信號形式傳送給舵機引腳,這樣使得舵機按照設定,做出相應的動作。

       陣列可以說就是一個單階矩陣,這裡每個舵機我給它們設置了是個資料,一共控制八個舵機,所以所有的陣列構成了一個8X10的矩陣,每一個舵機在執行角度旋轉時,就是在對應的單階矩陣中抽取數字,舵機的位置在每一個時刻都有對應角度,那麼就構成了一個隨變數變化的多元函數關係,簡單的說舵機的角度與時間構成了一個函數關係,而時間又與陣列構成了對應關係,所以可以說是陣列的排列決定了舵機的角度,陣列是中的數位和舵機角度構成了函數關係。形象一點的來說,舵機每個時刻的角度就是一個數位,這些數位是按照一定的順序排列在一個盒子裡,時刻一的時候拿出排在第一個順序的數位傳給舵機執行,時刻二的時候就拿出排在第二個順序的數位傳給舵機執行,以此類推。

  打個比方,如果在一個盒子裡裝滿了蘋果,我們如果要一個一個的拿出來這就要迴圈的做著拿取的動作,你要拿幾個就決定著你要做的這個拿取的動作你需要迴圈多少次,這裡就涉及到我們在編寫程式時需要考慮的重要的程式控制邏輯——迴圈,迴圈語句在C語言程式,單片機程式控制中用途廣泛,而且對程式的功能實現具有重要的意義,一般的迴圈語句會規定迴圈初始量,迴圈條件等,在迴圈中寫入實現其基礎功能的基本語句,從而通過迴圈語句反復執行操作,單迴圈可以單獨串入主程序中,也可以一個大循環囊括一個小迴圈這就是所謂的迴圈嵌套,這裡就是迴圈語句的進階運用,在程式段裡面使用了迴圈的嵌套,馬上通過主程序再進一步講解。需要瞭解迴圈語句功能應用的親們可以查閱相關程式設計控制書籍,這裡就簡單的介紹了一下,大家也可以直接點擊迴圈語句瞭解一下。

       因為涉及到迴圈的嵌套,我自己在寫程式的時候也是慢慢的才梳理出程式的邏輯,大家需要慢慢學,慢慢的去理解。這裡我就自己淺顯的通過簡化的流程圖來闡述一下我的程式設計控制邏輯思路。

 

      上面的圖就是開機時的控制邏輯,邏輯分為兩條主線,首先是迴圈各個狀態量和陣列的設定,另一個分支就是其他狀態包括開機時的聲光電效果的設置,可以看到陣列我們建立了兩個一個是前進要用到的八個舵機的陣列,還有是後退要用到的八個舵機的陣列,然和設置迴圈的標記位元,上面說到我們的程式是一個迴圈嵌套,就分為內迴圈,外迴圈,根據我們的陣列的個數,因為計數位是從0位開始,所以在這裡根據陣列的個數確定標記位元count(內迴圈)為9,外迴圈Step(外迴圈)為7,並且設置完以後定義對應的舵機信號引腳。如果直接使用Robot:bit外掛程式時這一步可以忽略,可以直接在主程序中設置呢。

       因為是通過另一個Micro:bit進行遙控的所以在程式的開始設置2.4G的無線陣列。所以用Makecode程式設計的介面截圖是下麵這樣:

設置開機狀態程式前面

設置開機狀態後面

       大家可以看到,首先設置了無線通訊的陣列,開機時的介面,還有RGB燈的效果,中間沒有截取的就是陣列的設置,因為實在太長了,而且,在一開始安裝舵機時,一定要校準舵機的初始位置。而且根據不同裝配所出現的差異,需要校準的值也有所不一樣,所以這些值參考意義並不是很大,但是如果你是正常校準過後安裝的,那麼偏差就不會很大,要達到同樣的效果,可以就在附近取值。下麵舵機的參考陣列:

前進陣列

forward_g2(S1) = [114, 108, 94, 80, 74, 80, 94, 108, 114, 180]

forward_g5 (S2)= [90, 108, 117, 108, 90, 72, 63, 72, 90, 180]

forward_g15 (S3)= [106, 100, 87, 72, 66, 72, 87, 100, 106, 180]

forward_g20 (S4)= [90, 105, 113, 105, 90, 65, 61, 65, 90, 180]

G1(S5) = [114, 108,94, 80, 74, 80, 94, 108, 114, 180]

G2(S6) = [90, 110,120, 110, 90, 110, 120, 110, 90, 180]

G3(S7) = [106, 100,87, 72, 63, 72, 87, 100, 106, 180]

G4(S8) = [90, 72, 63,72, 90, 108, 117, 108, 90, 180]

後退陣列

backward_g2(S1) = [74, 80, 94, 108, 114, 108, 94, 80, 74, 180]

backward_g5 (S2)= [90, 108, 117, 108, 90, 72, 63, 72, 90, 180]

backward_g15(S3) = [66, 72, 86, 100, 106, 100, 87, 72, 66, 180]

backward_g20(S4) = [90, 105, 113, 105, 90, 69, 60, 69, 90, 180]

G11 (S5)= [74, 80, 94,108, 114, 108, 94, 80, 74, 180]

G12(S6) = [90, 110,120, 110, 90, 110, 120, 110, 90, 180]

G13 (S7)= [66, 72, 86,100, 106, 100, 87, 72, 66, 180]

G14 (S8)= [90, 105, 113,105, 90, 69, 60, 69, 90, 180]

就把對應的值按照從上往下的循序填寫到後面的陣列當中就可以了。這樣我們就完成了程式初始化的設置。

在這你可以下載到來源程式親們可以好好研究一下

 microbit-OTTO 8S.zip (243.54 KB, 下載次數: 50)

下一篇我們介紹主程序!!!敬請期待

歡迎訂閱關注小喵科技Kittenbot官方微信歡迎交流歡迎實錘!!!

 

3D 列印 體感遙控機器人套件

 

—————

返回