完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
需要做一个小车控制系统~ 要求是规划一条螺旋路径与S路径,控制4轮小车沿路径运行,中途随意暂停,启动后沿该线路运行。 应该从何下手? 新手不懂。。。
|
|
相关推荐
3 个讨论
|
|
//我之前模仿AGV功能小车写的,给你借鉴一下。我知识有限。就看你怎么玩了。
#include #define uchar unsigned char #define uint unsigned int ***it BEEP=P0^7; ***it k1=P0^6; ***it k2=P0^5; unsigned char xunji;//轨道循迹switch 数据 unsigned char xunji2;//轨道循迹switch 数据2 unsigned char zhanwei;//站位数据 unsigned char shijian,dinshi;//控制站位时间 unsigned char shezhi; //控制站数量 unsigned char R; //前后标志位 //************************************************ unsigned char zhan_wei[]={ 1, 2, 3, 4, 5, 6//, 7, 8, 9, 10, //11,12,13,14,15,16,17,18,19,20, //21,22,23,24,25,26,27,28,29,30 }; //==============================站位数据 unsigned char ting_zhan_wei[]={ 1, 2, 3, 4, 5, 6//, 7, 8, 9, 10, // 11,12,13,14,15,16,17,18,19,20, // 21,22,23,24,25,26,27,28,29,30 }; //==============================停站数据 //************************************************ //============================ void zhixing(); //直行 void zhixing2();//直行2 void daotui(); //倒退 void zuozhuanwan1();//小左转弯 void youzhuanwan1();//小右转弯 void zuozhuanwan2();//大左转弯 void youzhuanwan2();//大右转弯 void zuozhuanwan3();//最大左转弯 void youzhuanwan3();//最大右转弯 void zuozhuanwan1_1();//小左转弯 void youzhuanwan1_1();//小右转弯 void zuozhuanwan2_2();//大左转弯 void youzhuanwan2_2();//大右转弯 void zuozhuanwan3_3();//最大左转弯 void youzhuanwan3_3();//最大右转弯 void chilushibie();//磁路检测数据 void xunjichazao();//磁路数据循迹查找 直走 void chilushibie2();//倒磁路检测数据 void xunjichazao2();//倒磁路数据循迹查找 倒走 void beep(); //发现障碍报警-蜂鸣器 void kaijibeep(void); //开机正常音 void zhangdianbeep(void); void yunxingbeep(void); //============================ void delayqudong(unsigned char t) //大概猜测3ms {unsigned char a1,b1; while(t--) { for(a1=15;a1>0;a1--) //15 for(b1=100;b1>0;b1--); // 100 } } //======================= void delay2(unsigned char t) {unsigned char a,b; while(t--) { for(a=10;a>0;a--) for(b=30;b>0;b--); } } //======================== void delay10ms(void) //误差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } //======================= void delay310us(void)//310us延时函数 { unsigned char i; for (i = 143; i > 0; i--); } //======================= void main(void) { kaijibeep();//开机正常音 P0=0xff; //按键初始化。 P2=0xff; //马达输出初始化。停车状态。 P1=0xff; //轨道检测初始化。 P3=0xff; //初始化 EA=1; //开总中断开关 EX1=1; //打开外部中断1开关 IT1=1; //触发方式设置//下降沿触发 EX0=1; //打开外部中断0开关 IT0=0; //触发方式设置//电平触发 PX0=1; //设置外部中断0为高优先级 PT0=1; //设置定时器0为高优先级 TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256; //设置初值 TL0=(65536-50000)%256; //ET0=1; //打开定时器中断 //TR0=1; //启动定时器 //============================= R=0; //**************************** shezhi=1; //第几站 shijian=4; //需要停多少秒? //**************************** while(1) { if(R==1) { chilushibie2(); xunjichazao2(); } else{ chilushibie(); xunjichazao(); } //yunxingbeep(); } } //==================================== void int0 () interrupt 0 //避障碍物中断 { if(k1==0) {delay10ms(); if(k1==1) { R=0; } } if(k2==0) {delay10ms(); if(k1==1) { R=1; } } if(k1==1) {//delay1(5); if(k2==1) { P2=0xff; //马达输出初始化。停车状态。 beep(); } } } //==================================== void int2 () interrupt 2 //站位中断 { unsigned char i=0; if(zhan_wei[zhanwei]==ting_zhan_wei[zhanwei]) { ET0=1; //打开定时器中断0 TR0=1; //启动定时器0 P2=0xff; zhangdianbeep(); do { P2=0xff; //马达输出初始化。停车。 if(dinshi==shijian) { dinshi=0; i=1; TR0=0; //关闭定时器0 ET0=0; //关闭定时器中断0 } }while(i==0);//*/ zhangdianbeep(); } zhanwei++; if(zhanwei==shezhi) {zhanwei=0; R=1; //EX1=0; //关外部中断1开关 } } //================================ void zhixing()//直行 { P2=0xaa; //delayqudong(1); //P2=0xff; } void zhixing2()//反向直行 { P2=0x55; //delayqudong(1); //P2=0xff; } void daotui()//倒退 { P2=0x55; delayqudong(5); P2=0xff; } //================= void zuozhuanwan1()//小左转弯 { P2=0xff; P2=0x0a; delay2(1); //while(xunji==0x08);//1000 P2=0xff; } void youzhuanwan1()//小右转弯 { P2=0xff; P2=0xa0; delay2(1); //while(xunji==0x01);//0001 P2=0xff; } void zuozhuanwan2()//大左转弯 {P2=0xff; P2=0x0a; delayqudong(5); //4 // while(xunji==0x0c); //1100 P2=0xff; } void youzhuanwan2()//大右转弯 { P2=0xff; P2=0xa0; delayqudong(5); //4 //while(xunji==0x03); //0011 P2=0xff; } void zuozhuanwan3()//最大左转弯 { P2=0xff; P2=0x5a; delayqudong(5); // delay(5); //while(xunji==0x0e); //1110 P2=0xff; } void youzhuanwan3()//最大右转弯 { P2=0xff; P2=0xa5; delayqudong(5); // delay(5); //while(xunji==0x07); //0111 P2=0xff; } //==================================倒走 void zuozhuanwan1_1()//倒小左转弯 { P2=0xff; P2=0x05; delay2(1); //while(xunji2==0x80);// P2=0xff; } void youzhuanwan1_1()//倒小右转弯 { P2=0xff; P2=0x50; delay2(1); //while(xunji2==0x10); P2=0xff; } void zuozhuanwan2_2()//倒大左转弯 {P2=0xff; P2=0x05; delayqudong(5); // while(xunji2==0xc0); P2=0xff; } void youzhuanwan2_2()//倒大右转弯 {P2=0xff; P2=0x50; delayqudong(5); //while(xunji2==0x30); P2=0xff; } void zuozhuanwan3_3()//倒最大左转弯 { P2=0xff; P2=0xa5; delayqudong(5); // delay(3); //while(xunji2==0xe0); P2=0xff; } void youzhuanwan3_3()//倒最大右转弯 { P2=0xff; P2=0x5a; delayqudong(5); // delay(3); // while(xunji2==0x70); P2=0xff; } //========================== void chilushibie() {//delay310us(); //delay310us(); xunji=0x0f&P1; } void chilushibie2() {//delay310us(); //delay310us(); xunji2=0xf0&P1; } void xunjichazao() { switch(xunji) { case 0x0f: P2=0xff;break;//停车 case 0x00: zhixing();break;//直行 case 0x04: zhixing();break;//0100直行 case 0x02: zhixing();break;//0010直行 case 0x09: zhixing();break;//1001直行 // 8421 case 0x07: youzhuanwan3();break;//0111右转最大弯 case 0x03: youzhuanwan2();break;//0011右转大弯 case 0x01: youzhuanwan1();break;//0001右转小弯 case 0x0d: youzhuanwan1();break;//1101右转小弯 case 0x05: youzhuanwan1();break;//0101右转小弯 case 0x0e: zuozhuanwan3();break;//1110左转最大弯 case 0x0c: zuozhuanwan2();break;//1100左转大弯 case 0x08: zuozhuanwan1();break;//1000左转小弯 case 0x0b: zuozhuanwan2();break;//1011左转大弯 case 0x0a: zuozhuanwan1();break;//1010左转小弯 } } void timer0 () interrupt 1 {unsigned char kk; TH0=(65536-50000)/256; //设置初值 TL0=(65536-50000)%256; kk++; if(kk==20)//1秒 {kk=0; dinshi++; } } void xunjichazao2() { switch(xunji2) { case 0xff: P2=0xff;break;//停车 case 0x00: zhixing2();break;//直行 1111 case 0x40: zhixing2();break;//0100直行 case 0x20: zhixing2();break;//0010直行 case 0x90: zhixing2();break;//1001直行 // 8421 case 0x70: youzhuanwan3_3();break;//0111右转最大弯 case 0x30: youzhuanwan2_2();break;//0011右转大弯 case 0x10: youzhuanwan1_1();break;//0001右转小弯 case 0xd0: youzhuanwan1_1();break;//1101右转小弯 case 0x50: youzhuanwan1_1();break;//0101右转小弯 case 0xe0: zuozhuanwan3_3();break;//1110左转最大弯 case 0xc0: zuozhuanwan2_2();break;//1100左转大弯 case 0xb0: zuozhuanwan2_2();break;//1011左转大弯 case 0x80: zuozhuanwan1_1();break;//1000左转小弯 case 0xa0: zuozhuanwan1_1();break;//1010左转小弯 // 8421 } } void beep() {unsigned int j; for (j = 490; j > 0; j--)//490 //响300ms { BEEP = ~BEEP; //输出频率800Hz delay310us(); //延时310us delay310us(); //延时310us } for (j = 490; j > 0; j--)//490 //关300ms { BEEP = 1; //关闭蜂鸣器 delay310us(); //延时310us delay310us(); //延时310us } } void kaijibeep(void) { unsigned int y; for (y = 500; y > 0; y--)//490 //响300ms { BEEP = ~BEEP; //输出频率800Hz delay310us(); //延时310us } for (y = 500; y > 0; y--)//490 //关300ms { BEEP = 1; //关闭蜂鸣器 delay310us(); //延时310us } } void zhangdianbeep(void) { unsigned int y; for (y = 200; y > 0; y--)//490 //响300ms { BEEP = ~BEEP; //输出频率800Hz delay310us(); //延时310us } for (y = 600; y > 0; y--)//490 //响300ms { BEEP = ~BEEP; //输出频率800Hz delay310us(); //延时310us } for (y = 600; y > 0; y--)//490 //关300ms { BEEP = 1; //关闭蜂鸣器 delay310us(); //延时310us } } void yunxingbeep(void) { unsigned int y; for (y = 200; y > 0; y--)//490 //响300ms { BEEP = ~BEEP; //输出频率800Hz delay310us(); //延时310us } for (y = 600; y > 0; y--)//490 //关300ms { BEEP = 1; //关闭蜂鸣器 delay310us(); //延时310us } } |
|
|
|
|
|
7 浏览 0 评论
26 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
13 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
644 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1000 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11771 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 21:08 , Processed in 0.595240 second(s), Total 66, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号