7: 2022-06-08 (水) 09:10:10 takaboo | 8: 2023-03-15 (水) 07:20:45 takaboo | ||
---|---|---|---|
Line 1: | Line 1: | ||
TITLE:DXLIB for Arduino | TITLE:DXLIB for Arduino | ||
- | DXSHIELDを[[ソフトウェアシリアル>#ee08b548]]もしくは[[ハードウェアシリアル>#ce79cebb]]モードに設定した場合、ArduinoのスケッチからDynamixelを制御するためのライブラリが利用できます。~ | + | Dynamixelを制御するためのプログラムを作成する際のライブラリを提供します。Arduino IDEにインストールするだけで自身のスケッチからDynamixelを制御できます。~ |
- | PC版DYNAMIXEL Protocol [[1.0>Dynamixel Library]]/[[2.0>Dynamixel Protocol 2 Library]] Libraryと同様にプロトコルやシリアル通信を意識せずともコントロールテーブルへの読み書きが行えますが、Arduino版はメモリの都合から一部機能を制限したサブセット版となります。 | + | PC版DYNAMIXEL Protocol [[1.0>Dynamixel Library]]/[[2.0>Dynamixel Protocol 2 Library]] Libraryと同様にプロトコルやシリアル通信を意識せずともコントロールテーブルへの読み書きが行えます。なおAVRではメモリの都合からV1.5から追加されたライブラリは使用できません。また当該バージョンからクラスのインスタンス化の際の引数が変更されていますので注意が必要です。 |
-ライブラリのダウンロード~ | -ライブラリのダウンロード~ | ||
-- | -- | ||
- | #ref(dxlib1.5_for_arduino.zip)~ | + | #ref(dxlib1.5beta_for_arduino.zip)~ |
+ | ---現時点でβ版扱い | ||
---Arduino UNO以外も対象とするためにソースからシリアルライブラリに関する記述を削除し、シリアル通信にかかる7つのハンドラを新たに設置 | ---Arduino UNO以外も対象とするためにソースからシリアルライブラリに関する記述を削除し、シリアル通信にかかる7つのハンドラを新たに設置 | ||
---Arduino UNOに限って初期化を始め送受信にかかるハンドラをソフトウェアシリアルとハードウェアシリアル用に提供 | ---Arduino UNOに限って初期化を始め送受信にかかるハンドラをソフトウェアシリアルとハードウェアシリアル用に提供 | ||
- | ---AVRを除くターゲットに適用した場合、PCないしARM系マイコンボード用に提供しているDXLIBに[[追加されたAPI>DXLIB_abstract]]が使用可能 | + | ---AVRを除くターゲットに適用した場合、PCないしARM系マイコンボード用に提供しているDXLIBに[[追加されたAPI>DXL_intuitive]]が使用可能~ |
- | ---仕様変更によるサンプルプログラムを修正 | + | 詳細は追って公開 |
+ | ---仕様変更によるサンプルプログラム修正 | ||
-- | -- | ||
Line 42: | Line 44: | ||
インストールが完了すると、ユーザーフォルダ配下に「Arduino/libraries/dxlib」が作られ、ライブラリのソースといくつかのサンプルプログラムがその中に展開されます。詳しくはサンプルプログラムとライブラリのソースを参照して下さい。~ | インストールが完了すると、ユーザーフォルダ配下に「Arduino/libraries/dxlib」が作られ、ライブラリのソースといくつかのサンプルプログラムがその中に展開されます。詳しくはサンプルプログラムとライブラリのソースを参照して下さい。~ | ||
- | DXLIB v1.4以降で使用できるヘッダファイルとAPIは以下の通りです。 | + | DXLIB v1.5以降で使用できるヘッダファイルとAPIは以下の通りです。 |
-&color(#0099ff){''dxlib.h''};~ | -&color(#0099ff){''dxlib.h''};~ | ||
[[DYNAMIXEL Communiation Protocol 1.0]]対応デバイスを対象とする場合、'''dxlib.h'''をスケッチにインクルードする事で'''DXLIB'''クラスが利用できるようになります。なお、Arduinoのリソースの都合から、'''dx2lib.h'''との共存はできません。 | [[DYNAMIXEL Communiation Protocol 1.0]]対応デバイスを対象とする場合、'''dxlib.h'''をスケッチにインクルードする事で'''DXLIB'''クラスが利用できるようになります。なお、Arduinoのリソースの都合から、'''dx2lib.h'''との共存はできません。 | ||
Line 48: | Line 50: | ||
<pre class="brush: c;"> | <pre class="brush: c;"> | ||
#include <dxlib.h> | #include <dxlib.h> | ||
- | DXLIB dxif (true); // select software serial | + | #include "avr_uno_softserial.h" |
+ | const DXLIB::TDXHost_ConfParam param { | ||
+ | dx_init, dx_deinit, dx_setbaudrate, dx_rxpurge, dx_putc, dx_puts, dx_gets, dx_flush | ||
+ | }; | ||
+ | |||
+ | DXLIB dxif (& param); | ||
void setup() { | void setup() { | ||
dxif.begin (57600); | dxif.begin (57600); | ||
Line 58: | Line 66: | ||
<pre class="brush: c;"> | <pre class="brush: c;"> | ||
#include <dxlib.h> | #include <dxlib.h> | ||
- | DX2LIB dxif (true); // select software serial | + | #include "avr_uno_softserial.h" |
+ | const DX2LIB::TDX2Host_ConfParam param { | ||
+ | dx_init, dx_deinit, dx_setbaudrate, dx_rxpurge, dx_putc, dx_puts, dx_gets, dx_flush | ||
+ | }; | ||
+ | |||
+ | DX2LIB dxif (& param); | ||
void setup() { | void setup() { | ||
dxif.begin (57600); | dxif.begin (57600); | ||
}</pre> | }</pre> | ||
}} | }} | ||
- | -&color(#0099ff){''DXLIB/DX2LIB'' (bool ss, HardwareSerial *hws, uint8_t rxpin, uint8_t txpin)};~ | + | -&color(#0099ff){''DXLIB/DX2LIB'' (const PDXHost_ConfParam param)};~ |
- | ヘッダファイルに応じて'''DXLIB'''ないし'''DX2LIB'''いずれかのクラスが使用できます。同時にソフトウェアシリアルの使用('''ss''')・ハードウェアシリアルオブジェクト('''hws''')・受信端子('''rxpin''')・送信端子('''txpin''')を指定した上でオブジェクトを生成できます。~ | + | ヘッダファイルに応じて'''DXLIB'''ないし'''DX2LIB'''いずれかのクラスが使用できます。外部で定義したシリアル通信処理部分をまとめた構造体指定した上でオブジェクトを生成できます。 |
- | なお、'''ss'''にtrueを指定したら[[ソフトウェアシリアルモード>#ee08b548]]、falseを指定したら[[ハードウェアシリアルモード>#ce79cebb]]にDXSHIELDを設定しなくてはなりません。~ | + | |
- | また、'''hws'''や'''rxpin'''、'''txpin'''は通常指定する必要はありませんが、他のSHIELDやArduinoの機能の都合で使用できない場合に限り指定します。 | + | |
#html{{ | #html{{ | ||
<pre class="brush: c;"> | <pre class="brush: c;"> | ||
#include <dxlib.h> | #include <dxlib.h> | ||
- | // dxifの名前でDynamixel Protocol V.2 Libraryをインスタンス化 | ||
// ソフトウェアシリアルモードで使用 | // ソフトウェアシリアルモードで使用 | ||
- | DX2LIB dxif(true);</pre> | + | //#include "avr_uno_hardserial.h" |
+ | #include "avr_uno_softserial.h" | ||
+ | |||
+ | // dxifの名前でDynamixel Protocol V.2 Libraryをインスタンス化 | ||
+ | const DX2LIB::TDX2Host_ConfParam param { | ||
+ | dx_init, dx_deinit, dx_setbaudrate, dx_rxpurge, dx_putc, dx_puts, dx_gets, dx_flush | ||
+ | }; | ||
+ | |||
+ | DX2LIB dxif(& param); | ||
+ | </pre> | ||
}} | }} | ||
-&color(#0099ff){void DXLIB/DX2LIB::''begin'' (long baud)};~ | -&color(#0099ff){void DXLIB/DX2LIB::''begin'' (long baud)};~ | ||
Line 181: | Line 201: | ||
-&color(#0099ff){bool DXLIB/DX2LIB::''Reset'' (uint8_t id, uint16_t *err)};~ | -&color(#0099ff){bool DXLIB/DX2LIB::''Reset'' (uint8_t id, uint16_t *err)};~ | ||
指定されたID('''id''')のDynamixelを出荷時状態に戻します。'''err'''にはDynamixelのエラーが返ります。 | 指定されたID('''id''')のDynamixelを出荷時状態に戻します。'''err'''にはDynamixelのエラーが返ります。 | ||
- | |||
- | また、Arduino IDEのバージョンによっては「SoftwareSerial.h: No such file or directory」のコンパイルエラーが発生しますので、その場合は自身のスケッチの先頭に以下の1行を挿入してコンパイルします。 | ||
- | #html{{ | ||
- | <pre class="brush: c;"> | ||
- | #include <SoftwareSerial.h></pre> | ||
- | }} |