2018-12-19 11:53:14 [显示全部楼层]
22654浏览
楼主: Forgotten

[资源下载] 【Mind+】自定义用户库,收集贴,最全Mind+用户库

  [复制链接]

石磊  学徒

发表于 2020-4-2 13:25:59

Forgotten 发表于 2020-4-1 10:58
如果搞不定可以把这个东西的资料给出来,然后帮忙测试

版主资料我已经发上来了,请帮忙。谢谢!
回复

使用道具 举报

石磊  学徒

发表于 2020-4-2 15:17:21

Forgotten 发表于 2020-4-1 10:58
如果搞不定可以把这个东西的资料给出来,然后帮忙测试

版主还需要什么资料?
回复

使用道具 举报

石磊  学徒

发表于 2020-4-2 16:06:22


  1. /******************************************************
  2. * FileName:      LobotServoController.cpp
  3. * Description:    Lobot舵机控制板二次开发库,本文件包含
  4.                  了此库的具体实现
  5. *****************************************************/
  6. #include "LobotServoController.h"
  7. #define GET_LOW_BYTE(A) (uint8_t)((A))
  8. //宏函数 获得A的低八位
  9. #define GET_HIGH_BYTE(A) (uint8_t)((A) >> 8)
  10. //宏函数 获得A的高八位
  11. #define BYTE_TO_HW(A, B) ((((uint16_t)(A)) << 8) | (uint8_t)(B))
  12. //宏函数 以A为高八位 B为低八位 合并为16位整形
  13. LobotServoController::LobotServoController()
  14. {
  15.         //初始化运行中动作组号为0xFF,运行次数为0,运行中标识为假,电池电压为0
  16.         numOfActinGroupRunning = 0xFF;
  17.         actionGroupRunTimes = 0;
  18.         isRunning = false;
  19.         batteryVoltage = 0;
  20. #if defined(__AVR_ATmega32U4__)  //for Arduino Leonardo,Micro....
  21.         SerialX = &Serial1;
  22. #else
  23.         SerialX = &Serial;
  24. #endif
  25. }
  26. LobotServoController::LobotServoController(HardwareSerial &A)
  27. {
  28.         LobotServoController();
  29.         SerialX = &A;
  30. }
  31. LobotServoController::~LobotServoController()
  32. {
  33. }
  34. /*********************************************************************************
  35. * Function:  moveServo
  36. * Description: 控制单个舵机转动
  37. * Parameters:   sevoID:舵机ID,Position:目标位置,Time:转动时间
  38.                     舵机ID取值:0<=舵机ID<=31,Time取值: Time > 0
  39. * Return:       无返回
  40. * Others:
  41. **********************************************************************************/
  42. void LobotServoController::moveServo(uint8_t servoID, uint16_t Position, uint16_t Time)
  43. {
  44.         uint8_t buf[11];
  45.         if (servoID > 31 || !(Time > 0)) { //舵机ID不能打于31,可根据对应控制板修改
  46.                 return;
  47.         }
  48.         buf[0] = FRAME_HEADER;                   //填充帧头
  49.         buf[1] = FRAME_HEADER;
  50.         buf[2] = 8;                              //数据长度=要控制舵机数*3+5,此处=1*3+5
  51.         buf[3] = CMD_SERVO_MOVE;                 //填充舵机移动指令
  52.         buf[4] = 1;                              //要控制的舵机个数
  53.         buf[5] = GET_LOW_BYTE(Time);             //填充时间的低八位
  54.         buf[6] = GET_HIGH_BYTE(Time);            //填充时间的高八位
  55.         buf[7] = servoID;                        //舵机ID
  56.         buf[8] = GET_LOW_BYTE(Position);         //填充目标位置的低八位
  57.         buf[9] = GET_HIGH_BYTE(Position);        //填充目标位置的高八位
  58.         SerialX->write(buf, 10);
  59. }
  60. /*********************************************************************************
  61. * Function:  moveServos
  62. * Description: 控制多个舵机转动
  63. * Parameters:   servos[]:舵机结体数组,Num:舵机个数,Time:转动时间
  64.                     0 < Num <= 32,Time > 0
  65. * Return:       无返回
  66. * Others:
  67. **********************************************************************************/
  68. void LobotServoController::moveServos(LobotServo servos[], uint8_t Num, uint16_t Time)
  69. {
  70.         uint8_t buf[103];    //建立缓存
  71.         if (Num < 1 || Num > 32 || !(Time > 0)) {
  72.                 return; //舵机数不能为零和大与32,时间不能为零
  73.         }
  74.         buf[0] = FRAME_HEADER;    //填充帧头
  75.         buf[1] = FRAME_HEADER;
  76.         buf[2] = Num * 3 + 5;     //数据长度 = 要控制舵机数*3+5
  77.         buf[3] = CMD_SERVO_MOVE;  //填充舵机移动指令
  78.         buf[4] = Num;             //要控制的舵机个数
  79.         buf[5] = GET_LOW_BYTE(Time); //取得时间的低八位
  80.         buf[6] = GET_HIGH_BYTE(Time); //取得时间的高八位
  81.         uint8_t index = 7;
  82.         for (uint8_t i = 0; i < Num; i++) { //循环填充舵机ID和对应目标位置
  83.                 buf[index++] = servos.ID; //填充舵机ID
  84.                 buf[index++] = GET_LOW_BYTE(servos.Position); //填充目标位置低八位
  85.                 buf[index++] = GET_HIGH_BYTE(servos.Position);//填充目标位置高八位
  86.         }
  87.         SerialX->write(buf, buf[2] + 2); //发送帧,长度为数据长度+两个字节的帧头
  88. }
  89. /*********************************************************************************
  90. * Function:  moveServos
  91. * Description: 控制多个舵机转动
  92. * Parameters:   Num:舵机个数,Time:转动时间,...:舵机ID,转动角,舵机ID,转动角度 如此类推
  93. * Return:       无返回
  94. * Others:
  95. **********************************************************************************/
  96. void LobotServoController::moveServos(uint8_t Num, uint16_t Time, ...)
  97. {
  98.         uint8_t buf[128];
  99.         va_list arg_ptr = NULL;
  100.         va_start(arg_ptr, Time); //取得可变参数首地址
  101.         if (Num < 1 || Num > 32 || (!(Time > 0)) || arg_ptr == NULL) {
  102.                 return; //舵机数不能为零和大与32,时间不能为零,可变参数不能为空
  103.         }
  104.         buf[0] = FRAME_HEADER;     //填充帧头
  105.         buf[1] = FRAME_HEADER;
  106.         buf[2] = Num * 3 + 5;      //数据长度 = 要控制舵机数 * 3 + 5
  107.         buf[3] = CMD_SERVO_MOVE;   //舵机移动指令
  108.         buf[4] = Num;              //要控制舵机数
  109.         buf[5] = GET_LOW_BYTE(Time); //取得时间的低八位
  110.         buf[6] = GET_HIGH_BYTE(Time); //取得时间的高八位
  111.         uint8_t index = 7;
  112.         for (uint8_t i = 0; i < Num; i++) { //从可变参数中取得并循环填充舵机ID和对应目标位置
  113.                 uint16_t tmp = va_arg(arg_ptr, uint16_t); //可参数中取得舵机ID
  114.                 buf[index++] = GET_LOW_BYTE(tmp); //貌似avrgcc中可变参数整形都是十六位
  115.                                                   //再取其低八位
  116.                 uint16_t pos = va_arg(arg_ptr, uint16_t); //可变参数中取得对应目标位置
  117.                 buf[index++] = GET_LOW_BYTE(pos); //填充目标位置低八位
  118.                 buf[index++] = GET_HIGH_BYTE(pos); //填充目标位置高八位
  119.         }
  120.         va_end(arg_ptr);     //置空arg_ptr
  121.         SerialX->write(buf, buf[2] + 2); //发送帧
  122. }
  123. /*********************************************************************************
  124. * Function:  runActionGroup
  125. * Description: 运行指定动作组
  126. * Parameters:   NumOfAction:动作组序号, Times:执行次数
  127. * Return:       无返回
  128. * Others:       Times = 0 时无限循环
  129. **********************************************************************************/
  130. void LobotServoController::runActionGroup(uint8_t numOfAction, uint16_t Times)
  131. {
  132.         uint8_t buf[7];
  133.         buf[0] = FRAME_HEADER;   //填充帧头
  134.         buf[1] = FRAME_HEADER;
  135.         buf[2] = 5;      //数据长度,数据帧除帧头部分数据字节数,此命令固定为5
  136.         buf[3] = CMD_ACTION_GROUP_RUN; //填充运行动作组命令
  137.         buf[4] = numOfAction;      //填充要运行的动作组号
  138.         buf[5] = GET_LOW_BYTE(Times); //取得要运行次数的低八位
  139.         buf[6] = GET_HIGH_BYTE(Times); //取得要运行次数的高八位
  140.         SerialX->write(buf, 7);      //发送数据帧
  141. }
  142. /*********************************************************************************
  143. * Function:  stopActiongGroup
  144. * Description: 停止动作组运行
  145. * Parameters:   Speed: 目标速度
  146. * Return:       无返回
  147. * Others:
  148. **********************************************************************************/
  149. void LobotServoController::stopActionGroup(void)
  150. {
  151.         uint8_t buf[4];
  152.         buf[0] = FRAME_HEADER;     //填充帧头
  153.         buf[1] = FRAME_HEADER;
  154.         buf[2] = 2;                //数据长度,数据帧除帧头部分数据字节数,此命令固定为2
  155.         buf[3] = CMD_ACTION_GROUP_STOP; //填充停止运行动作组命令
  156.         SerialX->write(buf, 4);      //发送数据帧
  157. }
  158. /*********************************************************************************
  159. * Function:  setActionGroupSpeed
  160. * Description: 设定指定动作组的运行速度
  161. * Parameters:   NumOfAction: 动作组序号 , Speed:目标速度
  162. * Return:       无返回
  163. * Others:
  164. **********************************************************************************/
  165. void LobotServoController::setActionGroupSpeed(uint8_t numOfAction, uint16_t Speed)
  166. {
  167.         uint8_t buf[7];
  168.         buf[0] = FRAME_HEADER;     //填充帧头
  169.         buf[1] = FRAME_HEADER;
  170.         buf[2] = 5;                //数据长度,数据帧除帧头部分数据字节数,此命令固定为5
  171.         buf[3] = CMD_ACTION_GROUP_SPEED; //填充设置动作组速度命令
  172.         buf[4] = numOfAction;      //填充要设置的动作组号
  173.         buf[5] = GET_LOW_BYTE(Speed); //获得目标速度的低八位
  174.         buf[6] = GET_HIGH_BYTE(Speed); //获得目标熟读的高八位
  175.         SerialX->write(buf, 7);      //发送数据帧
  176. }
  177. /*********************************************************************************
  178. * Function:  setAllActionGroupSpeed
  179. * Description: 设置所有动作组的运行速度
  180. * Parameters:   Speed: 目标速度
  181. * Return:       无返回
  182. * Others:
  183. **********************************************************************************/
  184. void LobotServoController::setAllActionGroupSpeed(uint16_t Speed)
  185. {
  186.         setActionGroupSpeed(0xFF, Speed); //调用动作组速度设定,组号为0xFF时设置所有组的速度
  187. }
  188. /*********************************************************************************
  189. * Function:  getBatteryVoltage
  190. * Description: 发送获取电池电压命令
  191. * Parameters:   无输入参数
  192. * Return:       无返回
  193. * Others:
  194. **********************************************************************************/
  195. void LobotServoController::getBatteryVoltage()
  196. {
  197.         uint8_t buf[4];
  198.         buf[0] = FRAME_HEADER;         //填充帧头
  199.         buf[1] = FRAME_HEADER;
  200.         buf[2] = 2;                   //数据长度,数据帧除帧头部分数据字节数,此命令固定为2
  201.         buf[3] = CMD_GET_BATTERY_VOLTAGE; //填充后的电池电压命令
  202.         SerialX->write(buf, 4);        //发送数据帧
  203. }
  204. /*********************************************************************************
  205. * Function:  receiveHandle
  206. * Description: 处理串口接收数据
  207. * Parameters:   无输入参数
  208. * Return:       无返回
  209. * Others:
  210. **********************************************************************************/
  211. void LobotServoController::receiveHandle()
  212. {
  213.         uint8_t buf[16];
  214.         static uint8_t len = 0;
  215.         static uint8_t getHeader = 0;
  216.         if (!SerialX->available())
  217.                 return;
  218.         //如果没有数据则返回
  219.         do {
  220.                 switch (getHeader) {
  221.                 case 0:
  222.                         if (SerialX->read() == FRAME_HEADER)
  223.                                 getHeader = 1;
  224.                         break;
  225.                 case 1:
  226.                         if (SerialX->read() == FRAME_HEADER)
  227.                                 getHeader = 2;
  228.                         else
  229.                                 getHeader = 0;
  230.                         break;
  231.                 case 2:
  232.                         len = SerialX->read();
  233.                         getHeader = 3;
  234.                         break;
  235.                 case 3:
  236.                         if (SerialX->readBytes(buf, len - 1) > 0)
  237.                                 getHeader = 4;
  238.                         else{
  239.                                 len = 0;
  240.                                 getHeader = 0;
  241.                                 break;
  242.                         }
  243.                 case 4:
  244.                         switch (buf[0]) {
  245.                         case BATTERY_VOLTAGE: //电池电压指令
  246.                                 batteryVoltage = BYTE_TO_HW(buf[2], buf[1]); //高低八位组合成电池电压
  247.                                 break;
  248.                         case ACTION_GROUP_RUNNING:         //有动作组被运行
  249.                                 numOfActinGroupRunning = buf[1]; //获得运行中动作组号
  250.                                 actionGroupRunTimes = BYTE_TO_HW(buf[3], buf[2]); //高低八位组合成运行次数
  251.                                 isRunning = true; //设置运行中标识为真
  252.                                 break;
  253.                         case ACTION_GROUP_STOPPED: //动作组停止
  254.                         case  ACTION_GROUP_COMPLETE://动作组运行完成
  255.                                 isRunning = false; //设置运行中标识为假
  256.                                 numOfActinGroupRunning = 0xFF; //设置运行中动作组号为0xFF
  257.                                 actionGroupRunTimes = 0; //设置运行次数为0
  258.                                 break;
  259.                         default:
  260.                                 break;
  261.                         }
  262.                 default:
  263.                         len = 0;
  264.                         getHeader = 0;
  265.                         break;
  266.                 }
  267.         } while (SerialX->available());
  268. }
复制代码
回复

使用道具 举报

石磊  学徒

发表于 2020-4-2 16:33:51

  1. /******************************************************
  2. * FileName:      LobotServoController.h
  3. * Description:   Lobot舵机控制板二次开发库的宏定义、类等
  4. *****************************************************/
  5. #ifndef LOBOTSERVOCONTROLLER_H
  6. #define LOBOTSERVOCONTROLLER_H
  7. #include <Arduino.h>
  8. //发送部分的指令
  9. #define FRAME_HEADER            0x55   //帧头
  10. #define CMD_SERVO_MOVE          0x03   //舵机移动指令
  11. #define CMD_ACTION_GROUP_RUN    0x06   //运行动作组指令
  12. #define CMD_ACTION_GROUP_STOP   0x07   //停止动作组运行指令
  13. #define CMD_ACTION_GROUP_SPEED  0x0B   //设置动作组运行速度指令
  14. #define CMD_GET_BATTERY_VOLTAGE 0x0F   //获得电池电压指令
  15. //接收部分的指令
  16. #define BATTERY_VOLTAGE       0x0F  //电池电压
  17. #define ACTION_GROUP_RUNNING  0x06  //动作组被运行
  18. #define ACTION_GROUP_STOPPED  0x07  //动作组被停止
  19. #define ACTION_GROUP_COMPLETE 0x08  //动作组完成
  20. struct LobotServo {  //舵机ID和位置结构体
  21.   uint8_t  ID;       //舵机ID
  22.   uint16_t Position; //舵机数据
  23. };
  24. class LobotServoController {
  25.   public:
  26.     LobotServoController();
  27.     LobotServoController(HardwareSerial &A);
  28.     ~LobotServoController();
  29.     void moveServo(uint8_t servoID, uint16_t Position, uint16_t Time);
  30.     void moveServos(LobotServo servos[], uint8_t Num, uint16_t Time);
  31.     void moveServos(uint8_t Num,uint16_t Time, ...);
  32.     void runActionGroup(uint8_t NumOfAction, uint16_t Times);
  33.     void stopActionGroup(void);
  34.     void setActionGroupSpeed(uint8_t NumOfAction, uint16_t Speed);
  35.     void setAllActionGroupSpeed(uint16_t Speed);
  36.     void getBatteryVoltage(void);
  37.     void receiveHandle(void);
  38.   public:
  39.     uint8_t  numOfActinGroupRunning; //正在运行的动作组序号
  40.     uint16_t actionGroupRunTimes; //正在运行的动作组运行次数
  41.     bool isRunning; //有动作组运行?
  42.     uint16_t batteryVoltage; //控制板电池电压
  43.     HardwareSerial *SerialX;
  44. };
  45. #endif
复制代码

回复

使用道具 举报

foxzenith  见习技师

发表于 2020-4-3 09:48:14

代码应该敲的东 发表于 2020-3-27 17:33
码云链接:https://gitee.com/dong223/dai-ext-PAJ7620U2-Gesture-Sensor

gitee的下载本地无法加载,直接在线加载可以成功。但是编译也如刚才那个同学所说,出错。原因是有个arduinoC/_menus/arduino.json文件是空的
回复

使用道具 举报

Forgotten  版主
 楼主|

发表于 2020-4-7 09:18:30

石磊 发表于 2020-4-1 16:48
一共两款16路舵机控制板。这是第一款

尝试中
回复

使用道具 举报

石磊  学徒

发表于 2020-4-9 06:52:56


非常感谢群主
回复

使用道具 举报

 中级技师

发表于 2020-4-9 20:36:02

,好多的库呀
回复

使用道具 举报

汤果  初级技神

发表于 2020-4-10 08:16:08

Ski 发表于 2020-3-17 16:29
https://gitee.com/csq5277/ext--LM35.git

这个软件中不是有LM35传感器吗?
回复

使用道具 举报

遥远2  见习技师

发表于 2020-4-17 00:54:56

谢谢分享,还是好人多啊
回复

使用道具 举报

遥远2  见习技师

发表于 2020-4-17 14:08:11

老师棒棒忙,UNO能用的用户库文件,怎么让nona也用上???
回复

使用道具 举报

Forgotten  版主
 楼主|

发表于 2020-4-19 22:48:59

遥远2 发表于 2020-4-17 14:08
老师棒棒忙,UNO能用的用户库文件,怎么让nona也用上???

看用户库的开发文档,修改config文件
回复

使用道具 举报

Forgotten  版主
 楼主|

发表于 2020-4-20 23:13:04

石磊 发表于 2020-4-1 16:48
一共两款16路舵机控制板。这是第一款

已经有人做了:  
https://gitee.com/chenqi1233/ext-Servo

回复

使用道具 举报

漫步者  初级技匠

发表于 2020-5-6 11:36:03

Forgotten 发表于 2020-4-20 23:13
已经有人做了:  
https://gitee.com/chenqi1233/ext-Servo

麻烦开发支持ESP8266,ESP32的库吧。
回复

使用道具 举报

GeGeBoom  学徒

发表于 2020-5-6 11:59:12

本地导入库总是提示这个错误怎么解决?
202005069518..png
回复

使用道具 举报

Forgotten  版主
 楼主|

发表于 2020-5-7 14:17:40

漫步者 发表于 2020-5-6 11:36
麻烦开发支持ESP8266,ESP32的库吧。

