16: 2011-08-03 (水) 16:49:27 takaboo ソース 17: 2011-08-03 (水) 19:31:25 takaboo ソース
Line 404: Line 404:
-''UD3ライブラリ''~ -''UD3ライブラリ''~
UD3ライブラリはToppersを採用することで、2チャンネルあるモータドライバを全く違う目的で各々個別のタスクで動かしたり、ホストPCとDynamixelプロトコルで通信を行うタスクを走らせながらシステムを運用といった機能を提供。~ UD3ライブラリはToppersを採用することで、2チャンネルあるモータドライバを全く違う目的で各々個別のタスクで動かしたり、ホストPCとDynamixelプロトコルで通信を行うタスクを走らせながらシステムを運用といった機能を提供。~
-実際にはToppersのそれを意識する必要はほとんどない。 +実際にはToppersのそれを意識する必要はほとんどない。~ 
- +使用できるAPIは膨大なため、別途[[こちら>UD3LIB]]のページにて詳細を公開。
-**UD3 API [#c8cb0041] +
-ユーザ自らMPUのペリフェラルへ直接アクセスするコーディングをする訳ではなく、GCC Developer Liteが提供するUD3専用ライブラリを介してUD3の機能へアクセスする事になります。+
-APIを使用する前に、ソースプログラムの先頭に ud3.h をインクルードしてください。 +
- #include <ud3.h> +
- +
-本APIを使用したアプリケーションはシステムとして1つのタスクが静的に常時占有されます。このタスクは主にDynamixelプロトコルによる通信処理等に使用されますが、通信が発生しない限り軽微な負荷で動作しています。 +
- +
-APIの詳細は以下に列挙しますが、GCC Developer Lite Version2.4.0.13以降に収録されたUD3ライブラリを前提として記述されていますので、それより古いバージョンでは対応しないAPIが存在します。ご注意ください。 +
- +
-***システム及びタスク関連 [#aacb0ce6] +
-OSで管理されるタスクや時間に関するサブルーチンです。~ +
-ユーザは任意のタスクを最大4つまで作成可能で、自動的にマルチタスクで動作する設定になっています。システムで予約されたタスク(TASK5)は自動的に登録されますが、意図的に停止させてしまうと全APIが正常に動作しなくなりますので絶対に停止させないでください。 +
- +
-****main [#v3c21b98] +
-メインタスクに相当し、一番最初に実行される初期化関数。タスクの起動やGPIOの初期化等はこの関数内で記述する。~ +
-なお本タスクは優先度が最上位にあるため、並列で他のタスクを実行する際はUD3_WAIT等を挿入して意図的にタスクスイッチを促すべきである。 +
- int main (void); +
--パラメータ +
-~なし +
--戻り値 +
-~int +
--使用例 +
- #include <ud3.h> +
- +
- int main (void) +
- { +
-   // 動作環境設定 +
-   // GPIO8/9/10をPWMキャプチャモードに設定 +
-   UD3_CFG_GPIO8 (GPIO_PWM_CAP_PULLUP_OFF); +
-   UD3_CFG_GPIO9 (GPIO_PWM_CAP_PULLUP_OFF); +
-   UD3_CFG_GPIO10 (GPIO_PWM_CAP_PULLUP_OFF); +
-   // モータの設定 +
-   UD3_SET_M1DRIVEMODE (_UD_MOTOR_DRIVE); +
-   UD3_SET_M2DRIVEMODE (_UD_MOTOR_DRIVE); +
-   UD3_SET_DUTY(500, -500); +
-   // 使用タスクを起動 +
-   UD3_ACTIVE_TASK (1); +
-   UD3_ACTIVE_TASK (2); +
- } +
- +
-****UD3_TASK1 [#n10e53c9] +
-UD3は最大4つのユーザ定義タスクを同時に実行出来るが、UD3_TASK1の名称で作られた関数は自動的にタスク1としてOSに登録される。~ +
-タスクの活性化は[[UD3_ACTIVE_TASK>#f9cdcf0a]]で行う。~ +
-複数のタスクを定義し活性化すると各々のタスクはOSによって並列実行されるが、タスク数に乗じてタスク自体の実行速度は遅くなる。 +
- +
- UD3_TASK1() +
--パラメータ +
-~なし +
--戻り値 +
-~なし +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK1 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- int main (void) { +
-   UD3_ACTIVE_TASK (1);  // タスク1をアクティブ化 +
- } +
- +
-****UD3_TASK2 [#xb6d65de] +
-UD3は最大4つのユーザ定義タスクを同時に実行出来るが、UD3_TASK2の名称で作られた関数は自動的にタスク2としてOSに登録される。~ +
-タスクの活性化はタスクの活性化は[[UD3_ACTIVE_TASK>#f9cdcf0a]]で行う。~ +
-で行う。~ +
-複数のタスクを定義し活性化すると各々のタスクはOSによって並列実行されるが、タスク数に乗じてタスク自体の実行速度は遅くなる。 +
- +
- UD3_TASK2(); +
--パラメータ +
-~なし +
--戻り値 +
-~なし +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK2 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- int main (void) { +
-   UD3_ACTIVE_TASK (2);  // タスク2をアクティブ化 +
- } +
- +
-****UD3_TASK3 [#e13da6de] +
-UD3は最大4つのユーザ定義タスクを同時に実行出来るが、UD3_TASK3の名称で作られた関数は自動的にタスク3としてOSに登録される。~ +
-タスクの活性化は[[UD3_ACTIVE_TASK>#f9cdcf0a]]で行う。~ +
-複数のタスクを定義し活性化すると各々のタスクはOSによって並列実行されるが、タスク数に乗じてタスク自体の実行速度は遅くなる。 +
- +
- UD3_TASK3(); +
--パラメータ +
-~なし +
--戻り値 +
-~なし +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK3 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- int main (void) { +
-   UD3_ACTIVE_TASK (3);  // タスク3をアクティブ化 +
- } +
- +
-****UD3_TASK4 [#w06ef286] +
-UD3は最大4つのユーザ定義タスクを同時に実行出来るが、UD3_TASK4の名称で作られた関数は自動的にタスク4としてOSに登録される。~ +
-タスクの活性化は[[UD3_ACTIVE_TASK>#f9cdcf0a]]で行う。~ +
-複数のタスクを定義し活性化すると各々のタスクはOSによって並列実行されるが、タスク数に乗じてタスク自体の実行速度は遅くなる。 +
- +
- UD3_TASK4(); +
--パラメータ +
-~なし +
--戻り値 +
-~なし +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK4 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- int main (void) { +
-   UD3_ACTIVE_TASK (4);  // タスク4をアクティブ化 +
- } +
- +
-****UD3_ACTIVE_TASK [#f9cdcf0a] +
-指定したタスクをアクティブにする。タスクをアクティブにしていない場合には、タスクを定義してあってもそのタスクは実行されない。 +
- +
- void UD3_ACTIVE_TASK (task); +
--パラメータ +
---int_t '''task''' +
-~タスク番号。指定出来るタスク番号は1~4。 +
--戻り値 +
-~なし +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK1 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- int main (void) { +
-   UD3_ACTIVE_TASK (1);  // タスク1をアクティブ化 +
- } +
- +
-****UD3_SUSPEND_TASK [#j900e682] +
-指定したアクティブなタスクをサスペンドする。レジュームするには[[UD3_RESUME_TASK>#l31e0f36]]を使用する。 +
- +
- int UD3_SUSPEND_TASK (char task); +
--パラメータ +
---char  '''task''' +
-~タスク番号。指定出来るタスク番号は1~4。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK1 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- int main (void) { +
-   UD3_ACTIVE_TASK (1);  // タスク1をアクティブ化 +
- } +
- +
-****UD3_RESUME_TASK [#l31e0f36] +
-指定したサスペンドしているタスクをレジュームする。サスペンドするには[[UD3_SUSPEND_TASK>#j900e682]]を使用する。 +
- +
- int UD3_RESUME_TASK (char task); +
--パラメータ +
---char  '''task''' +
-~タスク番号。指定出来るタスク番号は1~4。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK1 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- int main (void) { +
-   UD3_ACTIVE_TASK (1);  // タスク1をアクティブ化 +
- } +
- +
-****UD3_WAIT [#ja9bd39f] +
-ミリ秒単位でプログラムの実行を待つ。 +
- void UD3_WAIT (int_t tm); +
--パラメータ +
---int_t '''tm''' +
-~待ち時間(msec)を指定。 +
--戻り値 +
-~なし +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK1 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- int main (void) { +
-   UD3_ACTIVE_TASK (1); +
- } +
- +
-****UD3_GET_ELAPSEDTIME [#lf9e26fd] +
-アプリケーション起動時からの経過時間をミリ秒単位で取得。 +
- uint32_t UD3_GET_ELAPSEDTIME (void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint32_t 経過時間 +
--使用例 +
- // 経過時間を取得します。 +
- uint32_t tm = UD3_GET_ELAPSEDTIME (); +
- +
-****UD3_SET_DXPACKETMODE (obsolete) [#y7012ac0] +
- +
-****UD3_SET_DXPACKETENABLE (obsolete) [#pd1e307a] +
- +
-****UD3_GET_BTCONNECT [#odf822c9] +
-Bluetoothの接続状態を取得する。なお、接続相手の強制的な電源断等が発生した場合は、状態の繊維に数秒の時間を要する場合がある。 +
- bool UD3_GET_BTCONNECT (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool  Bluetoothの接続状態 +
-~true :接続中~ +
-false :切断中 +
--使用例 +
- bool stat = UD3_GET_BTCONNECT(); +
- +
-***GPIO関連 [#u6745dd8] +
-GPIO0~11の初期設定や状態の取得サブルーチン関連です。 +
- +
-****UD3_CFG_GPIO0 [#c10e9d62] +
-GPIO0の端子機能を設定する。 +
- int UD3_CFG_GPIO0 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~0: GPIO_IN_PULLUP_OFF (入力かつ内蔵プルアップOFF)~ +
-1: GPIO_IN_PULLUP_ON (入力かつ内蔵プルアップON)~ +
-2: GPIO_ADC (アナログ入力)~ +
-3: GPIO_OUT_OPENDRAIN (オープンドレイン出力)~ +
-4: GPIO_OUT_PUSHPULL (プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- int main (void) { +
- { +
-   // ADC +
-   UD3_CFG_GPIO0 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO1 [#y4f5f690] +
-GPIO1の端子機能を設定する。 +
- int UD3_CFG_GPIO1 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~0: GPIO_IN_PULLUP_OFF (入力かつ内蔵プルアップOFF)~ +
-1: GPIO_IN_PULLUP_ON (入力かつ内蔵プルアップON)~ +
-2: GPIO_ADC (アナログ入力)~ +
-3: GPIO_OUT_OPENDRAIN (オープンドレイン出力)~ +
-4: GPIO_OUT_PUSHPULL (プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- int main (void) { +
- { +
-   // ADC +
-   UD3_CFG_GPIO1 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO2 [#l7586e65] +
-GPIO2の端子機能を設定する。 +
- int UD3_CFG_GPIO2 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~0: GPIO_IN_PULLUP_OFF (入力かつ内蔵プルアップOFF)~ +
-1: GPIO_IN_PULLUP_ON (入力かつ内蔵プルアップON)~ +
-2: GPIO_ADC (アナログ入力)~ +
-3: GPIO_OUT_OPENDRAIN (オープンドレイン出力)~ +
-4: GPIO_OUT_PUSHPULL (プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- int main (void) { +
- { +
-   // ADC +
-   UD3_CFG_GPIO2 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO3 [#a02184b5] +
-GPIO3の端子機能を設定する。 +
- int UD3_CFG_GPIO3 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~0: GPIO_IN_PULLUP_OFF (入力かつ内蔵プルアップOFF)~ +
-1: GPIO_IN_PULLUP_ON (入力かつ内蔵プルアップON)~ +
-2: GPIO_ADC (アナログ入力)~ +
-3: GPIO_OUT_OPENDRAIN (オープンドレイン出力)~ +
-4: GPIO_OUT_PUSHPULL (プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- int main (void) { +
- { +
-   // ADC +
-   UD3_CFG_GPIO3 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO4 [#l791e053] +
-GPIO4の端子機能を設定する。 +
- int UD3_CFG_GPIO4 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~0: GPIO_IN_PULLUP_OFF (入力かつ内蔵プルアップOFF)~ +
-1: GPIO_IN_PULLUP_ON (入力かつ内蔵プルアップON)~ +
-2: GPIO_ADC (アナログ入力)~ +
-3: GPIO_OUT_OPENDRAIN (オープンドレイン出力)~ +
-4: GPIO_OUT_PUSHPULL (プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- int main (void) { +
- { +
-   // ADC +
-   UD3_CFG_GPIO4 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO5 [#ad4fd1e3] +
-GPIO5の端子機能を設定する。 +
- int UD3_CFG_GPIO5 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~0: GPIO_IN_PULLUP_OFF (入力かつ内蔵プルアップOFF)~ +
-1: GPIO_IN_PULLUP_ON (入力かつ内蔵プルアップON)~ +
-2: GPIO_ADC (アナログ入力)~ +
-3: GPIO_OUT_OPENDRAIN (オープンドレイン出力)~ +
-4: GPIO_OUT_PUSHPULL (プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- int main (void) { +
- { +
-   // ADC +
-   UD3_CFG_GPIO5 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO6 [#x95d33cb] +
-GPIO6の端子機能を設定する。 +
- int UD3_CFG_GPIO6 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~0: GPIO_IN_PULLUP_OFF (入力かつ内蔵プルアップOFF)~ +
-1: GPIO_IN_PULLUP_ON (入力かつ内蔵プルアップON)~ +
-2: GPIO_ADC (アナログ入力)~ +
-3: GPIO_OUT_OPENDRAIN (オープンドレイン出力)~ +
-4: GPIO_OUT_PUSHPULL (プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- int main (void) { +
- { +
-   // ADC +
-   UD3_CFG_GPIO6 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO7 [#c82b29f3] +
-GPIO7の端子機能を設定する。 +
- int UD3_CFG_GPIO7 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~0: GPIO_IN_PULLUP_OFF (入力かつ内蔵プルアップOFF)~ +
-1: GPIO_IN_PULLUP_ON (入力かつ内蔵プルアップON)~ +
-2: GPIO_ADC (アナログ入力)~ +
-3: GPIO_OUT_OPENDRAIN (オープンドレイン出力)~ +
-4: GPIO_OUT_PUSHPULL (プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- int main (void) { +
- { +
-   // ADC +
-   UD3_CFG_GPIO7 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO8 (update)[#n31eda6b] +
-GPIO8の端子機能を設定する。 +
- int UD3_CFG_GPIO8 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~GPIO端子の動作内容を設定。以下のリストから一つだけ選択出来る。なお、GPIO_ADC(2:アナログ入力)は設定出来ない。 +
-~0: GPIO_IN_PULLUP_OFF (入力かつ内蔵プルアップOFF)~ +
-1: GPIO_IN_PULLUP_ON (入力かつ内蔵プルアップON)~ +
-2: 指定不可~ +
-3: GPIO_OUT_OPENDRAIN (オープンドレイン出力)~ +
-4: GPIO_OUT_PUSHPULL (プッシュプル出力)~ +
-5: GPIO_PWM_CAP_PULLUP_OFF (パルス幅計測用入力かつプルアップOFF)~ +
-6: GPIO_PWM_CAP_PULLUP_ON (パルス幅計測用入力かつプルアップON)~ +
-7: GPIO_PWM (PWM出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場に-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- int main (void) { +
-   // PWMキャプチャモードでプルアップOFFに設定 +
-   UD3_CFG_GPIO8 (GPIO_PWM_CAP_PULLUP_OFF); +
- } +
- +
-****UD3_CFG_GPIO9 (update)[#u201f4af] +
-GPIO9の端子機能を設定する。 +
- int UD3_CFG_GPIO9 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~GPIO端子の動作内容を設定。以下のリストから一つだけ選択出来る。なお、GPIO_ADC(2:アナログ入力)は設定出来ない。 +
-~0: GPIO_IN_PULLUP_OFF (入力かつ内蔵プルアップOFF)~ +
-1: GPIO_IN_PULLUP_ON (入力かつ内蔵プルアップON)~ +
-2: 指定不可~ +
-3: GPIO_OUT_OPENDRAIN (オープンドレイン出力)~ +
-4: GPIO_OUT_PUSHPULL (プッシュプル出力)~ +
-5: GPIO_PWM_CAP_PULLUP_OFF (パルス幅計測用入力かつプルアップOFF)~ +
-6: GPIO_PWM_CAP_PULLUP_ON (パルス幅計測用入力かつプルアップON)~ +
-7: GPIO_PWM (PWM出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場に-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- int main (void) { +
-   // パルス幅計測モードに設定 +
-   UD3_CFG_GPIO9 (GPIO_PWM_CAP_PULLUP_OFF); +
- } +
- +
-****UD3_CFG_GPIO10 (update)[#d2dd2f39] +
-GPIO10の端子機能を設定する。 +
- int UD3_CFG_GPIO10 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~GPIO端子の動作内容を設定。以下のリストから一つだけ選択出来る。なお、GPIO_ADC(2:アナログ入力)は設定出来ない。 +
-~0: GPIO_IN_PULLUP_OFF (入力かつ内蔵プルアップOFF)~ +
-1: GPIO_IN_PULLUP_ON (入力かつ内蔵プルアップON)~ +
-2: 指定不可~ +
-3: GPIO_OUT_OPENDRAIN (オープンドレイン出力)~ +
-4: GPIO_OUT_PUSHPULL (プッシュプル出力)~ +
-5: GPIO_PWM_CAP_PULLUP_OFF (パルス幅計測用入力かつプルアップOFF)~ +
-6: GPIO_PWM_CAP_PULLUP_ON (パルス幅計測用入力かつプルアップON)~ +
-7: GPIO_PWM (PWM出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場に-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- int main (void) { +
-   // パルス幅計測モードに設定 +
-   UD3_CFG_GPIO10 (GPIO_PWM_CAP_PULLUP_OFF); +
- } +
- +
-****UD3_GET_GPIOINPUT [#qdba2bbc] +
-GPIOの端子状態を取得。入力に使用するGPIOをUD3_CFG_GPIOxで設定する必要がある。 +
- uint16_t UD3_GET_GPIOINPUT (void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t GPIOの入力値~ +
-戻り値の各ビットは以下のGPIOポートに割り当てられる。 +
-|=BIT|=15|=14|=13|=12|=11|=10|= 9|=8|=7|=6|=5|=4|=3|=2|=1|=0| +
-|=GPIO|=- |=- |=- |=- |=- |=10  |=9  |=8  |=7  |=6  |=5  |=4  |=3  |=2  |=1  |=0  | +
--使用例 +
- // GPIOの入力値 +
- uint16_t input = UD3_GET_GPIOINPUT (); +
- +
-****UD3_SET_GPIOOUTPUT [#sb36fb83] +
-UD3_CFG_GPIOxにてGPIO_OUT_OPENDRAINないしGPIO_OUT_PUSHPULLに設定された端子のみ出力状態を変更する。 +
- int UD3_SET_GPIOOUTPUT (uint16_t out); +
--パラメータ +
-~uint16_t '''out''' +
-~出力データを設定。outの各ビットとGPIOの出力ポートは以下に割り当てられる。 +
-|=out BIT|=15|=14|=13|=12|=11|=10|= 9|=8|=7|=6|=5|=4|=3|=2|=1|=0| +
-|=GPIO|=- |=- |=- |=- |=- |=10  |=9  |=8  |=7  |=6  |=5  |=4  |=3  |=2  |=1  |=0  | +
-~デフォルトは0。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- UD3_CFG_GPIO0(GPIO_OUT_PUSHPULL); // GPIO0を出力に +
- UD3_CFG_GPIO1(GPIO_OUT_PUSHPULL); // GPIO1を出力に +
- UD3_CFG_GPIO2(GPIO_OUT_PUSHPULL); // GPIO2を出力に +
- +
- UD3_SET_GPIOOUTPUT (0x01); // GPIO0のみにHighを出力 +
- UD3_SET_GPIOOUTPUT (0x02); // GPIO1のみにHighを出力 +
- UD3_SET_GPIOOUTPUT (0x04); // GPIO2のみにHighを出力 +
- UD3_SET_GPIOOUTPUT (0x07); // GPIO0~2にHighを出力 +
- UD3_SET_GPIOOUTPUT (0x00); // GPIO0~2にLowを出力 +
- +
-****UD3_GET_ADC [#f0162d6a] +
-GPIO0~7に入力された電圧値を取得する。~ +
-ADCに使用するGPIOをUD3_CFG_GPIOxで設定する必要がある。 +
- uint16_t UD3_GET_ADC (uint8_t ch); +
--パラメータ +
---uint8_t '''ch''' +
-~0~7(GPIO0~GPIO8)のチャネル番号 +
--戻り値 +
-~uint16_t 指定したチャネルの0(0V)~1023(3.3V)のアナログ値 +
--使用例 +
- // GPIO0に入力された電圧を取得します。 +
- adc = UD3_GET_ADC (0); +
- +
-***MMI関連 [#e45522b5] +
-プッシュボタン・ディップスイッチ・LED・ブザー関連のサブルーチンです。 +
- +
-****UD3_SET_BUZZER [#y8fc67a7] +
-任意周波数・音長でブザーを鳴らす。 +
- int UD3_SET_BUZZER (uint8_t scale, uint8_t len); +
--パラメータ +
---uint8_t '''scale''' +
-~音程を0~52の範囲で設定。 +
---uint8_t '''len''' +
-~音長を0~250(x10ms)の範囲で設定。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- UD3_SET_BUZZER (24, 20); +
- UD3_WAIT (300); +
- UD3_SET_BUZZER (30, 20); +
- +
-****UD3_SET_LED [#q6f1d21e] +
-LEDの点灯/消灯。~ +
- int UD3_SET_LED (uint8_t on); +
--パラメータ +
---uint8_t '''on''' +
-~0: 消灯~ +
-1: 点灯 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // LEDを点滅させます。 +
- while (1) { +
-   UD3_SET_LED (1); +
-   UD3_WAIT (200); +
-   UD3_SET_LED (0); +
-   UD3_WAIT (200); +
- } +
- +
-****UD3_GET_PUSHBUTTON1 [#xe62248e] +
-PB1の状態を取得。 +
- bool UD3_GET_PUSHBUTTON1 (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool PB1の状態 +
-~true :押されている~ +
-false :放されている +
--使用例 +
- // PB1が押されている場合にLEDを点灯させます。 +
- UD3_SET_LED (UD3_GET_PUSHBUTTON1 ()); +
- +
-****UD3_GET_PUSHBUTTON2 [#t4c165bb] +
-PB2の状態を取得。 +
- bool UD3_GET_PUSHBUTTON2 (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool PB2の状態 +
-~true :押されている~ +
-false :放されている +
--使用例 +
- // PB2が押されている場合にLEDを点灯させます。 +
- UD3_SET_LED (UD3_GET_PUSHBUTTON2 ()); +
- +
-****UD3_GET_DIPSWICH [#o08f8c1c] +
-DIP1の状態を取得。 +
- uint8_t UD3_GET_DIPSWICH (void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t DIP1に設定された値(0x00~0x0f) +
--使用例 +
- // DIP1の状態を取得します。 +
- uint8_t sw = UD3_GET_DIPSWICH (); +
- +
-***モータアンプ関連 [#u7a23908] +
-2つのモータドライバの初期設定やデューティー関連のサブルーチンです。 +
- +
-なお、設定デューティ値と出力の相関は以下の図に従い、Duty limit(API上用意されず常時1000‰)とRecharge bandにより制限された水色の出力となります。なお、Recharge bandは全てにおいて優先されます。 +
- +
-#ref(ud3_motor_limit1.png,100%) +
-#ref(ud3_motor_limit2.png,100%) +
- +
-****UD3_SET_M1FREQUENCY [#wc47b8e1] +
-M1のPWM周波数を設定。~ +
- int UD3_SET_M1FREQUENCY (uint8_t freq); +
--パラメータ +
---uint8_t '''freq''' +
-~周波数を0~200[kHz]で指定。~ +
-なお周波数が高くなると最終段での出力が得られにくくなるため、最大でも100kHz程度にとどめることを推奨する。 +
-~デフォルトは50kHz +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // M1の周波数を100kHzに設定 +
- UD3_SET_M1FREQUENCY (100); +
- +
-****UD3_SET_M1RECHARGE [#n8f06456] +
-駆動方式の都合から100%のデューテーィ比で連続運転が出来ないため、100%で指令された場合の目減り分(Recharge band)の値。負荷やPWM周波数によって調整が必要なパラメータである。~ +
-調整の際はデューティー100%で運転を指令した状態で、本設定値を0から順に負荷の運転が安定するまで大きくして行く。最大でも20%以下で安定すると思われる。 +
- int UD3_SET_M1RECHARGE (uint8_t re); +
--パラメータ +
---uint8_t '''re''' +
-~0~100[%]を設定。100%-re が出力リミッタとして働く。 +
-~デフォルトは5% +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // M1の最大PWM制限幅を5%に設定します +
- UD3_SET_M1RECHARGE (5); +
- +
-****UD3_SET_M1DRIVEMODE [#a35c521d] +
-M1の駆動モードを設定する。 +
- UD3_SET_M1DRIVEMODE (mode); +
--パラメータ +
---uint8_t '''mode''' +
-~0: _UD_MOTOR_BRAKE (ブレーキモード)~ +
-1: _UD_MOTOR_DRIVE (ドライブモード) +
-~デフォルトは_UD_MOTOR_BRAKE。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // M1をドライブモードにします +
- UD3_SET_M1DRIVEMODE (_UD_MOTOR_DRIVE); +
- +
-****UD3_SET_M1PWMDUTY [#de09cbea] +
-M1のPWMデューティー比を設定する。~ +
- int UD3_SET_M1PWMDUTY (int16_t duty); +
--パラメータ +
---int16_t '''duty''' +
-~デューティーを-1000~0~1000[‰]で指定。マイナス値は逆転を意味する。~ +
-0‰の場合はショートブレーキとなる。 +
-~デフォルトは0‰。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
-±1000の範囲を越えて設定されている場合にも1が返されるが、リミッタで値はクリップされる。 +
--使用例 +
- // M1を20%のDUTYで動作させます。 +
- UD3_SET_M1PWMDUTY (200); +
- +
-****UD3_GET_M1PWMDUTY [#q5687f5b] +
-M1の設定済みPWMデューティー比を取得する。~ +
- int16_t UD3_GET_M1PWMDUTY (void); +
--パラメータ +
-~なし +
--戻り値 +
-~-1000~0~1000[‰]。 +
- +
-****UD3_SET_M2FREQUENCY [#jf15fafa] +
-M2のPWM周波数を設定。~ +
- int UD3_SET_M2FREQUENCY (uint8_t freq); +
--パラメータ +
---uint8_t '''freq''' +
-~周波数を0~200[kHz]で指定。~ +
-なお周波数が高くなると最終段での出力が得られにくくなるため、最大でも100kHz程度にとどめることを推奨する。 +
-~デフォルトは50kHz +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // M2の周波数を100kHzに設定 +
- UD3_SET_M2FREQUENCY (100); +
- +
-****UD3_SET_M2RECHARGE [#q3ed4f2c] +
-駆動方式の都合から100%のデューテーィ比で連続運転が出来ないため、100%で指令された場合の目減り分(Recharge band)の値。負荷やPWM周波数によって調整が必要なパラメータである。~ +
-調整の際はデューティー100%で運転を指令した状態で、本設定値を0から順に負荷の運転が安定するまで大きくして行く。最大でも20%以下で安定すると思われる。 +
- int UD3_SET_M2RECHARGE (uint8_t re); +
--パラメータ +
---uint8_t '''re''' +
-~0~100[%]を設定。100%-re が出力リミッタとして働く。 +
-~デフォルトは5%。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // M2の最大PWM制限幅を5%に設定します +
- UD3_SET_M2RECHARGE (5); +
- +
-****UD3_SET_M2DRIVEMODE [#k9ab964c] +
-M2の駆動モードを設定する。 +
- UD3_SET_M2DRIVEMODE (mode); +
--パラメータ +
---uint8_t '''mode''' +
-~0: _UD_MOTOR_BRAKE (ブレーキモード)~ +
-1: _UD_MOTOR_DRIVE (ドライブモード) +
-~デフォルトは_UD_MOTOR_BRAKE。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // M2をドライブモードにします +
- UD3_SET_M2DRIVEMODE (_UD_MOTOR_DRIVE); +
- +
-****UD3_SET_M2PWMDUTY [#k2c1cab9] +
-M2のPWMデューティー比を設定する。~ +
- int UD3_SET_M2PWMDUTY (int16_t duty); +
--パラメータ +
---int16_t '''duty''' +
-~デューティーを-1000~0~1000[‰]で指定。マイナス値は逆転を意味する。~ +
-0‰の場合はショートブレーキとなる。 +
-~デフォルトは0‰。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
-±1000の範囲を越えて設定されている場合にも1が返されるが、リミッタで値はクリップされる。 +
--使用例 +
- // M2を20%のDUTYで動作させます。 +
- UD3_SET_M2PWMDUTY (200); +
- +
-****UD3_GET_M2PWMDUTY [#hed95d65] +
-M2の設定済みPWMデューティー比を取得する。~ +
- int16_t UD3_GET_M2PWMDUTY (void); +
--パラメータ +
-~なし +
--戻り値 +
-~-1000~0~1000[‰]。 +
- +
-****UD3_SET_MOTORREVRSE [#m604c98d] +
-M1/2の回転方向を反転させる。 +
- int UD3_SET_MOTORREVRSE (int8_t rev); +
--パラメータ +
---int8_t '''rev''' +
-以下のビットで各々反転を設定。 +
-~_M1_REV (0x1;M1反転)~ +
-_M2_REV (0x02:M2反転) +
-~デフォルトは0。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // 両モータの回転を逆転します。 +
- UD3_SET_MOTORREVRSE (_M1_REV | _M2_REV); +
- +
-****UD3_SET_MOTORENABLE [#x441e3d8] +
-モータの駆動ゲート回路を活性/不活性化する。~ +
-なお、CN3からの電源供給がなされていない状態で活性化するとゲートドライバに過大な負荷がかかり破損する可能性がある。必ず電源が供給されたことを確認した上で本APIで活性化させる手順を踏むこと。 +
- int UD3_SET_MOTORENABLE (int8_t enb); +
--パラメータ +
---int8_t '''enbv''' +
-~0でモータドライバの機能を不活性化しモータをフリー状態にする。1でモータドライバの機能を活性化し各パラメータに応じて出力がなされる。 +
-~デフォルトは0。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // モータ駆動回路を活性化する。 +
- UD3_SET_MOTORENABLE (1); +
- +
-****UD3_GET_MOTORENABLE [#t660991d] +
-モータの駆動ゲート回路の状態を取得する。 +
- bool UD3_GET_MOTORENABLE (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool  駆動ゲート回路の状態 +
-~true :ゲートON~ +
-false :ゲートOFF +
--使用例 +
- bool stat = UD3_GET_MOTORENABLE(); +
- +
-****UD3_SET_MOTORRAMP [#o63cc21d] +
-M1/M2共に指令デューティーに対して最終段は常時ランプ関数を介して出力がなされる。その際のミリ秒毎での増分を設定する。~ +
-指令値の急変に際し、モータや機構、電源への負荷を軽減する目的で使用する。 +
- int UD3_SET_MOTORRAMP (int8_t ramp); +
--パラメータ +
---int8_t '''ramp''' +
-~1ミリ秒あたりの増分を1~200‰の値で与える。~ +
-1を指定した場合、デューティー比を0‰の状態から1000‰へ変更すると1秒かけて0‰から1000‰へ直線的に変化する。また200を指定した場合、デューティー比を0‰の状態から1000‰へ変更すると5ミリ秒かけて0‰から1000‰へ直線的に変化する。 +
-~デフォルトは20。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // 1ミリ秒毎の勾配を10‰に設定 +
- UD3_SET_MOTORRAMP (10); +
- +
-****UD3_SET_DUTY [#u0bc4a8b] +
-M1とM2へPWMデューティー比を同時に設定する。~ +
- int UD3_SET_DUTY (int16_t m1duty, int16_t m2duty); +
--パラメータ +
---int16_t '''m1duty''' +
-~M1用デューティーを-1000[‰]~0~1000[‰]で指定。~ +
---int16_t '''m2duty''' +
-~M2用デューティーを-1000[‰]~0~1000[‰]で指定。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
--使用例 +
- // M1を30%,M2を20%のDUTYで動作させます。 +
- UD3_SET_DUTY (300, 200); +
- +
-***GPIOパルス入出力関連 [#o25124f6] +
-****UD3_SET_PWM8CLOCK (update)[#g666594c] +
-PWM8のPWM出力及びPWM幅計測用ベースクロックを設定する。PWM出力及びPWM幅計測は本クロックを基準に最大16bitカウンタとして機能する。~ +
-GPIO8を[[UD3_CFG_GPIO8>#u201f4af]]でGPIO_PWMないしGPIO_PWM_CAP_PULLUP_OFFないしGPIO_PWM_CAP_PULLUP_ONに設定する必要がある。 +
- int UD3_SET_PWM8CLOCK (uint8_t clock); +
--パラメータ +
---uint8_t '''clock''' +
-~ベースクロックを0~4で選択。 +
-~0: _UD_PWM_CLOCK_24M  (24MHz)~ +
-1: _UD_PWM_CLOCK_6M    (6MHz)~ +
-2: _UD_PWM_CLOCK_1500K (1.5MHz)~ +
-3: _UD_PWM_CLOCK_375K  (375kHz)~ +
-4: _UD_PWM_CLOCK_46K  (46.875kHz) +
-~デフォルトは1(6MHz) +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // PWM8のベースクロック24Mに設定します。 +
- UD3_SET_PWM8CLOCK (_UD_PWM_CLOCK_24M); +
- +
-****UD3_SET_PWM8CYCLE [#pf67c2d8] +
-PWM8の周期を設定する。~ +
-GPIO8を[[UD3_CFG_GPIO8>#u201f4af]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM8CYCLE (uint16_t cycle); +
--パラメータ +
---uint16_t '''cycle''' +
-~周期を1~65535で設定。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
--使用例 +
- // PWM8の周期を設定します。 +
- UD3_SET_PWM8CYCLE (5000); +
- +
-****UD3_SET_PWM8DUTY [#s1513f14] +
-PWM8のDUTYを設定する。~ +
-GPIO8を[[UD3_CFG_GPIO8>#u201f4af]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM8DUTY (uint16_t duty); +
--パラメータ +
---uint16_t '''duty''' +
-~デューティーを0~65535で設定。PWMはDUTY/CYCLEの比で出力される。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
-CYCLEで設定された周期値を越えて設定されている場合に1が返され、CYCLE値でクリップされる。 +
--使用例 +
- // PWM8のDUTYを設定します。 +
- UD3_SET_PWM8DUTY (5000); +
- +
-****UD3_SET_PWM9CLOCK (update)[#ae26f679] +
-PWM9のPWM出力及びPWM幅計測用ベースクロックを設定する。PWM出力及びPWM幅計測は本クロックを基準に最大16bitカウンタとして機能する。~ +
-GPIO9を[[UD3_CFG_GPIO9>#u201f4af]]でGPIO_PWMないしGPIO_PWM_CAP_PULLUP_OFFないしGPIO_PWM_CAP_PULLUP_ONに設定する必要がある。 +
- int UD3_SET_PWM9CLOCK (uint8_t clock); +
--パラメータ +
---uint8_t '''clock''' +
-~ベースクロックを0~4で選択。 +
-~0: _UD_PWM_CLOCK_24M  (24MHz)~ +
-1: _UD_PWM_CLOCK_6M    (6MHz)~ +
-2: _UD_PWM_CLOCK_1500K (1.5MHz)~ +
-3: _UD_PWM_CLOCK_375K  (375kHz)~ +
-4: _UD_PWM_CLOCK_46K  (46.875kHz) +
-~デフォルトは1(6MHz) +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // PWM8のベースクロック24Mに設定します。 +
- UD3_SET_PWM9CLOCK (_UD_PWM_CLOCK_24M); +
- +
-****UD3_SET_PWM9CYCLE [#sae67585] +
-PWM9の周期を設定する。~ +
-GPIO9を[[UD3_CFG_GPIO9>#j90d8ac4]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM9CYCLE (uint16_t cycle); +
--パラメータ +
---uint16_t '''cycle''' +
-~周期を1~65535で設定。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
--使用例 +
- // PWM9の周期を設定します。 +
- UD3_SET_PWM9CYCLE (5000); +
- +
-****UD3_SET_PWM9DUTY [#pae41f19] +
-PWM9のDUTYを設定する。~ +
-GPIO9を[[UD3_CFG_GPIO9>#j90d8ac4]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM9DUTY (uint16_ duty); +
--パラメータ +
---uint16_t '''duty''' +
-~デューティーを0~65535で設定。PWMはDUTY/CYCLEの比で出力される。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
-CYCLEで設定された周期値を越えて設定されている場合に1が返され、CYCLE値でクリップされる。 +
--使用例 +
- // PWM9のDUTYを設定します。 +
- UD3_SET_PWM9DUTY (5000); +
- +
-****UD3_SET_PWM10CLOCK (update)[#cd6005d8] +
-PWM10のPWM出力及びPWM幅計測用ベースクロックを設定する。PWM出力及びPWM幅計測は本クロックを基準に最大16bitカウンタとして機能する。~ +
-GPIO10を[[UD3_CFG_GPIO10>#d2dd2f39]]でGPIO_PWMないしGPIO_PWM_CAP_PULLUP_OFFないしGPIO_PWM_CAP_PULLUP_ONに設定する必要がある。 +
- int UD3_SET_PWM10CLOCK (uint8_t clock); +
--パラメータ +
---uint8_t '''clock''' +
-~ベースクロックを0~4で選択。 +
-~0: _UD_PWM_CLOCK_24M  (24MHz)~ +
-1: _UD_PWM_CLOCK_6M    (6MHz)~ +
-2: _UD_PWM_CLOCK_1500K (1.5MHz)~ +
-3: _UD_PWM_CLOCK_375K  (375kHz)~ +
-4: _UD_PWM_CLOCK_46K  (46.875kHz) +
-~デフォルトは1(6MHz) +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // PWM10のベースクロック24Mに設定します。 +
- UD3_SET_PWM10CLOCK (_UD_PWM_CLOCK_24M); +
- +
-****UD3_SET_PWM10CYCLE [#nefca4e0] +
-PWM10の周期を設定する。~ +
-GPIO10を[[UD3_CFG_GPIO10>#d2dd2f39]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM10CYCLE (uint16_t cycle); +
--パラメータ +
---uint16_t '''cycle''' +
-~周期を1~65535で設定。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
--使用例 +
- // PWM10の周期を設定します。 +
- UD3_SET_PWM10CYCLE (5000); +
- +
-****UD3_SET_PWM10DUTY [#a36b0abc] +
-PWM10のDUTYを設定する。~ +
-GPIO10を[[UD3_CFG_GPIO10>#d2dd2f39]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM10DUTY (uint16_t duty); +
--パラメータ +
---uint16_t '''duty''' +
-~デューティーを0~65535で設定。PWMはDUTY/CYCLEの比で出力される。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
-CYCLEで設定された周期値を越えて設定されている場合に1が返され、CYCLE値でクリップされる。 +
--使用例 +
- // PWM10のDUTYを設定します。 +
- UD3_SET_PWM10DUTY (5000); +
- +
-****UD3_GET_PWM8DUTY [#td3856a0] +
-PWM8のキャプチャしたパルス幅を取得する。~ +
-GPIO8を[[UD3_CFG_GPIO8>#u201f4af]]でGPIO_PWM_CAP_PULLUP_OFFないしGPIO_PWM_CAP_PULLUP_ONに設定する必要がある。 +
- uint16_t UD3_GET_PWM8DUTY (void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t パルス幅 +
--使用例 +
- // PWM8のパルス幅を取得します。 +
- pulse = UD3_GET_PWM8DUTY (); +
- +
-****UD3_GET_PWM9DUTY [#x328a466] +
-PWM9のキャプチャしたパルス幅を取得する。~ +
-GPIO9を[[UD3_CFG_GPIO9>#j90d8ac4]]でGPIO_PWM_CAP_PULLUP_OFFないしGPIO_PWM_CAP_PULLUP_ONに設定する必要がある。 +
- uint16_t UD3_GET_PWM9DUTY (void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t パルス幅 +
--使用例 +
- // PWM9のパルス幅を取得します。 +
- pulse = UD3_GET_PWM9DUTY (); +
- +
-****UD3_GET_PWM10DUTY [#kf3fddcb] +
-PWM10のキャプチャしたパルス幅を取得する。~ +
-GPIO10を[[UD3_CFG_GPIO10>#d2dd2f39]]でGPIO_PWM_CAP_PULLUP_OFFないしGPIO_PWM_CAP_PULLUP_ONに設定する必要がある。 +
- uint16_t UD3_GET_PWM10DUTY (void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t パルス幅 +
--使用例 +
- // PWM10のパルス幅を取得します。 +
- pulse = UD3_GET_PWM10DUTY (); +
- +
-****UD3_MEASURE_STICKPOS [#w3c149c4] +
-ラジコン用プロポのスティック位置に不感帯を設けるための調整を行う。調整値は不揮発メモリに保存され、以後[[UD3_GET_RCPOS>#q1f997f7]]や[[UD3_RC_MOTOR>#rf1dfc65]]で内部的に使用される。~ +
-不感帯はスティックの中立及び最大・最少位置にそれぞれ設けられ、中立位置と最大・最少位置を正確に計測した後に反映される。スティックの位置と不感帯、デューティーとして指令される値の相関は以下の図に示す。~ +
-#ref(ud3_stick2duty.png,100%) +
-予め[[UD3_CFG_GPIO8>#u201f4af]],[[UD3_CFG_GP​IO9>#j90d8ac4]],[[UD3_CFG_GPIO10>#d2dd2f​39]]でGPIO_PWM_CAP_PULLUP_OFFないしGPIO_PWM_CAP_PULLUP_ONに設定する必要がある。 +
-~本APIが実行されると以下の手順で調整操作を行う。 +
-+UD3_MEASURE_STICKPOSがコールされるとピロリと音が鳴り、計測モードに遷移した事を知らせる。 +
-+プロポのスティックから手を離した状態(中立位置)にしたらPB1を押して放す。するとLED1が点滅し始め中立位置の計測が開始される。 +
-+中立位置を維持した状態で数秒が経過したら再度PB1を押してから放すと中立位置の計測が終了しLED1が消灯する。~ +
-+再度PB1を押して放すとLED1が点滅を始め、ブザーが鳴り始める。この間に諸々が正常であればプロポのスティックをそれぞれ上下ないし左右の端まで何度か移動させていると、ランダムだったブザーの音程がスティックの角度に連動して変化するようになる。~ +
-+スティックの角度に応じてなめらかに音階が変化するようになったらPB1を押して放すと上下限の計測が終了しLED1が消灯する。~ +
-+その後「明るいメロディー」が鳴ったら調整が成功した合図で、調整値が不揮発メモリに保存される。「暗いメロディー」が鳴ると失敗となるが、いずれの状態であっても調整処理は終了する。~ +
-なお、成否判定はGPIO8とGPIO9の入力信号のみを対象としている。 +
- +
- bool UD3_MEASURE_STICKPOS (uint8_t pos1, uint8_t pos2); +
--パラメータ +
---uint8_t '''pos1''' +
-~スティック中立時の不感帯幅を0~50[%]で設定。 +
---uint8_t '''pos2''' +
-~スティック両端時の不感帯幅を0~50[%]で設定。 +
--戻り値 +
-~bool +
-~true 調整が成功した場合に返される。~ +
-false 調整が失敗した場合に返される。 +
--使用例 +
- include <ud3.h> +
- +
- int main (void) { +
-   // GPIO8,9をパルス幅計測モードに +
-   UD3_CFG_GPIO8 (GPIO_PWM_CAP_PULLUP_OFF); +
-   UD3_CFG_GPIO9 (GPIO_PWM_CAP_PULLUP_OFF); +
-   // モータの駆動モード設定 +
-   UD3_SET_M1DRIVEMODE (_UD_MOTOR_DRIVE); +
-   UD3_SET_M2DRIVEMODE (_UD_MOTOR_DRIVE); +
- +
-   UD3_ACTIVE_TASK (1); +
- } +
- +
- UD3_TASK1 () { +
-   // プロポの調整 +
-   if (UD3_MEASURE_STICKPOS (10, 10)) { +
-     // モータ駆動許可 +
-     UD3_SET_MOTORENABLE (true); +
-     while (1) { +
-       // 調整値を元にモータを駆動 +
-       // M1にGPIO8、M2にGPIO9を割り当てている +
-       UD3_RC_MOTOR (0, 1); +
-     } +
-   } +
- } +
- +
-****UD3_GET_RCPOS [#q1f997f7] +
-指定したチャネルのラジコンプロポのスティックの値を取得する。~ +
-この取得した値は、[[UD3_MEASURE_STICKPOS>#w3c149c4]]で調整された値となる。~ +
-予め[[UD3_CFG_GPIO8>#u201f4af]],[[UD3_CFG_GP​IO9>#j90d8ac4]],[[UD3_CFG_GPIO10>#d2dd2f​39]]でGPIO_PWM_CAP_PULLUP_OFFないしGPIO_PWM_CAP_PULLUP_ONに設定する必要がある。 +
- int16_t UD3_GET_RCPOS (uint8_t ch); +
--パラメータ +
---uint8_t '''ch''' +
-~チャネルを指定する。 +
-~0: PWM8(GPIO8)~ +
-1: PWM9(GPIO9)~ +
-2: PWM10(GPIO10) +
--戻り値 +
-~int16_t ラジコンプロポのスティックの位置 +
--使用例 +
- // PWM8に接続されているラジコンプロポのスティックの位置を取得します。 +
- pos = UD3_GET_RCPOS (0); +
- +
-****UD3_RC_MOTOR [#rf1dfc65] +
-UD3_MEASURE_STICKPOSにて調整されたラジコン用プロポの受信器から出力されるパルスを元にM1とM2の駆動パワーに割り当てる。 +
- void UD3_RC_MOTOR (uint8_t rc1, uint8_t rc2); +
--パラメータ +
---uint8_t '''rc1''' +
-~M1に割り当てるチャネル +
-~0: PWM8(GPIO8)~ +
-1: PWM9(GPIO9)~ +
-2: PWM10(GPIO10) +
---uint8_t '''rc2''' +
-~M2に割り当てるチャネル +
-~0: PWM8(GPIO8)~ +
-1: PWM9(GPIO9)~ +
-2: PWM10(GPIO10) +
--戻り値 +
-~なし +
--使用例 +
- include <ud3.h> +
- +
- int main (void) { +
-   // GPIO8,9をパルス幅計測モードに +
-   UD3_CFG_GPIO8 (GPIO_PWM_CAP_PULLUP_OFF); +
-   UD3_CFG_GPIO9 (GPIO_PWM_CAP_PULLUP_OFF); +
-   // モータの駆動モード設定 +
-   UD3_SET_M1DRIVEMODE (_UD_MOTOR_DRIVE); +
-   UD3_SET_M2DRIVEMODE (_UD_MOTOR_DRIVE); +
- +
-   // モータ駆動許可 +
-   UD3_SET_MOTORENABLE (true); +
- +
-   UD3_ACTIVE_TASK (1); +
- } +
- +
- UD3_TASK1 () { +
-   // プロポの調整 +
-   UD3_MEASURE_STICKPOS (10, 10); +
-   while (1) { +
-     // 調整値を元にGPIO8をM1,GPIO9をM2に割り当てて運転 +
-     UD3_RC_MOTOR (0, 1); +
-   } +
-  } +
- +
-***SIXAXIS関連 [#tc0f292d] +
-BluetoothのモードがSIXAXISで、SIXAXISないしDUALSHOCK3がワイヤレス接続された時に取得出来る情報です。デジタルボタンの押力の取得及び振動モータの運転は出来ません。 +
-なお、予め[[UD3_ASSIGN_BT_TO_SIXAXIS>#h5d1973e]]にてBluetoothにSIXAXIS通信機能を割り当てておく必要は特にありませんが、ブートローダでBluetoothをSIXAXISモードに設定した場合はそれ以外の機能への割り当てはできません。 +
- +
-****UD3_GET_PSDIGITAL1 [#na9afa77] +
-SIXAXISのグループ1に属するボタン情報を取得する。 +
- uint8_t UD3_GET_PSDIGITAL1(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t グループ1のボタン情報 押下状態で該当ビットが1 +
-|=BIT| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | +
-|=ボタン| ← | ↓ | → | ↑ | START | ANALOG R&br;PUSH | ANALOG L&br;PUSH | SELECT | +
--使用例 +
- uint8_t btg1 = UD3_GET_PSDIGITAL1 (); +
- +
-****UD3_GET_PSDIGITAL2 [#j87bd158] +
-SIXAXISのグループ2に属するボタン情報を取得する。 +
- uint8_t UD3_GET_PSDIGITAL2(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t グループ2のボタン情報 押下状態で該当ビットが1 +
-|=BIT| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | +
-|=ボタン| □ | × | ○ | △ | R1 | L1 | R2 | L2 | +
--使用例 +
- uint8_t btg2 = UD3_GET_PSDIGITAL2 (); +
- +
-****UD3_GET_PSDIGITAL3 [#uee03cdb] +
-SIXAXISのグループ3に属するボタン情報を取得する。 +
- uint8_t UD3_GET_PSDIGITAL3(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t グループ3のボタン情報 押下状態で該当ビットが1 +
-|=BIT| bit7..1 | bit0 | +
-|=ボタン| - |  PS | +
--使用例 +
- uint8_t btg3 = UD3_GET_PSDIGITAL3 (); +
- +
-****UD3_GET_PSLX [#i62abd1b] +
-SIXAXISの左側アナログスティックのX軸情報を取得する。 +
- uint8_t UD3_GET_PSLX(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t 左側アナログスティックの位置が左端で0、右端で255を返す。 +
--使用例 +
- uint8_t lx = UD3_GET_PSLX (); +
- +
-****UD3_GET_PSLY [#xf86f9e4] +
-SIXAXISの左側アナログスティックのY軸情報を取得する。 +
- uint8_t UD3_GET_PSLY(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t 左側アナログスティックの位置が上端で0、下端で255を返す。 +
--使用例 +
- uint8_t ly = UD3_GET_PSLY (); +
- +
-****UD3_GET_PSRX [#f16c0c11] +
-SIXAXISの右側アナログスティックのX軸情報を取得する。 +
- uint8_t UD3_GET_PSRX(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t 右側アナログスティックの位置が左端で0、右端で255を返す。 +
--使用例 +
- uint8_t rx = UD3_GET_PSRX (); +
- +
-****UD3_GET_PSRY [#f51902ac] +
-SIXAXISの右側アナログスティックのY軸情報を取得する。 +
- uint8_t UD3_GET_PSRY(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t 右側アナログスティックの位置が上端で0、下端で255を返す。 +
--使用例 +
- uint8_t ry = UD3_GET_PSRY (); +
- +
-****UD3_GET_PSL2 [#yda6cc23] +
-SIXAXISのL2の情報を取得する。 +
- uint8_t UD3_GET_PSL2(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t L2が解放で0、最大押下で255を返す。 +
--使用例 +
- uint8_t l2 = UD3_GET_PSL2 (); +
- +
-****UD3_GET_PSR2 [#f71afcd6] +
-SIXAXISのR2の情報を取得する。 +
- uint8_t UD3_GET_PSR2(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t R2が解放で0、最大押下で255を返す。 +
--使用例 +
- uint8_t r2 = UD3_GET_PSR2 (); +
- +
-****UD3_GET_PSGX [#hccd1b38] +
-SIXAXISのX軸加速度を取得する。 +
- uint16_t UD3_GET_PSGX(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t 0~1023の範囲でX軸の加速度を返す。 +
--使用例 +
- uint16_t gx = UD3_GET_PSGX (); +
- +
-****UD3_GET_PSGY [#rd271105] +
-SIXAXISのY軸加速度を取得する。 +
- uint16_t UD3_GET_PSGY(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t 0~1023の範囲でY軸の加速度を返す。 +
--使用例 +
- uint16_t gy = UD3_GET_PSGY (); +
- +
-****UD3_GET_PSGZ [#ibd2e0bc] +
-SIXAXISのZ軸加速度を取得する。 +
- uint16_t UD3_GET_PSGZ(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t 0~1023の範囲でZ軸の加速度を返す。 +
--使用例 +
- uint16_t gz = UD3_GET_PSGZ (); +
- +
-****UD3_GET_PSGYRO [#cd05b422] +
-SIXAXISの角加速度を取得する。 +
- uint16_t UD3_GET_PSGYRO(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t 0~1023の範囲で角加速度を返す。 +
--使用例 +
- uint16_t gyro = UD3_GET_PSGYRO (); +
- +
-***コンソール関連 [#d0d4a9b4] +
-USB・Bluetooth・RS485の各I/Fは、「コンソール」「Dynamixelホスト」「Dynamixelクライアント」「SIXAXIS通信」のいずれかの機能を割り当てて使用する事ができます。USBとRS485は初期状態においてどの機能も割り当てられていないため、それぞれの機能を使用したAPIも機能しない状態になっています。Bluetoothについては、ブートローダでSIXAXISモードの設定がなされた場合のみ、「SIXAXIS通信」機能が自動的に活性化します。~ +
-なお、RS485に「コンソール」機能を割り当てた場合はボーレートが1M[bps]固定され、「Dynamixelホスト」機能はRS485のみ、「SIXAXIS通信」機能はBluetoothにのみ設定できます。 +
- +
-|CENTER:BGCOLOR(red):||c +
-|  :idea:|ToppersカーネルとUSBの相性がよろしくないため、恒久的な通信ポートとしてUSBを使用する事は控える事。&br;超大なデータを常時吐き続けると、カーネルごとフリーズする場合がある。| +
- +
-****UD3_ASSIGN_USB_TO_CONSOLE (new)[#w433da59] +
-USBをコンソール機能に割り当てる。以前のUSBへの割り当ては解除される。 +
- bool UD3_ASSIGN_USB_TO_CONSOLE (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool 割り当てが成功するとtrue +
-****UD3_ASSIGN_USB_TO_DXCLIENT (new) [#i8f4c502] +
-USBをDynamixelのクライアント機能に割り当てる。以前のUSBへの割り当ては解除される。 +
- bool UD3_ASSIGN_USB_TO_DXCLIENT (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool 割り当てが成功するとtrue +
-****UD3_DEASSIGN_USB (new) [#m33f02d9] +
-以前のUSBへの割り当てを解除する。 +
- bool UD3_DEASSIGN_USB (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool 割り当てが成功するとtrue +
-****UD3_ASSIGN_RS485_TO_CONSOLE (new) [#q8dded9d] +
-RS485をコンソール機能に割り当てる。以前のRS485への割り当ては解除される。 +
- bool UD3_ASSIGN_RS485_TO_CONSOLE (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool 割り当てが成功するとtrue +
-****UD3_ASSIGN_RS485_TO_DXCLIENT (new) [#z3a825e0] +
-RS485をDynamixelのクライアント機能に割り当てる。以前のRS485への割り当ては解除される。 +
- bool UD3_ASSIGN_RS485_TO_DXCLIENT (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool 割り当てが成功するとtrue +
-****UD3_ASSIGN_RS485_TO_DXHOST (new) [#a4298bb2] +
-RS485をDynamixelのホスト機能に割り当てる。以前のRS485への割り当ては解除される。 +
- bool UD3_ASSIGN_RS485_TO_DXHOST (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool 割り当てが成功するとtrue +
-****UD3_DEASSIGN_RS485 (new) [#pc7926c0] +
-以前のRS485への割り当てを解除する。 +
- bool UD3_DEASSIGN_RS485 (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool 割り当てが成功するとtrue +
-****UD3_ASSIGN_BT_TO_CONSOLE (new) [#p3b1f9b6] +
-Bluetoothをコンソール機能に割り当てる。以前のBluetoothへの割り当ては解除される。 +
- bool UD3_ASSIGN_BT_TO_CONSOLE (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool 割り当てが成功するとtrue +
-****UD3_ASSIGN_BT_TO_DXCLIENT (new) [#a92c0818] +
-BluetoothをDynamixelのクライアント機能に割り当てる。以前のBluetoothへの割り当ては解除される。 +
- bool UD3_ASSIGN_BT_TO_DXCLIENT (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool 割り当てが成功するとtrue +
-****UD3_ASSIGN_BT_TO_SIXAXIS (new) [#h5d1973e] +
-BluetoothをSIXAXISないしDUALSHOCK3との通信機能に割り当てる。以前のBluetoothへの割り当ては解除される。 +
- bool UD3_ASSIGN_BT_TO_SIXAXIS (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool 割り当てが成功するとtrue +
-****UD3_DEASSIGN_BT (new) [#da99d076] +
-以前のBluetoothへの割り当てを解除する。 +
- bool UD3_DEASSIGN_BT (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool 割り当てが成功するとtrue +
- +
-****UD3_PUTC [#w4f6854d] +
-コンソールに1文字送信する。~ +
-予めUD3_ASSIGN_xxx_TO_CONSOLEにて使用するI/Fにコンソールを割り当てておく必要がある。 +
- void UD3_PUTC (char c); +
--パラメータ +
---char '''c''' +
-~送信文字(1バイト)を指定 +
--戻り値 +
-~なし +
--使用例 +
- UD3_PUTC('A'); +
- +
-****UD3_GETC [#ibd505dc] +
-コンソールから1文字取得する。受信バッファが空の場合は最低1バイト受信するまで返らない。~ +
-予めUD3_ASSIGN_xxx_TO_CONSOLEにて使用するI/Fにコンソールを割り当てておく必要がある。 +
- char UD3_GETC (void); +
--パラメータ +
-~なし +
--戻り値 +
-~char 受信文字 +
--使用例 +
- while (UD3_RXBUFF()) UD3_PUTC(UD3_GETC()); +
- +
-****UD3_GETS [#lc54c38f] +
-コンソールからエンター(CRかLF)ないしエスケープ(ESC)コードを受信するまで文字列を取得する。~ +
-予めUD3_ASSIGN_xxx_TO_CONSOLEにて使用するI/Fにコンソールを割り当てておく必要がある。 +
- int UD3_GETS (char *s, int len); +
--パラメータ +
---char *s +
-~受信文字列を保存するバッファのポインタを指定 +
---int len +
-~受信文字列の最大バッファサイズを指定 +
--戻り値 +
-~int 受信文字数 +
--使用例 +
- char buf[30]; +
- if (UD3_GETS(buf, sizeof(buf))) UD3_PUTS(buf); +
- +
-****UD3_PUTS [#qc95c51a] +
-コンソールへ文字列を送信する。~ +
-予めUD3_ASSIGN_xxx_TO_CONSOLEにて使用するI/Fにコンソールを割り当てておく必要がある。 +
- void UD3_PUTS (char *s); +
--パラメータ +
---char '''*s''' +
-~送信文字列(NULLターミネーション)のポインタを指定 +
--戻り値 +
-~なし +
--使用例 +
- UD3_PUTS("HELLO!\n"); +
- +
-****UD3_PUTSB [#e16d8efa] +
-コンソールへ指定バイト数のデータを送信する。~ +
-予めUD3_ASSIGN_xxx_TO_CONSOLEにて使用するI/Fにコンソールを割り当てておく必要がある。 +
- void UD3_PUTSB (char *s, int len); +
--パラメータ +
---char '''*s''' +
-~送信データのポインタを指定 +
---int '''len''' +
-~送信バイト数を指定 +
--戻り値 +
-~なし +
--使用例 +
- char s[]={'A','B','C','D'}; +
- UD3_PUTS(s, 4); +
- +
-****UD3_RXBUFF [#w6cb53ad] +
-コンソールから受信されたバイト数を返す。~ +
-予めUD3_ASSIGN_xxx_TO_CONSOLEにて使用するI/Fにコンソールを割り当てておく必要がある。 +
- int UD3_RXBUFF (void); +
--パラメータ +
-~なし +
--戻り値 +
-~int 受信バイト数。 +
--使用例 +
- while (UD3_RXBUFF()) UD3_PUTC(UD3_GETC()); +
- +
-****UD3_PRINTF [#xd168578] +
-コンソールへ書式化文字列を送信する。~ +
-予めUD3_ASSIGN_xxx_TO_CONSOLEにて使用するI/Fにコンソールを割り当てておく必要がある。 +
- int UD3_PRINTF (const char *format, ...) { +
--パラメータ +
---const char '''*format''' +
-~書式文字列 +
---... +
-~可変個引数 +
--戻り値 +
-~int 送信バイト数。 +
--使用例 +
- int i ; +
- while UD3_PRINTF("HELLO! %d\n", i++); +
- +
-****UD3_SCANF [#l1b83762] +
-コンソールから書式化文字列を受信する。~ +
-予めUD3_ASSIGN_xxx_TO_CONSOLEにて使用するI/Fにコンソールを割り当てておく必要がある。 +
- int UD3_SCANF (const char *type, void *val); +
--パラメータ +
---const char '''*type''' +
-~書式文字列 +
---void '''*val''' +
-~格納先変数 +
--戻り値 +
-~int 入力データの個数。 +
--使用例 +
- int i ; +
- if (UD3_PRINTF("%d", &i)) UD3_PRINTF("i=%d", i); +
- +
-***Dynamixelホスト関連 [#rd133a45] +
-RS485を使用してUD3をホストとした他のDynamixelスレーブ機器との通信を行います。~ +
-なお、UD3のRS485はデフォルトで機能が割り当てられていないため、予め[[UD3_ASSIGN_RS485_TO_DXHOST>#a4298bb2]]​にてRS485にDynamixelホスト機能を割り当てておく必要があります。 +
- +
-****DX_ChangeBaudrate [#z585203f] +
-ボーレートを変更する。 +
- bool DX_ChangeBaudrate (uint32_t baud); +
--パラメータ +
---uint32_t '''baud''' +
-~ボーレート[bps]~ +
-デフォルトは1000000[bps] +
--戻り値 +
-~bool 指定ボーレートと論理ボーレートとの誤差が2%以下の時true +
--使用例 +
- +
-****DX_Ping [#bf72833f] +
-指定されたIDの存在を確認する。 +
- bool DX_Ping (uint8_t id, uint32_t timeout, uint16_t *errcode); +
--パラメータ +
---uint8_t '''id''' +
-~対象ID +
---uint32_t '''timeout''' +
-~タイムアウト[ms] +
---uint16_t  '''*errcode''' +
-~アラームステータスを保存するポインタ +
--戻り値 +
-~true: タイムアウト時間内に正常な応答があった~ +
-false: タイムアウト時間を超過ないしアラームステータスが返された +
--使用例 +
- +
-****DX_Ping2 [#nf87452a] +
-不明なIDのデバイスのIDを見つける。 +
- bool DX_Ping2 (uint8_t *id, uint32_t timeout, uint16_t *errcode); +
--パラメータ +
---uint8_t '''*id''' +
-~見つかったIDを保存する変数のポインタを指定 +
---uint32_t '''timeout''' +
-~タイムアウト[ms] +
---uint16_t  '''*errcode''' +
-~アラームステータスを保存するポインタ +
--戻り値 +
-~true: タイムアウト時間内に正常な応答があり、idへ応答したidが返される~ +
-false: タイムアウト時間を超過しても応答が無かった +
--使用例 +
- +
-****DX_ReadByteData [#f32225e1] +
-指定IDの指定アドレスから1バイトのデータを読み出す。 +
- bool DX_ReadByteData (uint8_t id, uint8_t adr, uint8_t *result, uint32_t timeout, uint16_t *errcode); +
--パラメータ +
---uint8_t '''id''' +
-~対象ID +
---uint8_t '''adr''' +
-~対象アドレス +
---uint32_t '''timeout''' +
-~タイムアウト[ms] +
---uint16_t  '''*errcode''' +
-~アラームステータスを保存するポインタ +
--戻り値 +
-~true: タイムアウト時間内に正常な応答があった~ +
-false: タイムアウト時間を超過しても応答が無い、もしくはアラームステータスが返された +
--使用例 +
- +
-****DX_ReadWordData [#m5230d39] +
-指定IDの指定アドレスから1ワード(2バイト)のデータを読み出す。 +
- bool DX_ReadWordData (uint8_t id, uint8_t adr, uint16_t *result, uint32_t timeout, uint16_t *errcode); +
--パラメータ +
---uint8_t '''id''' +
-~対象ID +
---uint8_t '''adr''' +
-~対象アドレス +
---uint32_t '''timeout''' +
-~タイムアウト[ms] +
---uint16_t  '''*errcode''' +
-~アラームステータスを保存するポインタ +
--戻り値 +
-~true: タイムアウト時間内に正常な応答があった~ +
-false: タイムアウト時間を超過しても応答が無い、もしくはアラームステータスが返された +
--使用例 +
- +
-****DX_ReadBlockData [#d0ba2a9e] +
-指定IDの指定アドレスから指定バイト数のデータを読み出す。 +
- bool DX_ReadBlockData (uint8_t id, uint8_t adr, uint8_t *result, uint8_t len, uint32_t timeout, uint16_t *errcode); +
--パラメータ +
---uint8_t '''id''' +
-~対象ID +
---uint8_t '''adr''' +
-~対象アドレス +
---uint32_t '''timeout''' +
-~タイムアウト[ms] +
---uint16_t  '''*errcode''' +
-~アラームステータスを保存するポインタ +
--戻り値 +
-~true: タイムアウト時間内に正常な応答があった~ +
-false: タイムアウト時間を超過しても応答が無い、もしくはアラームステータスが返された +
--使用例 +
- +
-****DX_WriteByteData [#nd22b7cf] +
-指定IDの指定アドレスへ1バイトのデータを書き込む。 +
- bool DX_WriteByteData (uint8_t id, uint8_t adr, uint8_t dat, uint32_t timeout, uint16_t *errcode); +
--パラメータ +
---uint8_t '''id''' +
-~対象ID +
---uint8_t '''adr''' +
-~対象アドレス +
---uint32_t '''timeout''' +
-~タイムアウト[ms] +
---uint16_t  '''*errcode''' +
-~アラームステータスを保存するポインタ +
--戻り値 +
-~true: タイムアウト時間内に正常な応答があった~ +
-false: タイムアウト時間を超過しても応答が無い、もしくはアラームステータスが返された +
--使用例 +
- +
-****DX_WriteWordData [#f8044400] +
-指定IDの指定アドレスへ1ワード(2バイト)のデータを書き込む。 +
- bool DX_WriteWordData (uint8_t id, uint8_t adr, uint16_t dat, uint32_t timeout, uint16_t *errcode); +
--パラメータ +
---uint8_t '''id''' +
-~対象ID +
---uint8_t '''adr''' +
-~対象アドレス +
---uint32_t '''timeout''' +
-~タイムアウト[ms] +
---uint16_t  '''*errcode''' +
-~アラームステータスを保存するポインタ +
--戻り値 +
-~true: タイムアウト時間内に正常な応答があった~ +
-false: タイムアウト時間を超過しても応答が無い、もしくはアラームステータスが返された +
--使用例 +
- +
-****DX_WriteBlockData [#f5423302] +
-指定IDの指定アドレスへ複数バイトのデータを書き込む。 +
- bool DX_WriteBlockData (uint8_t id, uint8_t adr, const uint8_t *dat, uint8_t len, uint32_t timeout, uint16_t *errcode); +
--パラメータ +
---uint8_t '''id''' +
-~対象ID +
---uint8_t '''adr''' +
-~対象アドレス +
---uint32_t '''timeout''' +
-~タイムアウト[ms] +
---uint16_t  '''*errcode''' +
-~アラームステータスを保存するポインタ +
--戻り値 +
-~true: タイムアウト時間内に正常な応答があった~ +
-false: タイムアウト時間を超過しても応答が無い、もしくはアラームステータスが返された +
--使用例 +
- +
-****DX_SyncWriteData (obsolete)[#pf448981] +
-****DX_WriteSyncData (new) [#uebb1423] +
-複数のデバイスへ同時に個別のデータを書き込む。 +
- bool DX_WriteSyncData (uint8_t size, const uint8_t *dat, uint16_t *errcode);+
**サンプルプログラム [#kf8170aa] **サンプルプログラム [#kf8170aa]
-APIを使用したいくつかのサンプルプログラムを用意しました。以下よりダウンロードして解凍した上でご利用ください。詳細はコメントおよびAPIのドキュメントを参考に読み解いてください。+APIを使用したいくつかのサンプルプログラムを用意しました。以下よりダウンロードして解凍した上でご利用ください。詳細はコメントおよび[[UD3 Library]]のドキュメントを参考に読み解いてください。
-UD3用サンプルプログラム Ver1.5 (2011/8/3)~ -UD3用サンプルプログラム Ver1.5 (2011/8/3)~


トップ   差分 リロード印刷に適した表示   全ページ一覧 単語検索 最新ページの一覧   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom