2: 2018-12-02 (日) 21:05:16 takaboo | 3: 2021-09-09 (木) 17:49:32 takaboo | ||
---|---|---|---|
Line 28: | Line 28: | ||
-&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'''との共存はできません。 | ||
- | #include <dxlib.h> | + | #html{{ |
- | DXLIB dxif (true); // select software serial | + | <pre class="brush: c;"> |
- | void setup() { | + | #include <dxlib.h> |
- | dxif.begin (57600); | + | DXLIB dxif (true); // select software serial |
- | } | + | void setup() { |
+ | dxif.begin (57600); | ||
+ | }</pre> | ||
+ | }} | ||
-&color(#0099ff){''dx2lib.h''};~ | -&color(#0099ff){''dx2lib.h''};~ | ||
[[DYNAMIXEL Communiation Protocol 2.0]]対応デバイスを対象とする場合、'''dx2lib.h'''をスケッチにインクルードする事で'''DX2LIB'''クラスが利用できるようになります。なお、Arduinoのリソースの都合から、'''dxlib.h'''との共存はできません。 | [[DYNAMIXEL Communiation Protocol 2.0]]対応デバイスを対象とする場合、'''dx2lib.h'''をスケッチにインクルードする事で'''DX2LIB'''クラスが利用できるようになります。なお、Arduinoのリソースの都合から、'''dxlib.h'''との共存はできません。 | ||
- | #include <dx2lib.h> | + | #html{{ |
- | DX2LIB dxif (true); // select software serial | + | <pre class="brush: c;"> |
- | void setup() { | + | #include <dxlib.h> |
- | dxif.begin (57600); | + | DX2LIB dxif (true); // select software serial |
- | } | + | void setup() { |
+ | dxif.begin (57600); | ||
+ | }</pre> | ||
+ | }} | ||
-&color(#0099ff){''DXLIB/DX2LIB'' (bool ss, HardwareSerial *hws, uint8_t rxpin, uint8_t txpin)};~ | -&color(#0099ff){''DXLIB/DX2LIB'' (bool ss, HardwareSerial *hws, uint8_t rxpin, uint8_t txpin)};~ | ||
ヘッダファイルに応じて'''DXLIB'''ないし'''DX2LIB'''いずれかのクラスが使用できます。同時にソフトウェアシリアルの使用('''ss''')・ハードウェアシリアルオブジェクト('''hws''')・受信端子('''rxpin''')・送信端子('''txpin''')を指定した上でオブジェクトを生成できます。~ | ヘッダファイルに応じて'''DXLIB'''ないし'''DX2LIB'''いずれかのクラスが使用できます。同時にソフトウェアシリアルの使用('''ss''')・ハードウェアシリアルオブジェクト('''hws''')・受信端子('''rxpin''')・送信端子('''txpin''')を指定した上でオブジェクトを生成できます。~ | ||
なお、'''ss'''にtrueを指定したら[[ソフトウェアシリアルモード>#ee08b548]]、falseを指定したら[[ハードウェアシリアルモード>#ce79cebb]]にDXSHIELDを設定しなくてはなりません。~ | なお、'''ss'''にtrueを指定したら[[ソフトウェアシリアルモード>#ee08b548]]、falseを指定したら[[ハードウェアシリアルモード>#ce79cebb]]にDXSHIELDを設定しなくてはなりません。~ | ||
また、'''hws'''や'''rxpin'''、'''txpin'''は通常指定する必要はありませんが、他のSHIELDやArduinoの機能の都合で使用できない場合に限り指定します。 | また、'''hws'''や'''rxpin'''、'''txpin'''は通常指定する必要はありませんが、他のSHIELDやArduinoの機能の都合で使用できない場合に限り指定します。 | ||
- | #include <dx2lib.h> | + | #html{{ |
- | // dxifの名前でDynamixel Protocol V.2 Libraryをインスタンス化 | + | <pre class="brush: c;"> |
- | // ソフトウェアシリアルモードで使用 | + | #include <dxlib.h> |
- | DX2LIB dxif(true); | + | // dxifの名前でDynamixel Protocol V.2 Libraryをインスタンス化 |
+ | // ソフトウェアシリアルモードで使用 | ||
+ | DX2LIB dxif(true);</pre> | ||
+ | }} | ||
-&color(#0099ff){void DXLIB/DX2LIB::''begin'' (long baud)};~ | -&color(#0099ff){void DXLIB/DX2LIB::''begin'' (long baud)};~ | ||
ライブラリを使用可能にします。引数('''baud''')にはDynamixelに設定されたボーレートを指定します。~ | ライブラリを使用可能にします。引数('''baud''')にはDynamixelに設定されたボーレートを指定します。~ | ||
なお、選択したモードにより使用できるボーレートに制限があります。 | なお、選択したモードにより使用できるボーレートに制限があります。 | ||
- | // 生成されたdxifを57143bpsで初期化 | + | #html{{ |
- | void setup() { | + | // 生成されたdxifを57143bpsで初期化 |
- | dxif.begin (57143); | + | void setup() { |
- | } | + | dxif.begin (57143); |
+ | }</pre> | ||
+ | }} | ||
-&color(#0099ff){bool DXLIB/DX2LIB::''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''')のインストラクションパケットを送信します。 | ||
- | // ID=1へPingインストラクションパケットを送信 | + | #html{{ |
- | dxif.TxPacket (1, 0x01, NULL, 0); | + | <pre class="brush: c;"> |
+ | // ID=1へPingインストラクションパケットを送信 | ||
+ | dxif.TxPacket (1, 0x01, NULL, 0);</pre> | ||
+ | }} | ||
-&color(#0099ff){bool DXLIB/DX2LIB::''RxPacket'' (uint8_t *rdata, uint16_t rdatasize, uint8_t *rid, uint16_t *rlen, uint8_t *err)};~ | -&color(#0099ff){bool DXLIB/DX2LIB::''RxPacket'' (uint8_t *rdata, uint16_t rdatasize, uint8_t *rid, uint16_t *rlen, uint8_t *err)};~ | ||
ステータスパケットを受信します。成功するとパケット内のパラメータが'''rdata'''へコピーされ、そのパラメータのサイズが'''rlen'''に返されます。なお、ステータスパケットを受信するのに十分なサイズを確保し、そのポインタを'''rdata'''へ、サイズを'''rdatasize'''に指定します。'''rid'''にはID、'''err'''にはDynamixelのエラーが返ります。 | ステータスパケットを受信します。成功するとパケット内のパラメータが'''rdata'''へコピーされ、そのパラメータのサイズが'''rlen'''に返されます。なお、ステータスパケットを受信するのに十分なサイズを確保し、そのポインタを'''rdata'''へ、サイズを'''rdatasize'''に指定します。'''rid'''にはID、'''err'''にはDynamixelのエラーが返ります。 | ||
- | uint8_t buf[10], id, err; | + | #html{{ |
- | uint16_t len; | + | <pre class="brush: c;"> |
- | // ID=1へPingインストラクションパケットを送信 | + | uint8_t buf[10], id, err; |
- | dxif.TxPacket (1, 0x01, NULL, 0); | + | uint16_t len; |
- | // ステータスパケットを受信 | + | // ID=1へPingインストラクションパケットを送信 |
- | dxif.RxPacket (buf, sizeof (buf), &id, &len, &err) | + | dxif.TxPacket (1, 0x01, NULL, 0); |
+ | // ステータスパケットを受信 | ||
+ | dxif.RxPacket (buf, sizeof (buf), &id, &len, &err)</pre> | ||
+ | }} | ||
-&color(#0099ff){bool DXLIB/DX2LIB::''ReadByteData'' (uint8_t id, uint16_t addr, uint8_t *data, uint8_t *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を取得 | + | #html{{ |
- | uint8_t led; | + | <pre class="brush: c;"> |
- | dxif.ReadByteData (1, 25, &led, NULL); | + | // ID=1のAX-12のLEDを取得 |
+ | uint8_t led; | ||
+ | dxif.ReadByteData (1, 25, &led, NULL);</pre> | ||
+ | }} | ||
-&color(#0099ff){bool DXLIB/DX2LIB::''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を取得 | + | #html{{ |
- | uint16_t ppos; | + | <pre class="brush: c;"> |
- | dxif.ReadWordData (id, 36, &ppos, NULL); | + | // ID=1のAX-12からPresentPositionを取得 |
+ | uint16_t ppos; | ||
+ | dxif.ReadWordData (id, 36, &ppos, NULL);</pre> | ||
+ | }} | ||
-&color(#0099ff){bool DXLIB/DX2LIB::''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/DX2LIB::''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を点灯 | + | #html{{ |
- | uint8_t err; | + | <pre class="brush: c;"> |
- | dxif.WriteByteData (id, 25, 1, &err); | + | // ID=1のAX-12のLEDを点灯 |
+ | uint8_t err; | ||
+ | dxif.WriteByteData (id, 25, 1, &err);</pre> | ||
+ | }} | ||
-&color(#0099ff){bool DXLIB/DX2LIB::''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に変更 | + | #html{{ |
- | dxif.WriteWordData (id, 30, 511, NULL); | + | <pre class="brush: c;"> |
+ | // ID=1のAX-12のGoalPositionを511に変更 | ||
+ | dxif.WriteWordData (id, 30, 511, NULL);</pre> | ||
+ | }} | ||
-&color(#0099ff){bool DXLIB/DX2LIB::''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/DX2LIB::''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へ点滅を指令 | + | #html{{ |
- | uint8_t ids={1,2,3,4,5}; | + | <pre class="brush: c;"> |
- | uint16_t leds={1,1,1,1,1}; | + | // ID=1~5の5個のAX-12のLEDへ点滅を指令 |
- | dxif.WriteSyncByteData (ids, 30, leds, 5); | + | uint8_t ids={1,2,3,4,5}; |
+ | uint16_t leds={1,1,1,1,1}; | ||
+ | dxif.WriteSyncByteData (ids, 30, leds, 5);</pre> | ||
+ | }} | ||
-&color(#0099ff){bool DXLIB/DX2LIB::''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を指令 | + | #html{{ |
- | uint8_t ids={1,2,3,4,5}; | + | <pre class="brush: c;"> |
- | uint16_t poss={100,200,300,400,500}; | + | // ID=1~5の5個のAX-12に個別のGoalPositionを指令 |
- | dxif.WriteSyncWordData (ids, 30, ppos, 5); | + | uint8_t ids={1,2,3,4,5}; |
+ | uint16_t poss={100,200,300,400,500}; | ||
+ | dxif.WriteSyncWordData (ids, 30, ppos, 5);</pre> | ||
+ | }} | ||
-&color(#0099ff){bool DXLIB/DX2LIB::''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に書き込みます。 | ||
Line 109: | Line 144: | ||
指定されたID('''id''')のDynamixelを出荷時状態に戻します。'''err'''にはDynamixelのエラーが返ります。 | 指定されたID('''id''')のDynamixelを出荷時状態に戻します。'''err'''にはDynamixelのエラーが返ります。 | ||
- | また、Arduino IDEのバージョンによっては「SoftwareSerial.h: No such file or directory」のコンパイルエラーが発生しますので、その場合は自信のスケッチの先頭に以下の1行を挿入してコンパイルします。 | + | また、Arduino IDEのバージョンによっては「SoftwareSerial.h: No such file or directory」のコンパイルエラーが発生しますので、その場合は自身のスケッチの先頭に以下の1行を挿入してコンパイルします。 |
- | #include <SoftwareSerial.h> | + | #html{{ |
+ | <pre class="brush: c;"> | ||
+ | #include <SoftwareSerial.h></pre> | ||
+ | }} |