// ----------------------------------------------------------------------------- // Copyright (c) 2024 Mu Shibo // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // ----------------------------------------------------------------------------- //飞特STS3032舵机同步控制指令 //调用方式为sms_sts.SyncWritePosEx(ID, 2, Position, Speed, ACC); #ifndef _SERVO_STS3032_H #define _SERVO_STS3032_H #if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif //数据结构定义 typedef char s8; typedef unsigned char u8; typedef unsigned short u16; typedef short s16; typedef unsigned long u32; typedef long s32; //内存表定义 #define SMS_STS_ACC 41 #define INST_SYNC_WRITE 0x83 //飞特串行舵机通信层协议程序 class SCS{ public: SCS(); SCS(u8 End); SCS(u8 End, u8 Level); void syncWrite(u8 ID[], u8 IDN, u8 MemAddr, u8 *nDat, u8 nLen);//同步写指令 public: u8 Level;//舵机返回等级 u8 End;//处理器大小端结构 u8 Error;//舵机状态 u8 syncReadRxPacketIndex; u8 syncReadRxPacketLen; u8 *syncReadRxPacket; u8 *syncReadRxBuff; u16 syncReadRxBuffLen; u16 syncReadRxBuffMax; u32 syncTimeOut; protected: virtual int writeSCS(unsigned char *nDat, int nLen) = 0; virtual int writeSCS(unsigned char bDat) = 0; virtual void rFlushSCS() = 0; virtual void wFlushSCS() = 0; protected: void Host2SCS(u8 *DataL, u8* DataH, u16 Data);//1个16位数拆分为2个8位数 int Ack(u8 ID);//返回应答 int checkHead();//帧头检测 }; //飞特串行舵机硬件接口层程序 class SCSerial : public SCS { public: SCSerial(); SCSerial(u8 End); SCSerial(u8 End, u8 Level); protected: int writeSCS(unsigned char *nDat, int nLen);//输出nLen字节 int writeSCS(unsigned char bDat);//输出1字节 void rFlushSCS();// void wFlushSCS();// public: unsigned long IOTimeOut;//输入输出超时 HardwareSerial *pSerial;//串口指针 int Err; public: virtual int getErr(){ return Err; } }; //飞特SMS/STS系列串行舵机应用层程序 class SMS_STS : public SCSerial { public: virtual void SyncWritePosEx(u8 ID[], u8 IDN, s16 Position[], u16 Speed[], u8 ACC[]);//同步写多个舵机位置指令 }; #endif