最近我在墻外漫游的時候,發現了很多個版本的FTC操作模式寫法,這里為大家介紹一種在2017標準下最好寫也是最常見的寫法。
首先,讓我們在TeamCode->java->org.firstinspires.ftc.teamcode文件夾底下創建一個java class,按照自己的喜好取名,推薦單詞首字母大寫,如:TutorialOpMode(不要有空格)

創建之后,你會看到文件中只有一行類的聲明,啥也沒有。接下來就需要繼承一個官方提供的操作類來進行下面編寫。只需要在public class TutorialOpMode 后面加上extends LinearOpMode即可,此時你會看見這一行有出現了紅色的下劃線,不要著急,再接著按alt + enter選擇implement后確定即可。

出現這種情況是因為在繼承LinearOpMode類時同時繼承了它所有的接口和抽象方法,而接口和抽象方法是必須要在子類中實現(定義)的。
理論上,此時你的代碼已經可以編譯運行并安裝在安卓手機上了,但你的Driver Station上并不會出現任何可選的操作模式。
接下來,在代碼的全局區域加上一句,name是操作模式在Driver Station上面的名字,group則是分類。
@TeleOp(name = "TutorialOpMode", group = "Tutorial")注意沒有分號。在出現自動補齊選項的時候盡量使用自動補齊,這樣可以避免很多重復的代碼和手動導入包。這里以“@”開頭的語句稱為Annotation,TeleOp就是FTC包中定義的一個Annotation,所以需要導入包。

此時你可以安裝到手機上,并查看Driver Station了,在TeleOp一欄下拉即可看到這個操作模式。
接下來,寫上如下的代碼:

我們來逐行解釋代碼:
DcMotor motor1 = null;聲明一個馬達,以便在接下來的程序中操作。注意不要將聲明放到任何函數中。當然你也可以聲明和定義一步到位,但從代碼重用的角度考慮,不建議這樣做。
motor1 = hardwareMap.dcMotor.get("motor1"); motor1.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);hardwareMap即從硬件列表中匹配該馬達,get()中的字符串即你在RobotController上定義的馬達名字。除馬達外,其他設備也基本上按照該方法獲取,這與FRC通過串口編號進行獲取有所不同。setMode()將馬達設置為停轉模式,并重置馬達。
waitForStart();這一句從字面意思來理解也就是等待操作開始,也就是說,在你按下手機屏幕上的start按鈕之前,程序只會執行到這里,按下按鈕后,這句話以下的語句才會執行。你可以將這句語句理解為分水嶺,上面的為初始化,下面的為操作。
motor1.setMode(DcMotor.RunMode.RUN_USING_ENCODER); while(opModeIsActive()) { motor1.setPower(0.5); idle(); }將馬達設置為使用編碼器工作,opModeIsActive()即檢驗是否處于操作階段,在操作階段期間,這個while循環內的語句會重復執行。 setPower函數可設置馬達的速度,傳入值為[-1.0,1.0]之間的一個浮點數,負數表示倒轉。 idle()等同于Thread.yield(),即使當前線程進入可執行狀態,以同步其他線程。
接下來你就可以將App安裝到手機上,并配置好一切硬件和兩臺手機,并欣賞馬達的轉動了。
新聞熱點
疑難解答