C8T6+蓝牙小车+gps+oled+灭火小电机小项目

	C8T6+蓝牙小车+gps+oled+灭火小电机
	![在这里插入图片描述](https://img-blog.csdnimg.cn/20210604213443108.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDc3NDA4Ng==,size_16,color_FFFFFF,t_70#pic_center)

/*
接线说明:
STM32 GPS
VCC ------> VCC
GND ------> GND
RX1 <------ TXD

STM32 USB-TTL模块
GND ------> GND
TX1 ------> RXD
*/

#include “stm32f10x.h”
#include “led.h”
#include “delay.h”
#include “HUOYAN.h”
#include “motor.h”
#include “sys.h”
#include “oled.h”
#include “gui.h”
#include “hoare.h”
#include “pwm.h”
#include “usart.h”
#include “usart2.h”
#include “time.h”
#include “math.h”
#include <stdlib.h>

void errorLog(int num);
void parseGpsBuffer(void);
void printGpsBuffer(void);

int str[4]={0};
double str1[4]={0};
void xianshi();
void Stop(void);

int input=0; //用来接受蓝牙发送过来的数据
int flag=0;
int main(void)
{
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
SystemInit();
LED_Init(); //LED初始化
HUOYAN_Init(); //火焰模块初始化
MOTOR_Init(); //小电机初始化
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
OLED_Init(); //初始化OLED
OLED_Clear(0); //清屏(全黑)
//Tout = ((4999+1)×(7199+1))/72 = 500000us = 500ms 。
Timer1_Init(4999,71);//定时中断初始化5ms
//delay_init1(72); //延时初始化
HOARE_Init();
uart_init(9600);
uart2_init(9600);
clrStruct();
//IN1–A6 IN3–B6
//IN2–B8 IN4–B0
PWM_Init1(999,719); //小电机PWM
PWM_Init2(999,719); //右电机PWM
TIM4_PWM_Init(999,719); //左电机PWM,不分频。PWM频率=72000000/900=80Khz
Stop(); //先保证不会一上电就开始跑

while(1)
{
		while(flag==1)
		{
			input=USART_ReceiveData(USART1); //接受串口数据
			if(input=='A')//这个地方的左前左右是根据自己的接线接法,接的不同自然根据实际情况
			{
				TIM_SetCompare1(TIM4,400);  //PA1   左前
				TIM_SetCompare2(TIM4,400);  //PA2       左后
					
				TIM_SetCompare1(TIM3,400);  //PA6   右前
				TIM_SetCompare2(TIM3,400);  //PA7       右后
				
				delay_ms(100);Stop();
			}
			

			else if(input=='C')
			{
				TIM_SetCompare1(TIM4,400);  //PA1   左前
				TIM_SetCompare2(TIM4,400);  //PA2       左后
					
				TIM_SetCompare1(TIM3,600);  //PA6   右前
				TIM_SetCompare2(TIM3,600);  //PA7       右后
					
				GPIO_SetBits(GPIOB,GPIO_Pin_8); 
				GPIO_SetBits(GPIOB,GPIO_Pin_9);
					
				delay_ms(100);Stop();
			}
			
			else if(input=='B')
			{
				TIM_SetCompare1(TIM4,400);  //PA1   左前
				TIM_SetCompare2(TIM4,400) ;  //PA2       左后
					
				TIM_SetCompare1(TIM3,400);  //PA6   右前
				TIM_SetCompare2(TIM3,400);  //PA7       右后

					
				GPIO_SetBits(GPIOB,GPIO_Pin_8);
				GPIO_SetBits(GPIOB,GPIO_Pin_9);
					
				GPIO_SetBits(GPIOB,GPIO_Pin_0);
				GPIO_SetBits(GPIOB,GPIO_Pin_1);	
									
				delay_ms(100);Stop();
			}
			
							
			else if(input=='D')
			{
				TIM_SetCompare1(TIM4,400);  //PA1   左前
				TIM_SetCompare2(TIM4,400);  //PA2       左后
					
				TIM_SetCompare1(TIM3,600);  //PA6   右前
				TIM_SetCompare2(TIM3,600);  //PA7       右后
					
				GPIO_SetBits(GPIOB,GPIO_Pin_0);
				GPIO_SetBits(GPIOB,GPIO_Pin_1);		
					
				delay_ms(100);Stop();
			}
			
							
			else if(input=='E')
			{
				TIM_SetCompare1(TIM4,0);
				TIM_SetCompare2(TIM4,0);
					 
				TIM_SetCompare1(TIM3,0);
				TIM_SetCompare2(TIM3,0);
					
				delay_ms(100);Stop();
			}
			else break;
		}
	parseGpsBuffer();
	printGpsBuffer();
	//xianshi();
	if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)==0)  //读PA0管脚
	{
		TIM_SetCompare1(TIM2,400);  //PA1   左前
		TIM_SetCompare2(TIM2,400);  //PA1   左前

		GPIO_ResetBits(GPIOC,GPIO_Pin_13);   //PC13输出低电平 灯亮
		delay(10);   //粗延时
	}
	else
	{
		TIM_SetCompare1(TIM2,0);  //PA1   左前
		TIM_SetCompare2(TIM2,0);  //PA1   左前
		GPIO_SetBits(GPIOC,GPIO_Pin_13);   //PC13引脚置位(相当于高电平),初始化灯熄灭
	}
}

}

