您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > 全国大学生机器人搬运比赛部分程序(aw60)
图1比赛场地示意图图2机器人出发区示意图4//-------------------------------------------------------------------------*//机器人搬运比赛程序如下://项目名:基于FreescaleAW60的*//硬件连接:*//程序描述:定时器2作为颜色传感器计数器;定时器1通道0-1作为PWM输出;通道2作为颜色传感器的定时器溢出中断//超声波计数用定时器1*//说明:*//?*//*//作者信息?*//版本信息?*//完成时间?*//修订记录:*//时间:*//内容:?*//-------------------------------------------------------------------------*//调用头文件#includeIncludes.hvoidmain(void){//定义变量,不管在主程序还是子函数,都需要把变量的定义放在最前面,否则会报错intD=0;intm=0;charnum1=0;//用于计数用charnum2=0;//用于转弯计数用charflag_forward=1;//前进的标志位charflag_backward=1;//后退的标志位//用到的端口,一定要记得初始化端口数据方向寄存器//液晶模块//PTGDD|=0b00011111;//液晶模块IO的输入输出配置//颜色传感器模块//PTCDD|=0b00101100;//配置颜色传感器模块//PTFDD&=0b11111110;//红外传感器模块及驱动模块PTDDD=0b00000111;//PTDD4作为定时器2的外部时钟输入PTBDD=0b01000000;//前五个是红外传感器,最后两个是超声波的发送和接收PTEDD|=0b11111100;//配置驱动模块//PTEDD&=0b11111110;//配置红外接近传感器PTADD=0xFF;//PTFDD=0b00111111;//前两个口左右计数的口//2关总中断DisableInterrupt();//禁止总中断//3芯片初始化MCUInit();//4模块初始化PWM_Init(1,0x0fa0);//用作PWM输出控制电机周期最佳控制大概400ms左右(控制舵机用TPM_NUM_1,CH_2)//TPMinit(2);//用来作为颜色传感器的计数用外部时钟/*rb=0;//值的初始化bb=0;//值的初始化gb=0;//值的初始化ryz=0;//值的初始化byz=0;//值的初始化gyz=0;//值的初始化flag=0;//值的初始化*/num_black=0;num_left=0;num_right=0;D=60;//baipingheng();//EnableInterrupt();////开总中断*/while(1){//-------------------------------------------------------------------------*//文件名:无*//说明:完成直推三个目标*//作者:*//初始时间:*//修订记录:*//备注:程序顺序执行一遍就走完了全程,回到出发区*//-------------------------------------------------------------------------*/*while(num_black2){num_black=black_num(0);xunji_forward_3();}if(num_black==2){stop(0);DelayMs(100);while(num_right=1){num_right=black_num(1);xunji_forward_3();}stop(0);//到达目的地num_right=0;num_black=0;flag_backward==0;//作为后退的准备}while(flag_backward==0)//后退到赛道中心的程序{back_faward();DelayMs(1000);//等待黑线的过去if(COUNT_RIGHT==1){flag_backward=1;}}turn_left(2);//左转90角度.推第二个目标while(flag_forward==0){xunji_forward_3();if(COUNT_RIGHT==1){flag_forward=1;//直推完成flag_backward=0;//开始后退的旅程}}while(flag_backward==0){back_faward();if(COUNT_RIGHT==1){flag_backward=1;}}middle_faward(70);DelayMs(100);//避免再碰到黑线stop(0);DelayMs(2);//减缓电机的抖动Eleft(70);while(num_left=3)//左转180度推第三个目标{num_left=black_num(1);}if(num_left==3){num_left=0;num_black=0;//黑线数清零?}DelayMs(10);while(flag_forward==0){xunji_forward_3();if(COUNT_RIGHT==1){flag_forward=1;//直推完成flag_backward=0;//开始后退的旅程}}while(flag_backward==0){back_faward();if(COUNT_RIGHT==1){flag_backward=1;}}turn_left(3);back_faward();while(num_black2)num_black=black_num(0);back_faward();DelayMs(1000);*///-------------------------------------------------------------------------*//文件名:无*//说明:直走90度弯的程序*//作者:*//初始时间:*//修订记录:*//备注:在碰到第二根黑线之前程序要循环扫描,执行完程序就刚转90度弯,推物块到目的地,然后返回到中心停住的程序*//-------------------------------------------------------------------------*/*black_num(0);if(num_black==2){turn_left(4);num_black=0;//黑线数清零?flag_forward=0;//为直推做好准备,必须写的程序}elsexunji_forward_3();}while(flag_forward==0){xunji_forward_3();if(COUNT_RIGHT==1){flag_forward=1;//直推完成flag_backward=0;//开始后退的旅程}}while(flag_backward==0){back_faward();if(COUNT_RIGHT==1){flag_backward=1;while(1);}}*///-------------------------------------------------------------------------*//文件名:无*//说明:直走90度弯的程序*//作者:*//初始时间:*//修订记录:*//备注:在碰到第二根黑线之前程序要循环扫描,执行完程序就刚转90度弯而已,后面num1是被清零的,所以还是在执行循迹*//-------------------------------------------------------------------------*/*if(sensor_inp_forward()==0x1f)num1++;while(sensor_inp_forward()==0x1f);if(num1==2){Eleft(70);while(num24){if(num_right==1)num2++;//DelayMs(1000);while(num_right==1);}num1=0;//DelayMs(3000);}elsexunji_forward_3();*///-------------------------------------------------------------------------*//文件名:Robot_Run.c*//说明:双足机器人运动函数文件*//作者:*//初始时间:*//修订记录:*//备注:*//-------------------------------------------------------------------------*#includeRobot_Run.h//不同的车,因为电机接线不一样,对应的这些设置也会有变动,最好自己先测试这几个最基本的动作uint8flag_black=0,flag_right=0,flag_left=0;//车前的传感器uint8sensor_inp_forward(){unsignedcharsensor_forward;sensor_forward=PTBD;sensor_forward&=0x1F;returnsensor_forward;}//车后的传感器uint8sensor_inp_backward(){unsignedcharsensor_backward;sensor_backward=PTDD;sensor_backward&=0x07;returnsensor_backward;}//此段为前进程序启动voidmiddle_faward(uint8speed){PWM_Set(TPM_NUM_2,TPM1_CH_0,speed);PWM_Set(TPM_NUM_2,TPM1_CH_1,speed+4);//已经调整好的参数占空比百分之78IN1=1;IN2=0;IN3=1;IN4=0;DelayMs(2);//设置PWM设置的时间间隔}//此段为旋转左转程序程序启动voidleft(uint8speed){PWM_Set(TPM_NUM_2,TPM1_CH_0,speed-40);PWM_Set(TPM_NUM_2,TPM1_CH_1,speed);IN1=1;IN2=0;IN3=1;IN4=0;DelayMs(2);}//此段为旋转大左转程序程序启动voidEleft(uint8speed){PWM_Set(TPM_NUM_2,TPM1_CH_0,speed);PWM_Set(TPM_NUM_2,TPM1_CH_1,speed-20);IN1=1;IN2=0;IN3=0;IN4=1;DelayMs(2);}//此段为旋转右转启动程序voidright(uint8speed){PWM_Set(TPM_NUM_2,TPM1_CH_0,speed);PWM_Set(TPM_NUM_2,TPM1_CH_1,speed);IN1=1;IN2=0;IN3=1;IN4=0;DelayMs(2);}//此段为旋转大右转启动程序voidEright(uint8speed){PWM_Set(TPM_NUM_2,TPM1_CH_0,speed);PWM_Set(TPM_NUM_2,TPM1_CH_1,speed);IN1=0;IN2=1;IN3=1;IN4=0;DelayMs(2);}//此段为后退直走序程序启动voidback_faward(uint8speed){PWM_Set(TPM_NUM_2,TPM1_CH_0,speed);PWM_Set(TPM_NUM_2,TPM1_CH_1,speed+4);//已经调整好的参数占空比百分之78IN1=0;IN2=1;IN3=0;IN4=1;DelayMs(2);}//此段为旋转左转程序程
本文标题:全国大学生机器人搬运比赛部分程序(aw60)
链接地址:https://www.777doc.com/doc-1183458 .html