基于单片机的智能小车设计(红外避障) - 图文(7)

2019-05-18 23:24

轮式移动机器人的设计报告

M1B=0; M2A=1; M2B=0; }

void houtui() {

M1A=0; M1B=1; M2A=0; M2B=1; }

void zuozhuan() {

M1A=0; M1B=1; M2A=1; M2B=0; }

void youzhuan() {

M1A=1; M1B=0; M2A=0; M2B=1; }

void Delay1ms(unsigned int i) {

unsigned char j,k; do{ j = 10; do{ k = 50; do{ _nop_(); }while(--k); }while(--j); }while(--i); }

void delay_nus(unsigned int i) //

延时:i>=12 ,i的最小延时单12 us 26

轮式移动机器人的设计报告

{ i=i/10; while(--i); }

void delay_nms(unsigned int n) //延时n ms { n=n+1; while(--n)

delay_nus(900); //延时 1ms,同时进行补偿 }

void delayms(unsigned char x) //0.14mS{

unsigned char i; // while(x--) // {

for (i = 0; i<13; i++) {} //14mS } }

void Delay() //{

unsigned int DelayTime=30000; // while(DelayTime--); // return; //}

void ControlCar(unsigned char ConType) //{

tingzhi();

switch(ConType) // {

case 1: //前进 // {

//tingzhi();

击主板 导致系统复位 //Delay1ms(50); LeftLed = 0 ; qianjin();

break;

}

case 2: //后退 // {

// tingzhi();

延时程序 定义临时变量 延时时间循环 延时 定义延时子程序 定义延时时间变量 开始进行延时循环 子程序返回 定义电机控制子程序 判断用户设定电机形式 判断用户是否选择形式1 //进入前进之前 先停止一段时间 防止电机反向电压冲

判断用户是否选择形式2

//进入后退之前 先停止一段时间 防止电机反向 27

轮式移动机器人的设计报告

电压冲击主板 导致系统复位 // Delay1ms(50); LeftLed = 1 ; }

case 3: //左转 //判断用户是否选择形式3 {

//tingzhi(); }

case 4: //右转 //判断用户是否选择形式4 {

// tingzhi(); // Delay1ms(50); }

case 8: //停止 //判断用户是否选择形式8 {

tingzhi(); } } }

void ControlCar_yaokong(unsigned char ConType) //定义电机控制子程序 switch case 语句 ) {

tingzhi();

switch(ConType) //判断用户设定电机形式 {

case 1: //前进 //判断用户是否选择形式1 {

tingzhi();

//进入前进之前 先停止一段时间 防止电机反向电压冲

击主板 导致系统复位

Delay1ms(150); LeftLed = 0 ; qianjin();

28

(红外遥控单独设置一个

break; //退出当前选择 youzhuan(); //M1电机正转 break;

//M2电机反转

//进入右转之前 先停止一段时间 防止电机反向

电压冲击主板 导致系统复位

// Delay1ms(50);

zuozhuan(); //M2电机正转 break;

//进入左转之前 先停止一段时间 防止电机反向

电压冲击主板 导致系统复位

houtui(); //M2电机反转 break;

轮式移动机器人的设计报告

break; }

case 2: //后退 //判断用户是否选择形式2 {

tingzhi();

//进入后退之前 先停止一段时间 防止电机反向

电压冲击主板 导致系统复位 Delay1ms(150); LeftLed = 1 ; houtui(); //M2电机反转 break;

}

case 3: //左转 // {

tingzhi();

电压冲击主板 导致系统复位

Delay1ms(150);

zuozhuan(); //M2 break;

}

case 4: //右转 // {

tingzhi();

电压冲击主板 导致系统复位

Delay1ms(150); youzhuan(); //M1 break;

}

case 8: //停止 // {

tingzhi(); break; // } } }

void Robot_Avoidance() //{

LeftLed=LeftIR; // RightLed=RightIR; // FontLled= FontIR; SB1=FontIR;

if(FontIR == 0) // {

ControlCar(8); //

判断用户是否选择形式3

//进入左转之前 先停止一段时间 防止电机反向

电机正转 判断用户是否选择形式4

//进入右转之前 先停止一段时间 防止电机反向

电机正转 //M2电机反转

判断用户是否选择形式8 退出当前选择

机器人避障子程序 前方左侧指示灯指示出前方左侧红外探头状态 前方右侧指示灯指示出前方右侧红外探头状态 如果前面避障传感器检测到障碍物 停止 29

轮式移动机器人的设计报告

delay_nms (300); } else {

ControlCar(1); //右侧没有信号时,开始向左转一定的角度 delay_nms (10); }

ControlCar(1); }

//机器人循迹子程序

void Robot_Traction() //机器人循迹子程序 {

LeftLed=LeftIR; //前方左侧指示灯指示出前方左侧红外探头状态 RightLed=RightIR; //前方右侧指示灯指示出前方右侧红外探头状态 FontLled= FontIR; SB1=LeftIR;

if(LeftIR == 0 && RightIR == 0) //三个红外检测到黑线,就前进 {

ControlCar(1); //左侧没有信号时,开始向右转一定的角度 delay_nms (10); }

else if(LeftIR == 0 && RightIR == 1) {

ControlCar(3); //右侧没有信号时,开始向左转一定的角度 delay_nms (10); }

else if(LeftIR == 1 && RightIR == 0) {

ControlCar(4); //右侧没有信号时,开始向左转一定的角度 delay_nms (10); }

ControlCar(8); }

void main() //主程序入口 {

bit RunFlag=0; //定义小车运行标志位

LedFlash=3000; //对闪灯数据进行初始化

30

ControlCar(2); delay_nms (1000); ControlCar(3); delay_nms (1800);

//停止300MS 防止电机反相电压冲击 导致系统复位 //后退

//后退1500MS //


基于单片机的智能小车设计(红外避障) - 图文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:世界石油工业发展史论文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: