Garmin Connect IQ SDK プログラミング(第2回):プロジェクト作成とデバッグ 自転車けんちゃん

大学サークルで自転車に魅せられて30年以上たちました。 いまだにロングライドと言えば日の出から日の入りまで 走っています。

ホーム > Garmin Connect IQ プログラミング > Garmin Connect IQ SDK プログラミング(第2回):プロジェクト作成とデバッグ

Garmin Connect IQ SDK プログラミング(第2回):プロジェクト作成とデバッグ

プロジェクトを作ってデバッグしてみましょう

Connect IQで使用する言語はJavaのようなVM上で動作するオブジェクト指向言語です。プロジェクトの作成はCやJavaの場合とほとんど同じ。特に難しいところはありません。

デバッグは・・・デバッガーがありません!
”将来のバージョンでは” trap(); を埋め込んでおくと
デバッガーが起動するそうです。
おいおい

ということはまるでカーネルのように print() でデバッグです。
ブレークポイントも無ければ、
オブジェクトの中身の表示も出来ない、
SystemClassの定義も見れない。

諸君がMonkey Cを身に付けた
瞬間から すでにバトルは
始まっているのである
  by SUIKEN-METAL

いさぎよすぎ!ハードル高っ!

気を取り直してはじめてみましょう。

1.プロジェクトの作成

Ecripseのメニューからプロジェクトを作ってみましょう。
  • File⇒New⇒Project


  • Connect IQ Project選択⇒Nextクリック


  • Project name "DataField"⇒Nextクリック


  • Project Type "Data Field" ⇒ "Edge 520"をチェック⇒Nextクリック


  • プロジェクトテンプレート"Simple"を選択⇒Nextクリック


  • languages "English"を選択⇒Finishクリック


  • Connect IQ perspectiveのダイアログで”Yes"を選択



2.ソースの修正

Data Fieldプロジェクトが出来ました。


sourceフォルダに.mcのMonkey Cソースコードが2種類あります。
  • xxApp.mc:アプリケーションの入り口
  • xxView.mc:データ表示クラス

それぞれのファイルに下のコードをコピーペーストして完成させます。

DataFiledApp.mc
//経過時間を表示するData Fieldアプリケーション

//Systemにはprintlnなど汎用的に使用するクラスが定義されている
//SystemクラスのエイリアスをSysに設定
using Toybox.System as Sys;
//Applicationにはアプリケーションの入り口 AppBaseが定義されている
//ApplicationクラスのエイリアスをAppに設定
using Toybox.Application as App;

//スーパークラスAppBaseを拡張してDataFieldAppクラスを定義
//データフィールドアプリケーションの入り口
class DataFieldApp extends App.AppBase {

    // コンストラクタ(初期化関数)
    function initialize() {	//functionはJavaのメソッドに相当
        //スーパークラスのコンストラクタ呼び出し
        AppBase.initialize();
        Sys.println("App : initialize");//printlnはJavaと同じ
    }

    // onStart() は アプリケーションのスタート時にCallされる
    function onStart(state) {
        Sys.println("App : onStart");
    }

    // onStop() はアプリケーションの終了時にCallされる
    function onStop(state) {
        Sys.println("App : onStop");
    }

    // データフィールド表示アプリケーションの
    //オブジェクト生成してReturnする
    function getInitialView() {
        Sys.println("App : getInitialView");
        // ProjDataFieldView()のオブジェクト生成と初期化
        // newでコンストラクタが呼び出される
        return [ new DataFieldView() ];
    }
}


DataFieldView.mc
//経過時間を表示するData Fieldアプリケーションの表示クラス

//Systemにはprintlnなど汎用的に使用するクラスが定義されている
//SystemクラスのエイリアスをSysに設定
using Toybox.System as Sys;
//WatchUiにはデータ表示クラスDataFieldViewが定義されている
//WatchUiクラスのエイリアスをUiに設定
using Toybox.WatchUi as Ui;

//スーパークラスSimpleDataFieldを拡張してDataFieldViewクラスを定義
//データ表示を行うクラス
class DataFieldView extends Ui.SimpleDataField {
    //マイル⇒メートル換算用定数
    const METERS_TO_MILES = 0.000621371;
    //ミリ秒⇒秒換算用定数
    const MILLISECONDS_TO_SECONDS = 0.001;

    // コンストラクタ(初期化関数)
    function initialize() {
        Sys.println("View : initialize");
        SimpleDataField.initialize();
        // データフィールドのラベル(画面に表示される)
        //labelの定義はinitializedeでのみ有効
        label = "Time";
    }

    // 約1秒間隔で呼び出される関数
    //infoオブジェクトには実行中ワークアウトの値
    //(経過時間、心拍、スピードなどなど)が含まれる
    //returnで表示したい値を返す
    function compute(info) {
        Sys.println("View : compute");
        // infoから経過時間(msec)を取り出して秒に変換
        // varは変数の定義。変数の型は自動で認識される。
        var value_elapsedTime =
            info.elapsedTime * MILLISECONDS_TO_SECONDS;
        // 経過時間をリターンして表示させる
        return value_elapsedTime;
    }
}


3.シミュレータでソフトウエアを実行

実機での実行はConnect IQ Storeにアップロードが必要です。
アップロードの仕方はまた後日。
まずはシミュレータでデバッグします。

ブレークポイントやステップ実行は無いので
コンソールにprintlnでテキストを出力してデバッグします。
  • DataFieldプロジェクト右クリック⇒Run As⇒Run Configurations⇒


  • Connect IQ Appをダブルクリック⇒New_configurationが生成される


  • New_configurationを選択⇒Choose Project "DataField"⇒
  • Target Device "Edge 520"⇒Applyクリック⇒Runクリック



Consoleにprintlnで指定したメッセージが表示されます。


ConnectIQ Device SimulatorにはEdge 520の画面が表示されています。
start/stopボタンをマウスでクリックするとタイマーがスタートします。
表示間隔は”約”1秒です。正確な1秒ではないので端数が出ます。


シミュレーションを停止するときは
Simulatorの右上の"x"をクリックして
Windowをクローズするとシミュレーションが終わります。

実行できたでしょうか。
functionにLogメッセージを埋め込むと
どのような順番で実行しているか分かります。

DataFieldの場合は単純に表示クラスを
一定間隔で呼び出しているだけです。
簡単ですね。アプリが作成できそうですね。
コメントの投稿













管理者にだけ表示を許可する
プロフィール

けんちゃん

Author:けんちゃん
東京在住、和歌山生まれ
自称、和田峠ニスト
中華カーボンと手組みホイールでシクロクロス参戦中