聊城大学理工学院-嵌入式课程设计-stm32f407小车

最近两天有点偷懒了,什么都不想做,所以今天不接着弄上次的GPS模块了,今天就分享点别的-----大三时做的嵌入式课程设计。当时做好后也算是好几个班流传最广的版本了,所以多少还是很有点成就感的。
实现的具体功能如下:
运用STM32F407ZGT6为核心的开发板,实现玩具小车的控制。控制内容包括:
1.可利用按键进行小车行驶控制(前进、后退、左转、右转);
2.可用电位器实现小车速度调整;
3.可利用红外遥控器控制小车运行;
4.可利用显示屏将当前小车运行状态显示在屏幕上。
5.可利用蓝牙控制小车状态
6.可以利用蓝牙控制小车循迹功能开关实现小车自动循迹
7.可以利用超声波模块实现小车的避障转向功能
记得当时老师要求是至少实现5个还是6个功能,我当时做了以上7个功能。一共有8个功能可选最后一个是关于mpu6050的,关于这个模块我们以后细讲。
至于代码部分还是展示一部分吧

int main()
{	
	u8 lab = 0;					//循迹控制标志
	u8 i=0;
	u8 key; 
	u16 value=0;
	u16 value1=0;
	float vol, vol_1;		//声明一些程序用到的变量
	
	long long indata=0;
	float distance=0;		//超声波测距用到的变量
	
	SysTick_Init(168);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
	LED_Init1();				//led和电机引脚初始化
	gpio_Init();
	USART1_Init(9600);
	USART3_Init(9600);	//串口初始化
	ADCx_Init();				//adc数模转换初始化
	KEY_Init();					//按键初始化
	Hwjs_Init();				//红外模块初始化
	TFTLCD_Init();			//LCD初始化
	TIM12_CH1_PWM_Init(500-1,84-1);
	TIM11_CH1_PWM_Init(500-1,84-1);			//TIM11和TIM12初始化
	AT24CXX_Init();
	TIM5_CH1_Input_Init(0xffffffff,83);  //以1M频率计数
	
	FRONT_COLOR=BLACK;
	LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,12,"liaocheng-university");
	LCD_ShowFontHZ(10,50,"聊城大学");
	LCD_ShowFontHZ(10,120,"小车状态:");			//屏幕显示聊大,和小车状态等字符串
	
	GPIO_SetBits(GPIOF,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_9|GPIO_Pin_10);	//初始小车状态为停止
	pwm(1500, 17500);						//舵机角度调整至正前方。
	USART3_RX_STA=0;						//蓝牙串口接收信息标志
	
	while(1)
	{
		distance = ultrasonic(indata, distance);	//get前方是否有障碍物
		value = adc_model_1( value,  vol );		//1--get钮输入引脚的电压值
		value1 = adc_model_2(value1, vol_1 );	//1--get旋钮输入引脚的电压值
		pwm_model(i, value, value1);				//2--pwm输出设置
		Remote_control();							//3--红外遥控
		lab = hc05_control(lab);					//4--蓝牙控制
		key_model(key);								//5--按键扫描程序执行前进后退,左转右转
		Obstacle_avoidance(lab);					//6--循迹模块控制函数
		Ultrasonic_obstacle_avoidance(distance);	//7--超声波避障控制函数
	}
}

全部代码放在百度网盘里,链接:链接:https://pan.baidu.com/s/1EnKFuV3M8G73_y61cXZyiQ
提取码:kn6i

需要的可以自行下载,如果你是聊大的学弟学妹,如果要求一样则可以直接编译下载就可以(这里还是建议大家把上面的代码当作参考,毕竟学知识还是要靠自己去理解去探索)。当然,这里我也不想讲解每行代码作用。
还有一个问题就是接线问题,具体如下:

第三次更新说明:
1.这次跟新程序完成超声波测试功能,可能这也是最后一次更新。
2.超声波模块接线说明
舵机的信号线(IO10)———对应开发板(PF3)
舵机vcc,gnd已经接扩展板的5V和gnd
超声波模块
(vcc)--开发板(5V)
(GND)--开发板(GND)
(trig)--开发板(PF2)
(echo)--开发板(PA0)

注:本人在调试过程可能扩展板出现问题,超声测距本来可以直接插扩展板的接口,但是由于某种原因测试出错,所以本人直接将超声波模块接开发板,测试功能正常。(这也是上面为什么超声波模块会接开发板5V和GND的原因)

*******************************************************************
再次重申:本程序仅限大家学习使用,严禁用于任何商业用途。
当然,本人能力有限,希望大家批评改进。联系方式:见文末。
*******************************************************************

二次更新说明:
1.直至本次更新程序可以实现6个要求功能(2个基本功能和4个选做功能)。
2.这次主要是对循迹模块功能进行编写,具体函数还是在主函数中while循环中调用,大家可以选中右键go to去具体了解。这里不做详细介绍
3.功能说明,由于主函数大的while循环中存放的功能函数太多,直接和以前一样放进去会对其他函数造成影响,所以本人添加一个循迹函数标志变量,具体是由蓝牙功能进行控制。所以想要实现循迹功能必须具有蓝牙功能(本来想使用pcf8574的中断功能,但是扩展板上没有INT的外部接口,所以只能这样了。遗憾!)具体就是循迹模块中4个红外对管有一个亮了就进行转向(可左转也可能右转,具体看是哪个对管指示灯亮,全亮就停止行进)。
4.接线说明,这次又添加了两根线主要是IIC接口的串行数据线(SDA)和时钟线(SCL),SDA————扩展板上的J23的6号引脚,SCL————扩展板上的J23的5号引脚。SCL---接开发板PB8,
SDA--接开发板PB9。

注:接线由于功能越来越多,所以接线一定要注意连接正确。如果有疑问可以请教作者或作者宿舍成员。


更新说明:
1.程序添加蓝牙功能,可以实现蓝牙控制小车,蓝牙连接后输入‘qianjin’对应 前进
‘houtui’对应 后退,‘zuozhuan’对应 左转, ‘youzhuan’对应 右转, ‘tingzhi’对应 停止
2.引脚说明 电机1接(PF0,PF9),电机2接(PF1,PF10), pwm2,pwm3对应(PB14,PF7)
AD0,AD1对应(PA6,PA4)

3.蓝牙模块的连接:VCC接5v, GND接GND, RX接PB10, TX接PB11

注:扩展板(小板)与开发板之间需要 ---共地!!!


说明:
1.程序下载进开发板,按下reset开始执行程序
2.按下开发板的右下角的上键前进同时两个led灯全亮(下键,左键,右键分别实现相对应功能)
3.调节扩展板上的黄色旋钮和旁边的白色电位器实现小车左右轮调速
4.红外遥控的使用2键对应前进,8键对应后退,4键对应左转,6键对应右转
5.屏幕显示,屏幕前3行显示
“liaocheng-university
   聊城大学
   小车状态:”一直保持不变,下一行显示‘前进’或‘后退’或‘左转’或‘右转’具体跟随小车当前状态改变。


注:由于连线可能接反,实验过程中可以自己更改最终都可实现以上效果。

以上内容压缩包内都有,而且更为详细,希望对大家有帮助。

你可能感兴趣的:(嵌入式学习之路,嵌入式,经验分享,恰饭)