【ソース】
http://licheng.sakura.ne.jp/myeongwol/MyeongWol_Sakura.zip
GR-SAKURAのクラウドWebコンパイラ用ソース。
(Sketch Template Version 1.01への追加分のみ)
(1) gr_sketch.cpp
これがメインのソース。
ラジコンサーボの制御にはGR-SAKURAのライブラリ(Arduinoとソース後漢)のServoクラスを利用する。ステッピングモータの制御は、GR-SAKURAのライブラリのStepperクラスは使わず、後述のsteppers.cppに制御を実装した。
Arduino同様、setup()が初期化関数。ここで、I/Oのピン機能設定を行っている。I/Oピン表は下記の通り。
IO0 | シリアル RxD |
IO1 | シリアル TxD |
IO2 | ステッピングモータ 右輪 方向 |
IO3 | ステッピングモータ 右輪 クロック |
IO4 | ステッピングモータ 左輪 方向 |
IO5 | ステッピングモータ 左輪 クロック |
IO6 | ステッピングモータ 両輪イネーブル |
IO7 | サーボ 全軸イネーブル |
IO8 | サーボ 左肘 |
IO9 | サーボ 左肩 |
IO10 | サーボ 右肘 |
IO11 | サーボ 右方 |
IO12 | サーボ 首 |
IO13 | サーボ 腰 |
またArduino同様、loop()がメインループ関数。ここでは専らAndroid端末から送られてくるコマンドをシリアルポートで受信して、コマンドを実行する。コマンド実行の関数がexecute_command()。昨日のブログに書いたコマンド仕様に従ってコマンドを解釈して、ラジコンサーボおよびステッピングモータを制御する。
ラジコンサーボの角度指令は、Servoクラスのwriteメソッドを使用する。引数は角度(0〜180)。また、ステッピングモータの制御には後述のsteppers.cppに実装した関数を使用している。
(2) steppers.cpp / steppers.h
ステッピングモータの制御をおこなう。GR-SAKURAのライブラリにもStepperクラスというのがあるが、同期待ちな仕様なので、マルチタスク化でもしない限り実用的でない。stepメソッドは指定したステップ数だけ回転し終わるまで処理が戻ってこないのだ。
このsteppers.cppが提供する関数は下記のとおり。
steppers_init | I/Oピンの指定とタイマ処理の初期化 |
steppers_forward | 速度を指定して車輪を前進させる |
steppers_backward | 速度を指定して車輪を後退させる |
steppers_turnRight | 速度を指定して車輪を右回転させる |
steppers_turnLeft | 速度を指定して車輪を左回転させる |
steppers_stop | 車輪を停止させる |
steppers_enable | 車輪の制御を有効にする(通電する) |
steppers_disable | 車輪の制御を有効にする(通電しない) |
steppers_init()では、I/Oピンの設定のほか、特電HALのtimer_regist_userfunc()関数を利用して、1ms周期のタイマハンドラsteppers_callback()を登録する。steppers_callback()関数では、時間をカウントして左右のステッピングモータのクロック信号を出力する。
(3) common.cpp / common.h
コマンド解釈のための、文字列→数値変換の関数を定義。まあ、説明の必要もないだろう。