3: 2016-12-12 (月) 18:32:55 takaboo ソース 4: 2016-12-13 (火) 15:03:21 takaboo ソース
Line 239: Line 239:
DXLIBのインストールは、ArduinoのIDEの「スケッチ→ライブラリのインクルード→.ZIP形式のライブラリをインストール...」メニューを使用してダウンロードしたZIPファイルを選択するだけです。~ DXLIBのインストールは、ArduinoのIDEの「スケッチ→ライブラリのインクルード→.ZIP形式のライブラリをインストール...」メニューを使用してダウンロードしたZIPファイルを選択するだけです。~
-インストールが完了すると、ユーザーフォルダ配下に「Arduino/libraries/dxlib」が作られ、ライブラリのソースといくつかのサンプルプログラムがその中に展開されます。+インストールが完了すると、ユーザーフォルダ配下に「Arduino/libraries/dxlib」が作られ、ライブラリのソースといくつかのサンプルプログラムがその中に展開されます。~
-DXLIB v1.1で使用できるAPIは以下の通りです。 +DXLIB v1.1で使用できるヘッダファイルとAPIは以下の通りです。 
--&color(#0099ff){''DXLIB'' (bool ss, uint8_t txpin, uint8_t rxpin)};~+-&color(#0099ff){''dxlib.h''};~ 
 +Dynamixel Protocol V.1のデバイスを対象とする場合に本ヘッダファイルをインクルードします。V.2のヘッダファイルとAPIは共存できませんが、いずれもAPIの定義は互換性があります。 
 + #include <dxlib.h> 
 + DXLIB dxif (true); // select software serial 
 + void setup() { 
 +   dxif.begin (57600); 
 + } 
 +-&color(#0099ff){''dx2lib.h''};~ 
 +Dynamixel Protocol V.2のデバイスを対象とする場合に本ヘッダファイルをインクルードします。V.1のヘッダファイルとAPIは共存できませが、いずれもAPIの定義は互換性があります。 
 + #include <dx2lib.h> 
 + DX2LIB dxif (true); // select software serial 
 + void setup() { 
 +   dxif.begin (57600); 
 + } 
 +-&color(#0099ff){''DXLIB/DX2LIB'' (bool ss, uint8_t txpin, uint8_t rxpin)};~
ソフトウェアシリアルの使用('''ss''')・送信端子('''txpin''')・受信端子('''rxpin''')を指定した上でオブジェクトを生成します。~ ソフトウェアシリアルの使用('''ss''')・送信端子('''txpin''')・受信端子('''rxpin''')を指定した上でオブジェクトを生成します。~
'''ss'''にtrueを指定したら[[ソフトウェアシリアルモード>#ee08b548]]、falseを指定したら[[ハードウェアシリアルモード>#ce79cebb]]にDXSHIELDを設定しなくてはなりません。~ '''ss'''にtrueを指定したら[[ソフトウェアシリアルモード>#ee08b548]]、falseを指定したら[[ハードウェアシリアルモード>#ce79cebb]]にDXSHIELDを設定しなくてはなりません。~
'''txpin'''と'''rxpin'''はDXSHIELDを使用する限り指定は省略します。 '''txpin'''と'''rxpin'''はDXSHIELDを使用する限り指定は省略します。
- // dxifの名前でインスタンス化+ // dxifの名前でDynamixel Protocol V.2 Libraryをインスタンス化
 // ソフトウェアシリアルモードで使用  // ソフトウェアシリアルモードで使用
- DXLIB dxif(true); + DX2LIB dxif(true); 
--&color(#0099ff){void DXLIB::''begin'' (long baud)};~+-&color(#0099ff){void DXLIB/DX2LIB::''begin'' (long baud)};~
ライブラリを使用可能にします。引数('''baud''')にはDynamixelに設定されたボーレートを指定します。~ ライブラリを使用可能にします。引数('''baud''')にはDynamixelに設定されたボーレートを指定します。~
なお、選択したモードにより使用できるボーレートに制限があります。 なお、選択したモードにより使用できるボーレートに制限があります。
Line 256: Line 270:
   dxif.begin (57143);    dxif.begin (57143);
 }  }
--&color(#0099ff){bool DXLIB::''TxPacket'' (uint8_t id, uint8_t inst, uint8_t *param, uint16_t len)};~+-&color(#0099ff){bool DXLIB/DX2LIB::''TxPacket'' (uint8_t id, uint8_t inst, uint8_t *param, uint16_t len)};~
指定されたID('''id''')・インストラクション('''inst''')・パラメータ('''param''')・パラメータ長('''len''')のインストラクションパケットを送信します。 指定されたID('''id''')・インストラクション('''inst''')・パラメータ('''param''')・パラメータ長('''len''')のインストラクションパケットを送信します。
--&color(#0099ff){bool DXLIB::''RxPacket'' (uint8_t *rdata, uint16_t rdatasize, uint16_t *rlen, uint8_t *err)};~+ // ID=1へPingインストラクションパケットを送信 
 + dxif.TxPacket (1, 0x01, NULL, 0); 
 +-&color(#0099ff){bool DXLIB/DX2LIB::''RxPacket'' (uint8_t *rdata, uint16_t rdatasize, uint16_t *rlen, uint8_t *err)};~
ステータスパケットを受信します。成功するとパケット内のパラメータが'''rdata'''へコピーされ、そのパラメータのサイズが'''rlen'''に返されます。なお、ステータスパケットを受信するのに十分なサイズを確保し、そのポインタを'''rdata'''へ、サイズを'''rdatasize'''に指定します。'''err'''にはDynamixelのエラーが返ります。 ステータスパケットを受信します。成功するとパケット内のパラメータが'''rdata'''へコピーされ、そのパラメータのサイズが'''rlen'''に返されます。なお、ステータスパケットを受信するのに十分なサイズを確保し、そのポインタを'''rdata'''へ、サイズを'''rdatasize'''に指定します。'''err'''にはDynamixelのエラーが返ります。
--&color(#0099ff){bool DXLIB::''ReadByteData'' (uint8_t id, uint16_t addr, uint8_t *data, uint8_t *err)};~+ uint8_t buf[10], err; 
 + uint16_t len; 
 + // ID=1へPingインストラクションパケットを送信 
 + dxif.TxPacket (1, 0x01, NULL, 0); 
 + // ステータスパケットを受信 
 + dxif.RxPacket (buf, sizeof (buf), &len, &err) 
 +-&color(#0099ff){bool DXLIB/DX2LIB::''ReadByteData'' (uint8_t id, uint16_t addr, uint8_t *data, uint8_t *err)};~
指定されたID('''id''')・アドレス('''addr''')から8ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 指定されたID('''id''')・アドレス('''addr''')から8ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。
 // ID=1のAX-12のLEDを取得  // ID=1のAX-12のLEDを取得
 uint8_t led;  uint8_t led;
 dxif.ReadByteData (1, 25, &led, NULL);  dxif.ReadByteData (1, 25, &led, NULL);
--&color(#0099ff){bool DXLIB::''ReadWordData'' (uint8_t id, uint16_t addr, uint16_t *data, uint8_t *err)};~+-&color(#0099ff){bool DXLIB/DX2LIB::''ReadWordData'' (uint8_t id, uint16_t addr, uint16_t *data, uint8_t *err)};~
指定されたID('''id''')・アドレス('''addr''')から16ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 指定されたID('''id''')・アドレス('''addr''')から16ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。
 // ID=1のAX-12からPresentPositionを取得  // ID=1のAX-12からPresentPositionを取得
 uint16_t ppos;  uint16_t ppos;
 dxif.ReadWordData (id, 36, &ppos, NULL);  dxif.ReadWordData (id, 36, &ppos, NULL);
--&color(#0099ff){bool DXLIB::''ReadLongData'' (uint8_t id, uint16_t addr, uint32_t *data, uint8_t *err)};~+-&color(#0099ff){bool DXLIB/DX2LIB::''ReadLongData'' (uint8_t id, uint16_t addr, uint32_t *data, uint8_t *err)};~
指定されたID('''id''')・アドレス('''addr''')から32ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 指定されたID('''id''')・アドレス('''addr''')から32ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。
--&color(#0099ff){bool DXLIB::''WriteByteData'' (uint8_t id, uint16_t addr, uint8_t data, uint8_t *err)};~+-&color(#0099ff){bool DXLIB/DX2LIB::''WriteByteData'' (uint8_t id, uint16_t addr, uint8_t data, uint8_t *err)};~
指定されたID('''id''')・アドレス('''addr''')・8ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 指定されたID('''id''')・アドレス('''addr''')・8ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。
 // ID=1のAX-12のLEDを点灯  // ID=1のAX-12のLEDを点灯
 uint8_t err;  uint8_t err;
 dxif.WriteByteData (id, 25, 1, &err);  dxif.WriteByteData (id, 25, 1, &err);
--&color(#0099ff){bool DXLIB::''WriteWordData'' (uint8_t id, uint16_t addr, uint16_t data, uint8_t *err)};~+-&color(#0099ff){bool DXLIB/DX2LIB::''WriteWordData'' (uint8_t id, uint16_t addr, uint16_t data, uint8_t *err)};~
指定されたID('''id''')・アドレス('''addr''')・16ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 指定されたID('''id''')・アドレス('''addr''')・16ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。
 // ID=1のAX-12のGoalPositionを511に変更  // ID=1のAX-12のGoalPositionを511に変更
 dxif.WriteWordData (id, 30, 511, NULL);  dxif.WriteWordData (id, 30, 511, NULL);
--&color(#0099ff){bool DXLIB::''WriteLongData'' (uint8_t id, uint16_t addr, uint32_t data, uint8_t *err)};~+-&color(#0099ff){bool DXLIB/DX2LIB::''WriteLongData'' (uint8_t id, uint16_t addr, uint32_t data, uint8_t *err)};~
指定されたID('''id''')・アドレス('''addr''')・32ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 指定されたID('''id''')・アドレス('''addr''')・32ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。
--&color(#0099ff){bool DXLIB::''WriteSyncByteData'' (const uint8_t *pid, uint16_t addr, const uint8_t *pdata, int num)};~+-&color(#0099ff){bool DXLIB/DX2LIB::''WriteSyncByteData'' (const uint8_t *pid, uint16_t addr, const uint8_t *pdata, int num)};~
指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・8ビットのデータ配列('''pdata''')をDynamixelに書き込みます。 指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・8ビットのデータ配列('''pdata''')をDynamixelに書き込みます。
 // ID=1~5の5個のAX-12のLEDへ点滅を指令  // ID=1~5の5個のAX-12のLEDへ点滅を指令
Line 289: Line 311:
 uint16_t leds={1,1,1,1,1};  uint16_t leds={1,1,1,1,1};
 dxif.WriteSyncByteData (ids, 30, leds, 5);  dxif.WriteSyncByteData (ids, 30, leds, 5);
--&color(#0099ff){bool DXLIB::''WriteSyncWordData'' (const uint8_t *pid, uint16_t addr, const uint16_t *pdata, int num)};~+-&color(#0099ff){bool DXLIB/DX2LIB::''WriteSyncWordData'' (const uint8_t *pid, uint16_t addr, const uint16_t *pdata, int num)};~
指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・16ビットのデータ配列('''pdata''')をDynamixelに書き込みます。 指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・16ビットのデータ配列('''pdata''')をDynamixelに書き込みます。
 // ID=1~5の5個のAX-12に個別のGoalPositionを指令  // ID=1~5の5個のAX-12に個別のGoalPositionを指令
Line 295: Line 317:
 uint16_t poss={100,200,300,400,500};  uint16_t poss={100,200,300,400,500};
 dxif.WriteSyncWordData (ids, 30, ppos, 5);  dxif.WriteSyncWordData (ids, 30, ppos, 5);
--&color(#0099ff){bool DXLIB::''WriteSyncLongData'' (const uint8_t *pid, uint16_t addr, const uint32_t *pdata, int num)};~+-&color(#0099ff){bool DXLIB/DX2LIB::''WriteSyncLongData'' (const uint8_t *pid, uint16_t addr, const uint32_t *pdata, int num)};~
指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・32ビットのデータ配列('''pdata''')をDynamixelに書き込みます。 指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・32ビットのデータ配列('''pdata''')をDynamixelに書き込みます。
--&color(#0099ff){bool DXLIB::''Ping'' (uint8_t id, uint16_t *err)};~+-&color(#0099ff){bool DXLIB/DX2LIB::''Ping'' (uint8_t id, uint16_t *err)};~
指定されたID('''id''')のDynamixelを検索します。'''err'''にはDynamixelのエラーが返ります。 指定されたID('''id''')のDynamixelを検索します。'''err'''にはDynamixelのエラーが返ります。
--&color(#0099ff){bool DXLIB::''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のエラーが返ります。


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