#define p 120    //定义火焰传感器检测到火焰的返回值

int k,j,i=0,n,b=1,c=1;   //程序控制变量,不必更改

int m=i;

int pro,end=1;

void main()    //主程序

{

while(analog(6)>100)   //声控启动

{

}

while(!(analog(2)>100))  //走出白色超始区

{

motor(0,80);

motor(1,80);

}

pro=start_process(test());  //启动地面标志线检测进程

while(1)    //灭火与迷宫程序切换

{

if (analog(3)               {

fire();

}

else        //没有发现火焰,进入迷宫子程序

{

migong();

}

}

}

void migong()    //迷宫子程序

{

if(digital(8)==0 II digital(9)==0)     //如果前方 或 右45度角红外检测到障碍物,左转

{

motor(0,-70);       //根据情况,调节功率参数,以下雷同

motor(1,70);

}

else if(digital(14)==0 && digital(9)==1 && digital(8)==1)  //如果只右方有障碍物,直行

{

motor(0,100);

motor(1,100);

}

else        //如果没有障碍物,右转

{

motor(0,100);

motor(1,-100);

motor(1,10);

motor(0,90);

}

if((i>2)&&(i>m))       //如果标志线数大于2且标志线有变化(针对1、2、3号房间)

{

stop();

while(analog(3)>150 && analog(5)>150 && analog(4)>150)   //如果没有检测到火焰

{

motor(0,70);       //右转

motor(1,-70);

if(digital(14)==0)       //右红外检测到障碍物,停止转动

break;

}

m=i+1;         //更改标志线的对比变量

}

if(i==1 && b && (analog(3)>150 && analog(5)>150 && analog(4)>150)) //4号房间,检测到第1条标志线,且没有火焰

{

while(digital(9)==0 II digital(8)==0 II digital(14)==0)   //任意右手红外传感器有障碍物,右转

{

motor(0,70);

motor(1,-70);

}

while(digital(9)==1)       //前方传感器没有障碍物,右前进

{

motor(0,100);

motor(1,70);

}

b=0;         //控制变量

}

}

void fire()    //灭火子程序

{

if((i>4 II i<8) && c)      //如果在2号房间

{

while(analog(3)               {

motor(0,-60);

motor(1,60);

}

motor(0,60);        //强制直行一段

motor(1,60);       //主要是解决2号房间右手法则灭火时的碰墙的情况

sleep(0.6);

c=0;

}

while(analog(5)<10 && analog(2)<60)     //如果火焰距离合适 且 检测到地面标志线,灭火

{

motor(0,-10);       //后退一段

motor(1,-10);

sleep(0.15);

stop();

motor(2,100);       //灭火

sleep(2.000);

stop();

motor(0,-70);       //灭完火,后退一段

motor(1,-100);

sleep(0.2);

kill_process(pro);      //关掉地面标志线检测进程

select();       //进入回家子程序选择子程序

}

while(analog(3)-analog(4)> 3)     //向右调整,如果调整较频繁,修改最后的3

{

motor(0,50);

motor(1,-50);

}

while(analog(4)-analog(3)> 3)     //向左调整,同上

{

motor(0,-50);

motor(1,50);

}

motor(0,40);       //直行

motor(1,40);

}

void test()        //地面标志线检测子程序

{

while(1)

{

k=analog(2);

if(k<30 II k>150)      //30 和 150 分别为底部传感器检测到的的标志线和黑地面

j=k;        //的值,请根据实际测试值适当修改

if((j<30) && (n>150))      //如果更改,此处也一并更改

{

i++;

beep();

}

n=j;

}

}

void select()        //回家程序选择子程序

{

if(i<3)        //如果地面标志线条数小于3(即在4号房间)

gohome_4();       //进入4号房间回家子程序,下同

else if(i<5)

gohome_3();

else if(i<8)

gohome_2();

else

gohome_1();

}

void gohome_4()     //4号房间回家子程序

{

start_process(endstop());   //开启终(起)点停止进程序,下同

mg_right();     //右手法则回家

stop();     //停止

sleep(100.0);

}

void gohome_3()     //3号房间回家子程序

{

start_process(endstop());

mg_left();     //左手法则回家

stop();

sleep(100.0);

}

void gohome_2()     //2号房间的特殊回家程序

{

motor(0,60);    //灭完火后右转一段

motor(1,-60);

sleep(0.2);

reset_system_time();   //系统时间复位

while(mseconds()<2100L)   //运行左手法则走迷宫2.1秒(时间长短为可以走出房间门口且不到3号房间的走廊)

{

while(digital(9)==0 II digital(10)==0)

{

motor(0,60);

motor(1,-50);

}

while(digital(15)==0 && digital(9)==1 && digital(10)==1)

{

motor(0,50);

motor(1,50);

}

while(digital(15)==1 && digital(9)==1 && digital(10)==1)

{

motor(0,-80);

motor(1,80);

motor(0,45);

motor(1,80);

}

}

stop();

sleep(0.1);

while(digital(9)==0)   //如果前方有障碍物,右转(调整姿势)

{

motor(0,60);

motor(1,-60);

}

while(digital(9) == 1)   //如果前方没有障碍物,左、右手法则并进,基本上直行到另一端(3号房间旁)

{

if(digital(8)==0 )   //右边45度有障碍物,左转

{

motor(0,-50);

motor(1,50);

}

if(digital(14)==0 && digital(8)==1) //右边有障碍物且右45度角无障碍物,直行

{

motor(0,50);

motor(1,50);

}

if(digital(10)==0)   //左边45度有障碍物,右转

{

motor(0,50);

motor(1,-50);

}

if(digital(15)==0 && digital(10)==1) //左边有障碍物且左45度角无障碍物,直行

{

motor(0,50);

motor(1,50);

}

motor(0,50);    //直行

motor(1,50);

}

start_process(endstop());   //前方有障碍物时,退出循环,开启终点停止进程

while(end)     //左手法则走迷宫

{

if(digital(9)==0 II digital(10)==0)

{

motor(0,60);

motor(1,-50);

}

else if (digital(15)==0 && digital(9)==1 && digital(10)==1)

{

motor(0,70);

motor(1,70);

}

else

{

motor(0,-80);

motor(1,80);

motor(0,40);

motor(1,100);

}

}

motor(0,-100);    //终点刹车

motor(1,-100);

sleep(0.1);

stop();     //停止

sleep(100.0);

}

void gohome_1()     //1号房间回家

{

start_process(endstop());   //开启终点停止进程

mg_right();     //右手法则走迷宫

stop();

sleep(100.0);

}

void mg_right()     //右手法则走迷宫子程序

{

while(end)

{

if(digital(8)==0 II digital(9)==0)

{

motor(0,-70);

motor(1,70);

}

else if(digital(14)==0 && digital(9)==1 && digital(8)==1)

{

motor(0,100);

motor(1,100);

}

else

{

motor(0,100);

motor(1,-100);

motor(1,20);

motor(0,100);

}

}

}

void mg_left()     //左手法则走迷宫子程序

{

while(end)

{

if(digital(9)==0 II digital(10)==0 )

{

motor(0,60);

motor(1,-50);

}

else if(digital(15)==0 && digital(9)==1 && digital(10)==1)

{

motor(0,70);

motor(1,70);

}

else

{

motor(0,-100);

motor(1,100);

motor(0,30);

motor(1,100);

}

}

}

void endstop()     //终点停止进程子程序

{

while(1)

{

k=analog(2);    //检测1次

sleep(0.02);    //间隔0.02秒,再检测 //可适当缩短或延长时间

if(k<50 && analog(2)<50)  //如果2次都是白色,终点到,停止

{

end=0;

stop();

sleep(1.0);

}

}

}

//全部程序结束

灭火机器人C语言程序,灭火小车传感器接法与单片机源程序相关推荐

  1. 灭火机器人C语言程序,广茂达机器人灭火程序(纯C语言).doc

    广茂达机器人灭火程序(纯C语言) float tim_1=0.0; /*时间变量:不用*/ float gf_1=0.0; /*速度功率值 */ int mic_1=0; /*声音值,AI8或AI12 ...

  2. 灭火机器人C语言程序,广茂达机器人灭火程序(纯C语言版).doc

    广茂达机器人灭火程序(纯C语言版) 广茂达机器人灭火程序(纯C语言版).txt看一个人的的心术,要看他的眼神:看一个人的身价,要看他的对手:看一个人的底牌,要看他的朋友.明天是世上增值最快的一块土地, ...

  3. 灭火机器人路径规划matlab_灭火机器人路径规划研究

    灭火机器人路径规划研究 王艳春 ; 马驰 ; 赵鑫 ; 郝玲 ; 张婷 [期刊名称] <信息通信> [年 ( 卷 ), 期] 2018(000)001 [摘要] 随着社会的需求和技术的快速 ...

  4. 单片机六位抢答器c语言程序,八路电子抢答器(基于51单片机的8路抢答器设计C语言程序)...

    哥,你还有AT89C51单片机8路抢答器的资料吗 哥,你还有AT89C51单片机8路抢答器的资料吗 AT89C51单片机8路抢答器的资料 源程序如下 #include #define uchar un ...

  5. 温度传感器的c语言程序,DS18B20数字温度传感器C语言程序实例

    51单片机DS18B20数字温度传感器设计 与C程序 #include #define uchar unsigned char #define uint unsigned int #define DQ ...

  6. dht11传感器c语言程序,数字温湿度传感器DHT11 操作C语言源代码

    //IO定义 #define P_DataIN_DHT11 PB0_IN #define P_DataOUT_DHT11 PB0_OUT //宏定义 #define BSET_DHT11 P_Data ...

  7. c32循迹小车c语言程序,STM32小车红外黑线循迹源程序

    /********************************* 深圳市航太电子 ******************************* * 实 验 名 :小车红外黑线循迹 * 实验说明 ...

  8. 8个流水灯c语言程序按顺序亮,求由AT89S52单片机,8个LED,流水灯程序,要求八灯一盏接一盏闪烁,且循环不灭,,要求用c语...

    厦小伙子 t--) for(bt=0; } temp=0x80;/i8 个流水灯反向逐个闪动 { P2=~temp;<8;/ 声明延时函数 void main(void) { uint i.05 ...

  9. 自动感光调节LED灯亮度C语言程序,红外感应LED亮度调节(附单片机程序).doc

    西南科技大学毕业设计第 PAGE 25页 共 22页西南科技大学毕业设计第 PAGE 1页 共19页 摘 要为了解决长明灯所造成的能源浪费而设计出了利用红外热释传感器控制楼道灯开关的电路.当白天光照很 ...

最新文章

  1. CentOS中的中文乱码问题的解决
  2. 学习笔记之APACHE ANT
  3. 计算机高层应用,计算机网络中高层应用.ppt
  4. MySQL查看数据库相关信息
  5. 我背着女朋友,用 Python 偷偷抓取了她的行踪
  6. JS滚动条位置,顶部,底部,触发事件
  7. python min函数 索引_使用列表中的max()/ min()获取返回的max或min项的索引
  8. 微信地位,牢不可破?
  9. vue watch高级用法
  10. 项目运行报‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件“
  11. android自定义ClockView
  12. c++ 中类重复定义的分析与解决办法
  13. Depth Map Prediction from a Single Image using a Multi-Scale Deep Network--Eigen D
  14. 计算机关机怎么按,按什么键电脑关机
  15. Android Studio开发中的各种开源API
  16. 华硕笔记本触控板设置 Smart Gesture
  17. 服务器虚拟化的毕业设计,虚拟化技术毕业论文题目精选
  18. 电脑显示受限制无连接应该怎么办
  19. 浅析 Hinton 最近提出的 Capsule 计划
  20. js:进制转换、保留指定位数小数、RGB/Hex颜色色值转换

热门文章

  1. C primer plus复习题答案(下)
  2. 十四款原创纯DOS(硬盘,软盘,光盘,闪盘,虚拟盘 通用)新版杀毒软件
  3. [软考]信息安全工程师-第6章 认证技术原理与应用 课件知识点整理
  4. ximalaya音频URL解密
  5. 【GStreamer 】5-1 gstreamer实现RTSP相机显示
  6. matplotlib学习笔记(3)---热力图(Heat Map)
  7. Python编程对列表中字典元素进行排序的方法详解
  8. wordpress主题是php开发的吗,wordpress主题免费吗
  9. 怎么从计算机中往打印机传,打印机怎么传真 打印机传方法【详细介绍】
  10. 用独孤九剑的方式看设计模式