机器人源程序Word文档格式.docx
- 文档编号:15980095
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:11
- 大小:50.32KB
机器人源程序Word文档格式.docx
《机器人源程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《机器人源程序Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
安装开关是为了在烧录过程中及时不断开vcc,小车也不会乱跑,以后每次烧录都不必断开vcc。
intkey=7;
//定义按键数字12接口
intbeep=12;
//定义蜂鸣器数字7接口
voidkeysacn()
{
intval;
val=digitalRead(key);
//读取数字7口电平值赋给val
while(!
digitalRead(key))//当按键没被按下时,一直循环
{
//此句可省略,可让循环跑空
}
while(digitalRead(key))//当按键被按下时
delay(10);
//延时10ms
if(val==HIGH)
//第二次判断按键是否被按下
digitalWrite(beep,HIGH);
//蜂鸣器响
digitalRead(key))//判断按键是否被松开
digitalWrite(beep,LOW);
//蜂鸣器停止
else
//蜂鸣器停止
I/O口的意思即为INPUT
接口和OUTPUT接口,到目前为止我们设计的小灯实验都还只是应用到Arduino
的I/O口的输出功能,这个实验我们来尝试一下使用Arduino的I/O口的输入功能即为读取外接设备的输出值,
智能小车寻黑线
利用小车下端两个探头对光的不同反应来确定小车行驶路线,主要是当探测到白时小车行驶电机转动,
当左侧压到黑线及探测到黑时小车向左行驶,当右侧探头探测到黑时则向行驶,
只需在之前的程序上加一个判定的过程,十分简单
constintSensorRight=3;
//右循迹红外传感器(P3.2OUT1)
constintSensorLeft=4;
//左循迹红外传感器(P3.3OUT2)
SR=digitalRead(SensorRight);
//有信号表明在白色区域,车子底板上L3亮;
没信号表明压在黑线上,车子底板上L3灭
SL=digitalRead(SensorLeft);
//有信号表明在白色区域,车子底板上L2亮;
没信号表明压在黑线上,车子底板上L2灭
if(SL==LOW&
&
SR==LOW)
run();
//调用前进函数
elseif(SL==HIGH&
SR==LOW)//左循迹红外传感器,检测到信号,车子向右偏离轨道,向左转
left();
elseif(SR==HIGH&
SL==LOW)//右循迹红外传感器,检测到信号,车子向左偏离轨道,向右转
right();
else//都是白色,停止
brake();
这里使用了与的语句,当左边高电平右边低电频时想左,当左边低电平右边高电平时向右,若都是高电平则停车
这里的if
else语句也满足了小车在行驶时的各种情况
.智能小车红外避障
与黑线实验类似,只是将判定写到了红外探头中,当红外探头探测到障碍时小车停止或者转向或者跟随障碍物行驶指向哪里走到哪里。
遇到障碍物后退
else//都是有障碍物,后退
back(3);
这里是与其他两个程序不同的一点,遇到了障碍则后退
SR_2=digitalRead(SensorRight_2);
SL_2=digitalRead(SensorLeft_2);
if(SL_2==HIGH&
SR_2==HIGH)
elseif(SL_2==HIGH&
SR_2==LOW)//右边探测到有障碍物,有信号返回,向左转
elseif(SR_2==HIGH&
SL_2==LOW)//左边探测到有障碍物,有信号返回,向右转
else//都是有障碍物,后退
遇到障碍物跟随
elseif(SL_2==HIGH&
SR_2==LOW)
left();
这里与上一个程序不同,是跟随障碍物
哪里有障碍物就向哪里走,这是与上一个程序不同的地方,
若前方没有障碍物则停车
可以在这句话中体现
else//没有障碍物,停
brake();
if(SL_2==LOW&
SR_2==LOW)
run();
SL_2==LOW)//左边探测到有障碍物,有信号返回,向左转
else//没有障碍物,停
遇到障碍物转向这里遇上两个程序不同的是增加了一个自动寻路功能,遇到障碍物后可以自己调节方向
可以在下面这句话中体现else//都是有障碍物,后退
back(4.5);
//后退
spin_right(4.5);
//有旋转,调整方向
先停车,停车之后转向,使得小车十分灵活,规避障碍物
智能小车超声波测距实验
这里程序中大家可以看到Fdistance=Fdistance/58;
这里选择除以58后再输出是因为为什么除以58等于厘米,
Y米=(X秒*344)/2,
X秒=(2*Y米)/344==》X秒=0.0058*Y米==》厘米=微秒/58
voidDistance_test()
//量出前方距离
digitalWrite(Trig,LOW);
//给触发脚低电平2μs
delayMicroseconds
(2);
digitalWrite(Trig,HIGH);
//给触发脚高电平10μs,这里至少是10μs
delayMicroseconds(10);
//持续给触发脚低电
floatFdistance=pulseIn(Echo,HIGH);
//读取高电平时间(单位:
微秒)
Fdistance=Fdistance/58;
//为什么除以58等于厘米,
Y米=(X秒*344)/2
//X秒=(2*Y米)/344==》X秒=0.0058*Y米==》厘米=微秒/58
Serial.print("
Distance:
"
);
//输出距离(单位:
厘米)
Serial.println(Fdistance);
//显示距离
Distance=Fdistance;
}
智能小车超声波避障实验(无舵机)?
?
这里只是比之前多了一个转向遇到障碍物可以转向躲避,并测出距离
这时的小车已经十分的灵活,可以根据距离选择行驶的模式
可以在下面这句话体现
while(Distance<
60)//再次判断是否有障碍物,若有则转动方向后,继续判断
right
(1);
//右转
brake
(1);
//停车
Distance_test();
//测量前方距离
Distance_display();
//液晶屏显示距离
遇到障碍物先停车后向右转向
Distance_test();
if(Distance<
60)//数值为碰到障碍物的距离,可以按实际情况设置
while(Distance<
//无障碍物,直行
智能小车超声波避障实验(有舵机)?
while
(1)
front_detection();
if(Front_Distance<
32)//当遇到障碍物时
back
(2);
//后退减速
brake
(2);
//停下来做测距
left_detection();
//测量左边距障碍物距离
Distance_display(Left_Distance);
right_detection();
//测量右边距障碍物距离
Distance_display(Right_Distance);
if((Left_Distance<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机器人 源程序