byte servo_id = 1; //サーボID(違うIDに変更する場合は変更) byte change_id_data[] = {0xFA, 0xAF, 0x01, 0x00, 0x04, 0x01, 0x01, 0x02, 0x07}; byte reset_data[] = {0xFA, 0xAF, 0xFF, 0x10, 0xFF, 0xFF, 0x00, 0xEF}; byte write_data[] = {0xFA, 0xAF, 0x01, 0x40, 0xFF, 0x00, 0x00, 0xBE}; byte torque_on_data[] = {0xFA, 0xAF, 0x01, 0x00, 0x24, 0x01, 0x01, 0x01, 0x24}; byte position_data[] = {0xFA, 0xAF, 0x01, 0x00, 0x1E, 0x04, 0x01, 0x00, 0x00, 0x64, 0x00, 0x7E}; void memcpy(byte* buf, byte* data, int n) // データ転送 { int sum = 0; for(int i = 0; i < n; i++){ buf[i] = data[i]; } } void checksum(byte* data, int n) // チェックサムの設定 { int sum = 0; for(int i = 2; i < n - 1; i++){ sum = sum ^ data[i]; } data[ n-1 ] = sum; } void setup() { byte data[12]; Serial.begin(115200); //115200bpsでポートを開く delay(1000); //1秒待つ Serial.write(reset_data,8); //サーボリセット delay(500); //0.5秒待つ Serial.write(torque_on_data,9); //サーボトルクON delay(500); //0.5秒待つ Serial.write(position_data,12); //原点まで回転 delay(500); //0.5秒待つ memcpy(data, change_id_data, 9); //サーボID変更データ転送 data[7] = servo_id; checksum(data, 9); //チェックサム計算 Serial.write(data,9); //サーボID変更 delay(500); //0.5秒待つ memcpy(data, write_data, 8); //ROM書込みデータ転送 data[2] = servo_id; checksum(data, 8); //チェックサム計算 Serial.write(data,8); //ROM書込み pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }