本节将主要围绕360°舵机、超声波传感器、蜂鸣器三者组合进行模块化训练。本节的训练目的:第一,机器人直走时遇到障碍物就停,并且蜂鸣器报警;第二,机器人直走时遇到障碍物就原地右转,同时警报,转到大于3 倍距离再直走。第二个目的其实是第一个目的的改进,对机器人而言,第二个目的比第一个目的的智能程度更高。
1. 编程目标一
实现目标:机器人直走时遇到障碍物就停,并且蜂鸣器报警
(1)程序思维如图6-1-1 所示。
图6-1-1 程序思维
仔细琢磨图6-1-1 所示的程序思维图,要掌握程序一般要以条件语句优先,这句话的含义就是如果利用传感器来检测环境,那么就会产生多个情况,每一种情况就对应一种动作,由情况来对应动作的这个逻辑思维善加利用,将会大大提高编程效率。最常用的条件语句就是if…else…。
(2)程序代码如下:
(www.daowen.com)
(3)在程序中,警报动作使用间断警报即可,高电平时间短一点(40),低电平时间长一点(400),尽量避免太嘈杂。
2. 编程目标二
实现目标:机器人直走时遇到障碍物就原地右转,同时警报,转到大于3 倍距离再直走。
(1)程序思维图与图6-1-1 类似,需要动作稍作改变。
(2)程序代码如下:
(3)程序详解:
① 类似于超声波传感器测距的动作,可以通过定义函数来给它包装,如此在程序中多次调用时就可以直接调用其函数名即可,方便快捷。在2.1 节中已经讲述函数的定义使用void,例如:void SR05_distance (void){}。
② while(1){ }是一个死循环体,表示重复执行。然而,它经常与if(条件){break;}使用,即while(1){ if(条件){break;} },其含义代表重复执行某某直到条件成立时为止。这里break 的作用就是可以跳出while 循环。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。