2018-12-19 11:53:14 [显示全部楼层]
106093浏览
查看: 106093|回复: 285

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

  [复制链接]
本帖最后由 Forgotten 于 2023-9-26 17:08 编辑

说明

  • Mind+从V1.6.2开始可以使用用户自定义库了,本帖子收集各种用户库,如有自己写好或发现的Mind+用户库,可以将扩展库链接及功能简介回复本帖子加入此列表。- 点击这里 查看自定义用户库教程

收录用户库列表

收录用户库加载方式:直接搜索库名称中的关键词即可加载。

加载方式

加入收录列表

如有自制用户库,可回复本帖,经过管理员审核后可通过关键词搜索。   如果用户库已经收录,需要更新,则可以继续回帖,给出仓库名称和更新后的版本号。  


回复格式:  
1、扩展库加载界面图片或功能介绍:
2、积木截图:
3、git仓库链接(需要可以通过链接直接正常加载):
   
【可参考本帖置顶回复的格式】








Ski  初级技匠

发表于 2020-3-17 16:29:09

本帖最后由 Forgotten 于 2022-1-12 12:10 编辑

1、扩展库加载界面图片:
【Mind+】自定义用户库,收集贴,最全Mind+用户库图1
2、积木截图:
【Mind+】自定义用户库,收集贴,最全Mind+用户库图2

3、git仓库链接(已测试可以通过链接直接正常加载):
https://gitee.com/csq5277/ext--LM35.git


回复

使用道具 举报

石磊  学徒

发表于 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
复制代码

回复

使用道具 举报

伦**  初级技师

发表于 2024-3-3 18:24:05

好厉害!!!                                                                                                                                                                                                                           
回复

使用道具 举报

gada888  版主

发表于 2019-10-31 12:17:20

喜欢mind+。入门贼方便
回复

使用道具 举报

DFrJ5KYVQaH  中级技匠

发表于 2019-12-29 10:06:46

又有新版本了,真高兴
回复

使用道具 举报

huagulo  学徒

发表于 2020-1-6 10:58:44

有mac版吗
回复

使用道具 举报

Forgotten  版主
 楼主|

发表于 2020-1-8 11:02:33


有的,可以直接官网下载
http://mindplus.cc
回复

使用道具 举报

redtxd  见习技师

发表于 2020-2-12 16:41:13

问一下各位老师:iPad能装Mac版的Mind+吗。
回复

使用道具 举报

Forgotten  版主
 楼主|

发表于 2020-3-16 11:07:02

redtxd 发表于 2020-2-12 16:41
问一下各位老师:iPad能装Mac版的Mind+吗。

不可以的,可以尝试一下直接用chrome浏览器打开在线版mind+
回复

使用道具 举报

Ski  初级技匠

发表于 2020-3-16 16:17:20

好强大

欢迎来分享
回复

使用道具 举报

Sev7nKarat克拉  中级技师

发表于 2020-3-22 10:05:30

有人写了OTTO库吗
回复

使用道具 举报

Nick-ccq  NPC

发表于 2020-3-24 11:10:03


目前正在写。
回复

使用道具 举报

代码应该敲的东  中级技师

发表于 2020-3-27 17:33:08

回复

使用道具 举报

代码应该敲的东  中级技师

发表于 2020-3-27 19:37:07

代码应该敲的东 发表于 2020-3-26 17:14
https://github.com/dong223/dai-ext-PAJ7620U2-Gesture-Sensor-

这个github云端加载,会编译出错
回复

使用道具 举报

石磊  学徒

发表于 2020-3-31 16:20:55

真的很喜欢Mind+这款软件,请问如何添加16路舵机控制板模块
回复

使用道具 举报

Forgotten  版主
 楼主|

发表于 2020-3-31 19:53:57

石磊 发表于 2020-3-31 16:20
真的很喜欢Mind+这款软件,请问如何添加16路舵机控制板模块

可以按照用户库的教程,移植16路舵机驱动板的arduio库
回复

使用道具 举报

石磊  学徒

发表于 2020-4-1 09:43:52

Forgotten 发表于 2020-3-31 19:53
可以按照用户库的教程,移植16路舵机驱动板的arduio库

您的意思是需要我自己编写吗?如果我没有代码基础请问能帮助我解决吗?
回复

使用道具 举报

石磊  学徒

发表于 2020-4-1 10:02:14

Forgotten 发表于 2020-3-31 19:53
可以按照用户库的教程,移植16路舵机驱动板的arduio库

您的意思是需要我自己编写吗?如果我没有代码基础请问能帮助我解决吗?
回复

使用道具 举报

Forgotten  版主
 楼主|

发表于 2020-4-1 10:58:03

石磊 发表于 2020-4-1 10:02
您的意思是需要我自己编写吗?如果我没有代码基础请问能帮助我解决吗? ...

如果搞不定可以把这个东西的资料给出来,然后帮忙测试
回复

使用道具 举报

石磊  学徒

发表于 2020-4-1 16:48:20

一共两款16路舵机控制板。这是第一款

第一款舵机控制板样式

第一款舵机控制板样式

产品特点

产品特点

产品参数

产品参数
回复

使用道具 举报

石磊  学徒

发表于 2020-4-1 16:53:07

这是第二款

产品样式

产品样式

产品参数1

产品参数1

产品参数2

产品参数2
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail