#include "stm32f10x.h" #include #include #include "tcs.h" #include "timer.h" #include"stdbool.h" #include "delay.h" #define QTI1_Pin GPIO_Pin_0 #define QTI2_Pin GPIO_Pin_1 #define QTI3_Pin GPIO_Pin_2 #define QTI4_Pin GPIO_Pin_3 #define QTI15_Pin GPIO_Pin_15 #define leftservo GPIO_Pin_6 #define rightservo GPIO_Pin_7 /* -------------------------颜色传感器引脚电平控制定义--------------------------------------*/ #define S0_Write_1() GPIO_SetBits(GPIOE,GPIO_Pin_4) //写1 #define S0_Write_0() GPIO_ResetBits(GPIOE,GPIO_Pin_4) //写0 #define S1_Write_1() GPIO_SetBits(GPIOE,GPIO_Pin_5) #define S1_Write_0() GPIO_ResetBits(GPIOE,GPIO_Pin_5) #define S2_Write_1() GPIO_SetBits(GPIOE,GPIO_Pin_6) #define S2_Write_0() GPIO_ResetBits(GPIOE,GPIO_Pin_6) #define S3_Write_1() GPIO_SetBits(GPIOE,GPIO_Pin_8) #define S3_Write_0() GPIO_ResetBits(GPIOE,GPIO_Pin_8) #define LED_Write_1() GPIO_SetBits(GPIOE,GPIO_Pin_10) #define LED_Write_0() GPIO_ResetBits(GPIOE,GPIO_Pin_10) //OUT 接到PD2 /*********读取QTI的电平宏定义*******/ #define PE0_ReadBit() GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_0)//读PE0上的值 #define PE1_ReadBit() GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1)//读PE1上的值 #define PE2_ReadBit() GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)//读PE2上的值 #define PE3_ReadBit() GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)//读PE3上的值 #define Yellow 3 #define White 1 #define Red 4 #define Black 2 #define Blue 5 extern int count_tcs230; /************************************函数声明************************/ void BlueCarry(void); //搬蓝色色块到分数区 void BlackCarry(void); //搬黑色色块到分数区 void YellowCarry(void); //搬黄色色块到分数区 void WhiteCarry(void); //搬白色色块到分数区 void RedCarry(void); //搬红色色块到分数区 /*---------------------------------结构变量、宏定义、变量、常量定义------------------------------------------------------------------------------*/ ErrorStatus HSEStartUpStatus; GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_ICInitTypeDef TIM_ICInitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; USART_InitTypeDef USART_InitStructure; USART_ClockInitTypeDef USART_ClockInitStructure; int f_flag=1; int g_flag=0; int h_flag=1; int i_flag=0; volatile u16 times; volatile unsigned int time; char process=0; char Ahavesome = 1;//A有无色块标志 //比赛时候可以直接将抽到点的标志全部置1 char Bhavesome = 1;//B有无色块标志 char Chavesome = 1;//C有无色块标志 char Dhavesome = 1;//D有无色块标志 char Ehavesome = 1;//E有无色块标志 char Fhavesome = 0;//F有无色块标志 char Ghavesome = 0;//G有无色块标志 char Hhavesome = 0;//H有无色块标志 char Ihavesome = 0;//I有无色块标志 char pointsth=0;//在直线上放第几个色块 char findsekuai = 0;// 已经搬运色块的总个数 //char pointsth=3;//在直线上放第几个色块 //char findsekuai = 3;// 已经搬运色块的总个数 char Idone=0; char sekuai = 5;//色块的总个数 u16 pcolor[3]={0,0,0};//颜色传感器的比例因子 u16 RGB[3]={0,0,0}; int hadedone = 1; unsigned char QTIS;//循线的QTI状态 unsigned int color =0;//颜色代表值 unsigned int distance=0;//超声波测距 unsigned int speed=0;//电机速度 unsigned int pulses=0;//脉冲数 bool colorCheck = true; volatile char i=0,j=0; unsigned int i1=0; unsigned int goal=38; //搬运到目标点计分区的参数 //数值越大表步数约长 unsigned int a=0; //用来判断搬fg 和hi颜色是 需要修正的方向 int count = 1; //颜色识别次数计数 int LRp = 12; int aim = 7; bool have=true; /************************************* * @brief Configure peripheral RCC. * @param None * @retval None ************************************/ void RCC_Configuration(void) { /* 将外设RCC寄存器重设为默认值,即有关寄存器复位,但该函数不改禦CC_CR的HSITRIM[4:0]位,也不重置寄存器RCC_BDCR和寄存器RCC_CSR */ RCC_DeInit(); /* 使能外部HSE高速晶振 */ RCC_HSEConfig(RCC_HSE_ON); /* 等待HSE高速晶振稳定,或者在超时的情况下退出 */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* SUCCESS:HSE晶振稳定且就绪,ERROR:HSE晶振未就绪 */ if(HSEStartUpStatus == SUCCESS) { /* 使能flash预取指令缓冲区。这两句跟RCC没直接关系 */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* 设置FLASH存储器延时时钟周期数,2是针对高频时钟的, FLASH_Latency_0:0延时周期,FLASH_Latency_1:1延时周期 FLASH_Latency_2:2延时周期 */ FLASH_SetLatency(FLASH_Latency_2); /* HCLK=SYSCLK 设置高速总线时钟=系统时钟 */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK1=HCLK/2 设置低速总线1时钟=高速时钟的二分频*/ RCC_PCLK1Config(RCC_HCLK_Div2); /* PCLK2=HCLK 设置低速总线2时钟=高速总线时钟 */ RCC_PCLK2Config(RCC_HCLK_Div1); /* Set PLL clock output to 72MHz using HSE (8MHz) as entry clock */ /* 利用锁相环将HSE外部8MHz晶振9倍频到72MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* Enable PLL:使能PLL锁相环 */ RCC_PLLCmd(ENABLE); /* Wait till PLL is ready:等待锁相环输出稳定 */ /* RCC_FLAG_HSIRDY:HSI晶振就绪,RCC_FLAG_HSERDY:HSE晶振就绪 RCC_FLAG_PLLRDY:PLL就绪,RCC_FLAG_LSERDY:LSE晶振就绪 RCC_FLAG_LSIRDY:LSI晶振就绪,RCC_FLAG_PINRST:引脚复位 RCC_FLAG_PORRST:POR/PDR复位,RCC_FLAG_SFTRST:软件复位 RCC_FLAG_IWDGRST:IWDG复位,RCC_FLAG_WWDGRST:WWDG复位 RCC_FLAG_LPWRRST:低功耗复位 */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; /* Select PLL as system clock source:将锁相环输出设置为系统时钟 */ /* RCC_SYSCLKSource_HSI:选择HSI作为系统时钟 RCC_SYSCLKSource_HSE:选择HSE作为系统时钟 RCC_SYSCLKSource_PLLCLK:选择PLL作为系统时钟*/ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* 等待PLL作为系统时钟标志位置位 */ /* 0x00:HSI作为系统时钟;0x04:HSE作为系统时钟 0x08:PLL作为系统时钟 */ while(RCC_GetSYSCLKSource() != 0x08); } /* Enable GPIOA~E and AFIO clocks:使能外围端口总线时钟。注意各外设的隶属情况,不同芯片和开发板的分配不同*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA| RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOD| RCC_APB2Periph_GPIOE| RCC_APB2Periph_AFIO, ENABLE);