使用控制器可以更輕鬆地驅動和移動機器人來完成任務。 但是,使用 Drive 程式有限制,並且根據您的機器人構造或手邊的任務,您可能需要不同的控制。 對控制器進行編碼可以讓您優化控制器,使其更好地適合您的機器人和手邊的任務。 在 VEXcode V5 中對控制器進行編碼有多種方法。 每種方法都有其優點和局限性,有些方法更適合某些情況,這取決於所需的結果。
本文將引導您了解在 VEXcode V5 中自訂控制器編碼的三種不同選項。 將描述每種方法及其優點、限制和範例用例,以幫助指導您選擇方法。 出於本文的目的,顯示的所有程式碼範例都是為 Clawbot 建立的。 然而,相同的概念可以應用於 builds.vex.com上找到的許多其他建置以及自訂建置。
選項 1:在設備配置中指派按鈕
當您使用標準版本(例如 Speedbot 或 Clawbot)並且希望快速啟動並運行時,此選項非常有用。
此選項可讓您將馬達、傳動系統或馬達組指派給設備配置中控制器上的按鈕。 有關如何在設備配置中將按鈕分配給控制器的更多信息, 請參閱本文。
選項 1 的摘要:在設備配置中指派按鈕
優點 |
限制 |
範例情況 |
|
|
|
選項 2:使用永久循環
如果您使用自訂構建而不是標準構建,或者希望能夠在控制器中進行更多自定義,那麼此選項是一個不錯的選擇。 使用 Forever 迴圈是為控制器建立自訂程式碼的一個很好的介紹。
此選項將控制器及其關聯按鈕的所有條件置於永遠循環中。 這提供了更大的靈活性,特別是對於客製化建造設計,但也需要一些編碼經驗。 然而,使用此選項時的一個考慮因素是項目的長度和複雜性。 增加的條件越多,程式碼堆疊可能會變得越長。 這意味著多個區塊必須按順序執行,當區塊很多時,這會減慢專案執行速度。 較慢的項目執行可能會在按下控制器按鈕和查看機器人行為之間產生延遲。
下面顯示的具體範例是您可以將 Forever 循環與自訂設計機器人(例如具有自訂傳動系統的機器人)結合使用來驅動機器人並操縱爪子和手臂以便與物件互動的一種方法。
選項 2 代碼的解釋。
程式碼片段 |
解釋 |
此程式碼範例使用了 Clawbot。 當使用控制器上的按鈕來升高和降低手臂時,一旦釋放按鈕,由於重力,手臂就會落回下方。 將手臂和爪子都設為「保持」將確保即使在釋放控制器上的按鈕後,手臂和爪子也將保持在原位。 |
|
|
此程式碼範例使用了 Clawbot。 當使用控制器上的按鈕來升高和降低手臂時,一旦釋放按鈕,由於重力,手臂就會落回下方。 將手臂和爪子都設為「保持」將確保即使在釋放控制器上的按鈕後,手臂和爪子也將保持在原位。 使用 Forever 迴圈來連續檢查控制器上的哪些按鈕被按下。 [設定馬達速度] 塊用於將馬達速度設定為目前控制器沿 2 軸和 3 軸的位置。 這相當於將汽車設定為行駛狀態。 這並不一定會讓汽車移動,它只是讓它移動。 每個操縱桿軸傳回 -100 到 +100 之間的值,居中時傳回零值。 這意味著操縱桿軸在按下時等於 -100% 到 100%。 軸被推向 100 或 -100 越遠,馬達旋轉得越快。 然後使用 [Spin] 塊來實際移動馬達。 這相當於一旦方向確定後給汽車踩油門。 這允許每個馬達由四個控制器軸之一控制。 |
此程式碼範例使用了 Clawbot。 當使用控制器上的按鈕來升高和降低手臂時,一旦釋放按鈕,由於重力,手臂就會落回下方。 將手臂和爪子都設為「保持」將確保即使在釋放控制器上的按鈕後,手臂和爪子也將保持在原位。 [If then else if then else] 區塊用於將某些行為映射到控制器上按下或釋放的按鈕。 在這部分程式碼中,設定的條件是是否按下向上或向下按鈕。 如果是這樣,就會發生某些行為,例如手臂抬起和放下。 還有條件的 else 部分,如果沒有按下任何按鈕,手臂將停止移動。 請注意,Claw 專案中的以下程式碼部分遵循相同的解釋。 |
選項 2 的摘要:使用永久循環
優點 |
限制 |
範例情況 |
|
|
|
選項 3:使用事件
如果您想要對控制器進行大量自訂,那麼使用事件是您的最佳選擇。 一鍵按下可以觸發機器人的多種行為,例如按下按鈕打開爪子、抬起手臂、前進設定距離。 嘗試在 Forever 循環中為每個按鈕編寫多個行為會導致專案執行速度顯著減慢 - 使用事件可以讓您更有效地做到這一點。
此選項使用事件來分解專案流程。 這類似於使用 Forever 循環,但允許程式碼更有組織性,以便按鈕執行具有更快的回應時間。 更快的反應時間意味著您在按下控制器按鈕和看到機器人行為之間不會出現延遲。 此範例顯示與上一個項目相同的行為,但使用事件而不是永遠循環完成。
選項 3 代碼的解釋。
程式碼片段 |
解釋 |
此程式碼範例使用了 Clawbot。 當使用控制器上的按鈕來升高和降低手臂時,一旦釋放按鈕,由於重力,手臂就會落回下方。 將手臂和爪子都設為「保持」將確保即使在釋放控制器上的按鈕後,手臂和爪子也將保持在原位。 |
|
|
此程式碼範例使用了 Clawbot。 當使用控制器上的按鈕來升高和降低手臂時,一旦釋放按鈕,由於重力,手臂就會落回下方。 將手臂和爪子都設為「保持」將確保即使在釋放控制器上的按鈕後,手臂和爪子也將保持在原位。 {When controller axis} 當使用操縱桿更改控制器上的四個軸之一時,事件區塊用於觸發某些行為。 [設定馬達速度] 塊用於將馬達速度設定為目前控制器沿 A 軸和 D 軸的位置。 這相當於將汽車設定為行駛狀態。 這並不一定會讓汽車移動,它只是讓它移動。 每個操縱桿軸傳回 -100 到 +100 之間的值,居中時傳回零值。 這意味著操縱桿軸在按下時等於 -100% 到 100%。 軸被推向 100 或 -100 越遠,馬達旋轉得越快。 然後使用 [Spin] 塊來實際移動馬達。 這相當於一旦方向確定後給汽車踩油門。 這允許每個馬達由四個控制器軸之一控制。 |
此程式碼範例使用了 Clawbot。 當使用控制器上的按鈕來升高和降低手臂時,一旦釋放按鈕,由於重力,手臂就會落回下方。 將手臂和爪子都設為「保持」將確保即使在釋放控制器上的按鈕後,手臂和爪子也將保持在原位。 {When controller axis} 事件區塊用於將某些行為對應到控制器上按下或釋放的按鈕。 在這部分程式碼中,設定的條件是是否按下向上或向下按鈕。 如果是這樣,就會發生某些行為,例如手臂抬起、放下或停止。 請注意,Claw 專案中的最後一段程式碼遵循相同的解釋。 |
選項 3 的總結:使用事件
優點 |
限制 |
範例情況 |
|
|
|