11676| 5
|
[教程] MIND+ 1.5版本子线程模块功能简介 |
2018年12月下旬DFRobot开了MIND+产品发布会,我有幸观看了网络发布会的全过程,还中了个小奖J。激动之余,我也下载了最新的1.5版本(www.mindplus.cc)尝尝鲜,居然发现了意外的惊喜~~~ 多线程模块发布了!~!~对于我们这样的小白来说,这个模块真的帮了大忙了。这个模块到底有多神奇,且往下看。 我们在使用MIND+之前版本的时候,经常会遇到一个无解的问题:当一个程序在运行的如果同时需要运行另外一个程序,往往会因为两个程序相互干扰导致任务失败;比如在巡线的时候加入MICRO BIT点阵显示或者音乐程序,或者其他有延时功能的程序,往往就导致巡线失败。多线程模块就能很好的解决这个问题,它能允许几个程序同时运行而不会相互干扰。下面我就就利用手边的麦昆来说明这个问题,先来看两段程序:第一段调用了一个子程序 file:///C:/Users/李斌/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg 第二段调用了一个子线程(多线程) 这两段程序除了 子程序/子线程 外,其他模块全部一样。设计这两段程序基本思路是:把麦昆超声波探测到障碍物距离映射成小车前进速度,距离越近速度越慢;当距离小于15CM时,调用子程序/子线程,打开麦昆前面两个小灯;为了更加明显的说明问题,特别在子程序/子线程(多线程)中加了5秒延时,然后小灯熄灭。file:///C:/Users/李斌/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg 我分别拍了两段视频来说明子程序/子线程(多线程)的运行效果。 先来看视频一:子程序 从视频中可以明显看出来,子程序运行遇到障碍物的时候,麦昆停顿明显,说明子程序中5秒的延时对主程序影响很大; 再来看视频二: 从视频中可以看出子线程(多线程)运行遇到 障碍物时麦昆前进几乎没有延时(速度有快慢),说明子线程中的5秒延时对主程序运行几乎没有影响。 为了更清楚的看到程序运行的内部流程,我在主程序中加了串口打印,让我们把麦昆插上数据线连接电脑来看看串口显示了什么,从而能看出整个程序运行的状态。 同样先来看子程序运行视频: 从子程序串口打印视频中可以看出,在运行子程序的时候,当障碍物距离小于15CM,主程序调用子程序,在子程序5秒延时的时候主程序中的超声波探测是不工作的,所以我们会看到串口数字停留在5秒前探测到的最后一个障碍物距离;由于距离数字较小,转化成速度几乎接近于0,我们会看到小车停顿5秒后再前进。 再来看子线程(多线程)运行视频: 从视频中可以看出,在运行子线程(多线程)程序的时候,5秒的延时并不影响主程序中超声波的运行,所以我们会看到串口数字一直连续在轮动,映射成小车速度就是一直在前进,没有停顿。 现在我们可以来总结一下子程序和子线程(多线程)功能区别了:主程序在调用子程序的时候只运行子程序,主程序是停止运行的,要等子程序运行完成后再回来执行主程序;而主程序在调用子线程(多线程)的时候,子线程(多线程)与主程序是同时运行的。由此可知,当我们需要单个程序按条件顺序运行时可以调用子程序,当我们需要几个程序同时并行运行时我们可以调用子线程。 有了多线程的强大功能我们就可以尽我们所能压榨出所有硬件功能,让我们的创客生涯更加丰富多彩! |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed