各位大师好,我现在遇到难题了,希望高手能帮忙指点解决一下,感激不尽,
我需要写避障循迹程序,端口分配大致是这样:
p1.2 右转方向信号
p1.5 左转方向信号
p1.3 左轮pwm调速信号
p1.4 右轮pwm调速信号
p0.0 左边红外避障传感器输入信号
p0.1 前边红外避障传感器输入信号
p0.2 右边红外避障传感器输入信号
p2.0----p2.7 为循迹传感器信号输入
共有16路用2个锁存器控制,只用p2口
实现功能:当左边传感器被触发小车右转
当前边传感器被触发小车左转
当右边传感器被触发小车左转
当左、前边传感器被触发小车右转
当右、前边传感器被触发小车左转
当同时触发时,小车后退,直到左、右两侧传感器中的任意一个停止触发,小车停止倒退
以上触发都是低电平有效
麻烦您指点一下避障的程序该怎么些,先谢谢你了
我已解决此问题,特分享给大家,
我有三个传感器,分别装在左、前、右(z、q、y)
程序如下:
#include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit z=P0^0;//定义红外避障检测端口 sbit q=P0^4; sbit y=P0^2; sbit mz=P1^5;//定义电机Mz电平输出端口 sbit my=P1^2;//定义电机My电平输出端口 void delay_ms(uint z);//声明延时函数 main()//主函数 { uint i=0;//初始值设定 mz=1; my=1; while(1)//无限循环 { if(z==0&&q==1&&y==1)//表示z方有障碍物 进行y转向 { for(i=0;i<5;i++) { mz=1; my=0; delay_ms(100);//状态保持100ms mz=1; my=1; delay_ms(2);//状态保持2ms } } if(z==1&&q==0&&y==1)//表示前方有障碍物 进行y转向 { for(i=0;i<5;i++) { mz=1; my=0; delay_ms(100);//状态保持100ms mz=1; my=1; delay_ms(2);//状态保持2ms } } if(z==1&&q==1&&y==0)//表示y方有障碍物 进行z转向 { for(i=0;i<5;i++) { mz=0; my=1; delay_ms(100);//状态保持100ms mz=1; my=1; delay_ms(2);//状态保持2ms } } if(z==0&&q==0&&y==1)//表示z前方有障碍物 进行y转向 { for(i=0;i<5;i++) { mz=1; my=0; delay_ms(100);//状态保持100ms mz=1; my=1; delay_ms(2);//状态保持2ms } } if(z==1&&q==0&&y==0)//表示y前方有障碍物 进行z转向 { for(i=0;i<5;i++) { mz=0; my=1; delay_ms(100);//状态保持100ms mz=1; my=1; delay_ms(2);//状态保持2ms } } if(z==0&&q==0&&y==0)//表示前有障碍物 进行hou转向 { for(i=0;i<5;i++) { mz=0; my=0; delay_ms(100);//状态保持100ms mz=1; my=1; delay_ms(2);//状态保持2ms } } if(z==1&&q==1&&y==1)//表示前方无障碍物 直线行驶 { mz=1; my=1; delay_ms(2);//状态保持2ms } } }
我也试运行一下
zhangbiao 发表于 2011-7-3 09:04
**** 作者被禁止或删除 内容自动屏蔽 ****
zhangbiao 发表于 2011-7-3 09:04
我已解决此问题,特分享给大家,
我有三个传感器,分别装在左、前、右(z、q、y)
程序如下:
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |