算是做的第一个比较完整的序幕项目,用到的模块不多,更多时间花在调试硬件封方面,比如电池带不动电机导致51单片机重启。
项目框图
项目流程图
通过蓝牙发送指令控制小车的前进、后退、转向、调速等功能。
在小车运动过程中黄灯亮起,提示正在运动中。
当车头前20cm处有障碍物时自动停车,红灯亮起,同时禁用前进功能
代码
main.c
#include "bluetooth.h"
#include "srf.h"
#include "ln.h"
#include "pwm.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
extern unsigned char USART_RX_BUF[USART_MAX_RECV_LEN];//接收到的数据
sbit Led = P0^1; //电机运行指示灯
sbit Led1 = P0^0; //超声波测距指示灯
u8 Flag1=0;extern unsigned long S;
void delay(u16 i)
{while(i--);
}
void main()
{Led = 0;UsartInit(); //串口初始化initT0(); //PWM调速initT2(); //超声波测距//StartModule();!!! while(1){count();if((S<=20)&&(S>=2)) {//USART_RX_BUF[0]=0x15;if((Flag1<=3)&&(USART_RX_BUF[0]==0x13)){left_off();right_off();USART_RX_BUF[0]=0x15;Flag1++;} Led1 = 1;delay(100);}else{Led1 = 0;} if(USART_RX_BUF[0]==0x13){ //前left_up();right_up();Led = 1;Flag1 = 0; } if(USART_RX_BUF[0]==0x15){ //停left_off();right_off();Led = 0;Flag1 = 0; }else if(USART_RX_BUF[0]==0x11){ //后left_down();right_down();Led = 1;Flag1 = 0; }else if(USART_RX_BUF[0]==0x17){ //右 left_off();right_up();Led = 1;Flag1 = 0; }else if(USART_RX_BUF[0]==0x19){ //左right_off();left_up(); Led = 1;Flag1 = 0; }else if(USART_RX_BUF[0]==0x21){ //转圈left_up();right_down();Led = 1;Flag1 = 0; }else if(USART_RX_BUF[0]==0x29){ //加速speed_add(); }else if(USART_RX_BUF[0]==0x31){ //减速speed_reduce(); }delay(200); }
}
void Usart() interrupt 4
{unsigned char res;res=SBUF;USART_RX_BUF[0]=res;RI = 0;//清除接收中断标志位 if(USART_RX_BUF[0]==0x25){ //加速speed_add(); }else if(USART_RX_BUF[0]==0x27){ //减速speed_reduce(); }}
实物
实物图如下:(因材制宜)看着有点奇怪
主要知识点:
1、定时器2中断的使用
2、PWM调速
3、蓝牙通信
4、超声波测距
源码
项目源码
提取码:6666
一起学习,共同进步!