4: 2021-09-09 (木) 17:49:32 takaboo | 5: 2022-06-04 (土) 22:09:03 takaboo | ||
---|---|---|---|
Line 1: | Line 1: | ||
DXSHIELDを[[ソフトウェアシリアル>#ee08b548]]もしくは[[ハードウェアシリアル>#ce79cebb]]モードに設定した場合、ArduinoのスケッチからDynamixelを制御するためのライブラリが利用できます。~ | DXSHIELDを[[ソフトウェアシリアル>#ee08b548]]もしくは[[ハードウェアシリアル>#ce79cebb]]モードに設定した場合、Arduinoのスケッチから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と同様にプロトコルやシリアル通信を意識せずともコントロールテーブルへの読み書きが行えますが、Arduino版はメモリの都合から一部機能を制限したサブセット版となります。 |
-ライブラリのダウンロード(Arduino UNO/MEGAを想定)~ | -ライブラリのダウンロード(Arduino UNO/MEGAを想定)~ | ||
Line 6: | Line 6: | ||
---チェックサムの検証を厳密化 | ---チェックサムの検証を厳密化 | ||
---新たにReadBlockDataとWriteBlockData関数を追加し、コントロールテーブルの読み出し及び書き込みはこの関数を介するように変更 | ---新たにReadBlockDataとWriteBlockData関数を追加し、コントロールテーブルの読み出し及び書き込みはこの関数を介するように変更 | ||
- | ---プロトコルV2の例外時(0xFF 0xFF 0xFDの並びでデータが現れた場合に末尾に0xFDが付与)に0xFDの自動除去をReadBlockDataへ追加(制約あり) | + | ---プロトコルV2の例外時(0xFF 0xFF 0xFDの並びでデータが現れた場合に末尾に0xFDが付与)の処理を全ての関数へ適用(一部制約あり) |
---コンパイル時のwarningを抑止 | ---コンパイル時のwarningを抑止 | ||
Line 89: | Line 89: | ||
// ステータスパケットを受信 | // ステータスパケットを受信 | ||
dxif.RxPacket (buf, sizeof (buf), &id, &len, &err)</pre> | dxif.RxPacket (buf, sizeof (buf), &id, &len, &err)</pre> | ||
+ | }} | ||
+ | -&color(#0099ff){bool DXLIB/DX2LIB::''ReadBlockData'' (uint8_t id, uint16_t addr, uint8_t *data, uint16_t len, uint8_t *err)};~ | ||
+ | 指定されたID('''id''')・アドレス('''addr''')から8ビットのデータを'''data'''へ'''len'''の長さ分読み出します。'''err'''にはDynamixelのエラーが返ります。&br; | ||
+ | なおDX2LIBで4バイト以上を読み出す場合、まずサフィックスが付与された状態でdataへ読み出し、その後に必要に応じてサフィックス削除が行われます。そのため実際に必要なサイズよりも大きめにdataを確保しておく必要があります(最大で1.34倍)。 | ||
+ | #html{{ | ||
+ | <pre class="brush: c;"> | ||
+ | // ID=1のAX-12のComplianceを取得 | ||
+ | uint8_t compliance[4]; | ||
+ | dxif.ReadBlockData (1, 26, &compliance, 4, NULL);</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)};~ | ||
Line 108: | Line 117: | ||
-&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::''WriteBlockData'' (uint8_t id, uint16_t addr, const uint8_t *data, uint16_t len, uint8_t *err)};~ | ||
+ | 指定されたID('''id''')・アドレス('''addr''')・8ビットのデータ('''data''')・指定バイト数('''len''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 | ||
+ | #html{{ | ||
+ | <pre class="brush: c;"> | ||
+ | // ID=1のAX-12のComplianceを設定 | ||
+ | uint8_t err; | ||
+ | uint8_t compliance[4] = {1,1,32,32}; | ||
+ | dxif.WriteBlockData (1, 26, &compliance, 4, NULL);</pre> | ||
+ | }} | ||
+ | |||
-&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のエラーが返ります。 |