最近鄙人学单片机一直想尝试做东西实践一下,于是就决定做一个常见的智能小车,用两个红外对管模块和超声波传感器简单做了避障的功能,但是就出现了问题,程序修改了几次,也找同学一起研究了一下,还是想不到为啥,还望各位大佬指点迷津~
1.我用的红外对管模块,感觉这个模块不怎么好,电压5V电位调到最大,灵敏度只有12cm左右,大佬们都用过哪些更好的类似模块?
2.运行程序之后,小车遇到障碍会停下转弯,但是会有这种情况,前方明明没有障碍,小车前进(0~两三米)就会自动转弯,这个问题让我很纠结
单片机源码:
- #include<reg52.h>
- #define uc unsigned char
- #define ui unsigned int
- sbit IN1=P2^1; //L298N
- sbit IN2=P2^2;
- sbit IN3=P2^3;
- sbit IN4=P2^4;
- sbit ENA=P2^0;
- sbit ENB=P2^5;
- ui count1=50,count2=50,time;
- ui timer,date;
- sbit trig=P3^7; //超声波
- sbit echo=P3^6;
- sbit leftled=P3^5;
- sbit rightled=P3^4;
- void delay(ui i) //延时函数
- {
- while(i--);
- }
- void init0() //定时器0初始化,用于输出PWM
- {
- TMOD = 0x01;
- TH0 = (65536 - 10)/256;
- TL0 = (65536 - 10)%256;
- TR0 = 1;
- EA = 1;
- ET0 = 1;
-
- }
- void init1() //定时器1初始化,用于超声波测距
- {
- TMOD=0X01;
- TH1=0x00;
- TL1=0x00;
- }
- void super_start() //超声波发送信号
- {
- trig=1;
- delay(10);
- trig=0;
- }
- void super_count() //计算距离
- {
- timer=TH1*256+TL1;
- TH1=0x00;
- TL1=0x00;
- date=(timer*1.7)/100;
-
- }
- void cargo() //小车前进
- {
复制代码
|