void Stop(void)
{
TIM_SetCompare1(TIM4,0);
TIM_SetCompare2(TIM4,0);

			TIM_SetCompare1(TIM3,0);
			TIM_SetCompare2(TIM3,0);

      GPIO_ResetBits(GPIOB,GPIO_Pin_8);
			GPIO_ResetBits(GPIOB,GPIO_Pin_9);
				
			GPIO_ResetBits(GPIOB,GPIO_Pin_0);
			GPIO_ResetBits(GPIOB,GPIO_Pin_1);				

}

//*******************************************
void xianshi()
{
GUI_ShowString(40,0,“GPS”,16,1);
GUI_ShowString(0,16,“Longitude:”,16,1);
GUI_ShowNum(80,16,str[0],3,16,1);
GUI_ShowString(0,32,“Latitude:”,16,1);
GUI_ShowNum(80,32,str[1],3,16,1);
GUI_ShowString(20,48,“Good luck”,16,1);
delay_ms(10);
//delay_ms(1500);
}

void errorLog(int num)
{

while (1)
{
  	printf("ERROR%d\r\n",num);
}

}

void parseGpsBuffer()
{
char *subString;
char *subStringNext;
char i = 0;
if (Save_Data.isGetData)
{
Save_Data.isGetData = false;
printf("**************\r\n");
printf(Save_Data.GPS_Buffer);

	for (i = 0 ; i <= 6 ; i++)
	{
		if (i == 0)
		{
			if ((subString = strstr(Save_Data.GPS_Buffer, ",")) == NULL)
				errorLog(1);	//解析错误
		}
		else
		{
			subString++;
			if ((subStringNext = strstr(subString, ",")) != NULL)
			{
				char usefullBuffer[2]; 
				switch(i)
				{
					case 1:memcpy(Save_Data.UTCTime, subString, subStringNext - subString);break;	//获取UTC时间
					case 2:memcpy(usefullBuffer, subString, subStringNext - subString);break;	//获取UTC时间
					case 3:memcpy(Save_Data.latitude, subString, subStringNext - subString);break;	//获取纬度信息
					case 4:memcpy(Save_Data.N_S, subString, subStringNext - subString);break;	//获取N/S
					case 5:memcpy(Save_Data.longitude, subString, subStringNext - subString);break;	//获取经度信息
					case 6:memcpy(Save_Data.E_W, subString, subStringNext - subString);break;	//获取E/W

					default:break;
				}

				subString = subStringNext;
				Save_Data.isParseData = true;
				if(usefullBuffer[0] == 'A')
					Save_Data.isUsefull = true;
				else if(usefullBuffer[0] == 'V')
					Save_Data.isUsefull = false;

			}
			else
			{
				errorLog(2);	//解析错误
			}
		}


	}
}

}

void printGpsBuffer()
{
if (Save_Data.isParseData)
{
Save_Data.isParseData = false;

	printf("Save_Data.UTCTime = ");
	printf(Save_Data.UTCTime);
	printf("\r\n");

	if(Save_Data.isUsefull)
	{
		//str1[0]=atof(Save_Data.latitude);
		//str1[0]=str1[0]/100;
		//str[0]=(int)str[0];

// str[1]=Save_Data.longitude;
// str[2]=Save_Data.E_W;
// str[3]=Save_Data.N_S;

		Save_Data.isUsefull = false;
		printf("Save_Data.latitude = ");
		printf(Save_Data.latitude);
		printf("\r\n");
		GUI_ShowString(0,0,"Lat :",16,1);//OLED显示
		GUI_ShowString(40,0,Save_Data.latitude,16,1);
		//GUI_ShowNum(40,0,str1[0],10,16,1);

		printf("Save_Data.N_S = ");
		printf(Save_Data.N_S);
		printf("\r\n");
		GUI_ShowString(0,32,"N_S:",16,1);//OLED显示
		GUI_ShowString(40,32,Save_Data.N_S,16,1);

		printf("Save_Data.longitude = ");
		printf(Save_Data.longitude);
		printf("\r\n");
		GUI_ShowString(0,16,"Long:",16,1);//OLED显示
		GUI_ShowString(40,16,Save_Data.longitude,16,1);

		printf("Save_Data.E_W = ");
		printf(Save_Data.E_W);
		printf("\r\n");
		GUI_ShowString(0,48,"E_W:",16,1);//OLED显示
		GUI_ShowString(40,48,Save_Data.E_W,16,1);

// GUI_ShowString(0,64,“E_W:”,16,1);//OLED显示
// GUI_ShowString(40,64,Save_Data.UTCTime,16,1);

	}
	else
	{
		printf("GPS DATA is not usefull!\r\n");
		GUI_ShowString(2,0,"GPS DATA is not usefull!                                                          ",16,1);//OLED显示
	}
	
}

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值