查看: 1119|回复: 0

[教程] MIND+ 1.5版本子线程模块功能简介

[复制链接]
201812月下旬DFRobot开了MIND+产品发布会,我有幸观看了网络发布会的全过程,还中了个小奖J。激动之余,我也下载了最新的1.5版本(www.mindplus.cc)尝尝鲜,居然发现了意外的惊喜~~~
image001.png
多线程模块发布了!~~对于我们这样的小白来说,这个模块真的帮了大忙了。这个模块到底有多神奇,且往下看。

我们在使用MIND+之前版本的时候,经常会遇到一个无解的问题:当一个程序在运行的如果同时需要运行另外一个程序,往往会因为两个程序相互干扰导致任务失败;比如在巡线的时候加入MICRO BIT点阵显示或者音乐程序,或者其他有延时功能的程序,往往就导致巡线失败。多线程模块就能很好的解决这个问题,它能允许几个程序同时运行而不会相互干扰。下面我就就利用手边的麦昆来说明这个问题,先来看两段程序:第一段调用了一个子程序
image003.png file:///C:/Users/李斌/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
第二段调用了一个子线程(多线程)
image005.png

这两段程序除了 子程序/子线程 外,其他模块全部一样。设计这两段程序基本思路是:把麦昆超声波探测到障碍物距离映射成小车前进速度,距离越近速度越慢;当距离小于15CM时,调用子程序/子线程,打开麦昆前面两个小灯;为了更加明显的说明问题,特别在子程序/子线程(多线程)中加了5秒延时,然后小灯熄灭。file:///C:/Users/李斌/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg

我分别拍了两段视频来说明子程序/子线程(多线程)的运行效果。

先来看视频一:子程序


从视频中可以明显看出来,子程序运行遇到障碍物的时候,麦昆停顿明显,说明子程序中5秒的延时对主程序影响很大;

再来看视频二:

从视频中可以看出子线程(多线程)运行遇到

障碍物时麦昆前进几乎没有延时(速度有快慢),说明子线程中的5秒延时对主程序运行几乎没有影响。

为了更清楚的看到程序运行的内部流程,我在主程序中加了串口打印,让我们把麦昆插上数据线连接电脑来看看串口显示了什么,从而能看出整个程序运行的状态。

同样先来看子程序运行视频:


从子程序串口打印视频中可以看出,在运行子程序的时候,当障碍物距离小于15CM,主程序调用子程序,在子程序5秒延时的时候主程序中的超声波探测是不工作的,所以我们会看到串口数字停留在5秒前探测到的最后一个障碍物距离;由于距离数字较小,转化成速度几乎接近于0,我们会看到小车停顿5秒后再前进。

再来看子线程(多线程)运行视频:


从视频中可以看出,在运行子线程(多线程)程序的时候,5秒的延时并不影响主程序中超声波的运行,所以我们会看到串口数字一直连续在轮动,映射成小车速度就是一直在前进,没有停顿。

现在我们可以来总结一下子程序和子线程(多线程)功能区别了:主程序在调用子程序的时候只运行子程序,主程序是停止运行的,要等子程序运行完成后再回来执行主程序;而主程序在调用子线程(多线程)的时候,子线程(多线程)与主程序是同时运行的。由此可知,当我们需要单个程序按条件顺序运行时可以调用子程序,当我们需要几个程序同时并行运行时我们可以调用子线程。

有了多线程的强大功能我们就可以尽我们所能压榨出所有硬件功能,让我们的创客生涯更加丰富多彩!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
关于楼主
上海智位机器人股份有限公司 沪ICP备09038501号-4

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

mail