Class for Futaba Servo motor RS3xx series
Dependents: Hobby_Humanoid_controlor
RS300.cpp
- Committer:
- syundo0730
- Date:
- 2013-09-25
- Revision:
- 2:1ab1adf0915c
- Parent:
- 1:64e11d4c49ae
File content as of revision 2:1ab1adf0915c:
#include "RS300.h" RS300::RS300(PinName tx, PinName rx) : serial(tx, rx) { serial.baud(115200); } void RS300::send_packet(uint8_t adr, std::vector<uint8_t> &data, uint8_t cnt, uint8_t id, uint8_t flag) { std::vector<uint8_t> buf; buf.push_back(0xFA);//Header :H buf.push_back(0xAF);//Header :L buf.push_back(id); //id buf.push_back(flag);//flag buf.push_back(adr); //adress buf.push_back(data.size() / cnt);//data size buf.push_back(cnt);//amount of servo buf.insert(buf.end(), data.begin(), data.end());//data uint8_t sum = buf[2];//check sum from id to data for (int i = 3, size = buf.size(); i < size; ++i) { sum = sum ^ buf[i]; } buf.push_back(sum); for (std::vector<uint8_t>::iterator i = buf.begin(); i != buf.end(); ++i) { serial.putc(*i); } } void RS300::on_all_servo() { std::vector<uint8_t> dat; dat.push_back(0x01); for (uint8_t i = 1; i < 10; ++i) send_packet(0x24, dat, 1, i);//adress, on, servo amount, id(all) } void RS300::off_all_servo() { std::vector<uint8_t> dat; dat.push_back(0x00); send_packet(0x24, dat, 1, 0xFF);//adress, off, servo amount, id(all) } void RS300::send_servo_pos(uint8_t id_s, std::vector<uint16_t> &pos) { std::vector<uint8_t> buf; { uint8_t id = id_s; std::vector<uint16_t>::iterator i = pos.begin(); for ( ; i != pos.end(); ++i, ++id) { buf.push_back(id); buf.push_back((uint8_t)((*i) & 0x00FF)); buf.push_back((uint8_t)((*i) >> 8)); } } send_packet(0x1E, buf, pos.size()); }