不支持这两个板子
回复

使用道具 举报

Forgotten  版主
 楼主|

发表于 2020-5-7 14:19:48

GeGeBoom 发表于 2020-5-6 11:59
本地导入库总是提示这个错误怎么解决?

163升级增加一个整体包的version字段在一级目录
Snipaste_2020-05-07_14-18-54.png
回复

使用道具 举报

GeGeBoom  学徒

发表于 2020-5-7 16:53:16

Forgotten 发表于 2020-5-7 14:19
163升级增加一个整体包的version字段在一级目录

感谢!问题已经解决。并分享一个L9110S/DRV8833通用电机驱动块:https://gitee.com/hejinlv/ext--L9110S.git
回复

使用道具 举报

DFr1MgPFDvL  学徒

发表于 2020-5-15 15:10:44

哪个大神有掌控板测土壤湿度的用户库吗
回复

使用道具 举报

Forgotten  版主
 楼主|

发表于 2020-5-16 19:01:46

GeGeBoom 发表于 2020-5-7 16:53
感谢!问题已经解决。并分享一个L9110S/DRV8833通用电机驱动块:https://gitee.com/hejinlv/ext--L9110S. ...

这是好东西,已经加入列表
https://mindplus.dfrobot.com.cn/ ... -libraries#target_2
回复

使用道具 举报

Nick-ccq  高级技师

发表于 2020-6-5 15:26:12

【Mind+扩展库发布】:L298N_红色直流电机驱动模块
https://mc.dfrobot.com.cn/forum. ... &fromuid=828608
(出处: DF创客社区 - 分享创造的喜悦)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail