32---code and color---uart==mv

uart.c

#include "usart.h"	
#include "sys.h"	
#include "Lcd_Driver.h"

extern u8 che;

u8  UART1_OK_Flag=0;//如果是0.openmv没发OK信号,如果是1,openmv发了OK信号
u8  UART1_Fun_Flag=0;//功能标记,=0,没有功能,=1二维码功能,=2,颜色功能


u8 scan_QRcode_UP=0;//上层二维码的搬运顺序
u8 scan_QRcode_DOWN=0;//下层二维码的搬运顺序

//123--1;   132---2   213---3   231---4   312---5  321----6
u8 scan_UpColor_num=0;//上层颜色代码
u8 scan_DownColor_num=0;//下层颜色代码

//123--1;   132---2   213---3   231---4   312---5  321----6
//	 
//********************************************************************************
//V1.3修改说明 
//支持适应不同频率下的串口波特率设置.
//加入了对printf的支持
//增加了串口接收命令功能.
//修正了printf第一个字符丢失的bug
//V1.4修改说明
//1,修改串口初始化IO的bug
//2,修改了USART_RX_STA,使得串口最大接收字节数为2的14次方
//3,增加了USART_REC_LEN,用于定义串口最大允许接收的字节数(不大于2的14次方)
//4,修改了EN_USART1_RX的使能方式
//V1.5修改说明
//1,增加了对UCOSII的支持
// 	  

//
//加入以下代码,支持printf函数,而不需要选择use MicroLIB	  
#if 1
#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
{
    
     
	int handle; 
}; 

FILE __stdout;       

//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{
    
     
	x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{
    
     	
	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
	USART1->DR = (u8) ch;      
	return ch;
}
#endif
 
#if EN_USART1_RX   //如果使能了接收
/*---------------------------------------------定义串口1的数据变量---------------------------------*/
//串口1中断服务程序
//注意,读取USARTx->SR能避免莫名其妙的错误   	
u8 USART1_RX_BUF[USART_REC_LEN];     //接收缓冲,最大USART_REC_LEN个字节.
//接收状态
//bit15,	接收完成标志
//bit14,	接收到0x0d
//bit13~0,	接收到的有效字节数目
u16 USART1_RX_STA=0; //---------------------------------------接收状态标记	
//0xaa+0xbb+.(0x00)......+(checksum).+0x0d+0x0a   //
u8 UART1_REC_Flag=0;//---------------------接收一次数据标记1真,0假
u16 UART1_REC_Length=0;//存放接受的字节的数量
u8  UART1_REC_Check_Flag=0;
//初始化IO 串口1 
//bound:波特率9600---115200-----------4800
void uart1_init(u32 bound)
{
    
    
   //GPIO端口设置
  GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;	
	
	UART1_TXD_CLK_ENABLE();
	//USART1端口配置TXD
  GPIO_InitStructure.GPIO_Pin = UART1_TXD_PIN;//GPIOA9与GPIOA10
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//速度50MHz
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
	GPIO_Init(UART1_TXD_PORT,&GPIO_InitStructure); //初始化PA9,PA10
	
	UART1_RXD_CLK_ENABLE();
	//USART1端口配置RXD
  GPIO_InitStructure.GPIO_Pin = UART1_RXD_PIN;//GPIOA9与GPIOA10
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//速度50MHz
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
	GPIO_Init(UART1_RXD_PORT,&GPIO_InitStructure); //初始化PA9,PA10
	
	//使能USART1时钟
	UART1_CLK_ENABLE();
	//串口1对应引脚复用映射
	GPIO_PinAFConfig(UART1_TXD_PORT,UART1_TXD_PINSOURCE,GPIO_AF_USART1); //GPIOA9复用为USART1
	GPIO_PinAFConfig(UART1_RXD_PORT,UART1_RXD_PINSOURCE,GPIO_AF_USART1); //GPIOA10复用为USART1

   //USART1 初始化设置
	USART_InitStructure.USART_BaudRate = bound;//波特率设置
	
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式
  USART_Init(USART1, &USART_InitStructure); //初始化串口1
	
  USART_Cmd(USART1, ENABLE);  //使能串口1 	
	//USART_ClearFlag(USART1, USART_FLAG_TC);	
}


/*-------------------串口1中断服务函数-----------------------------*/
//
void USART1_IRQHandler(void)                	//串口1中断服务程序
{
    
    
	u8 RES;
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断
	{
    
    
		
		RES =USART_ReceiveData(USART1);//(USART1->DR);	//读取接收到的数据
		
    if((USART1_RX_STA & 0x8000)==0)//接收未完成1000 0000 0000 0000
		{
    
    
			
			//接收到了0x0d   0100 0000 0000 0000
			if(USART1_RX_STA&0x4000)
			{
    
    
				//不等于0x0a
				if(RES!=UART1_Rec_Tail1)
					  USART1_RX_STA=0;//接收错误,重新开始
				 //等于0x0a
				else 
				{
    
    
					USART1_RX_STA|=0x8000;	//接收完成了
					UART1_REC_Flag=1;//接收标记完整
					usart1_CheckRecAction();
											
				}					
			}
			
			
			else //还没收到0X0D
			{
    
    	
				//..............0x0D
				if(RES==UART1_Rec_Tail0)
				{
    
    
					USART1_RX_STA|=0x4000;//0100 0000 0000 0000
				}
				//...............
				else
				{
    
    
									//判断第一个帧头帧头
								if(USART1_RX_STA==0)
								{
    
    
									if(RES==UART1_Rec_Head0)//
									{
    
    		
										USART1_RX_STA=1;
									}
									else 
										USART1_RX_STA=0;//接收错误,重新开始
								}
								//判断第二个帧头
								else if(USART1_RX_STA==1)
								{
    
    
									if(RES==UART1_Rec_Head1)//0xbb
									{
    
    					
										USART1_RX_STA=2;		
									}
									else 
										USART1_RX_STA=0;//接收错误,重新开始
								}
								
								//第三个数据,完整接收
							 else if(USART1_RX_STA>1)//0-1---2.....---0x0d+0x0a
							 {
    
    

								 USART1_RX_BUF[USART1_RX_STA]=RES ;
						  	 USART1_RX_STA++;								 	
								if(USART1_RX_STA>(USART_REC_LEN-1))
									   USART1_RX_STA=0;//接收数据错误,重新开始接收	 
							 }		
								
				}		 
			}
		}  
  } 

}


void usart1_CheckRecAction()
{
    
    
	u8 t;
	u8 checksumtemp=0;
	//流程:
	//1、计算长度;
	//2、计算校验和;
	//3、校验和和接收相等,那么接收校验标记=1,否则接收校验标记=0;
	//4、如果接收标记校验=1
	//--------------4.1、判断功能码:如果是功能码=0x01,那么是二维码识别
	              //处理数据,然后将标记=0,允许下次接收数据

		 //得到此次接收到的数据长度,不包括0x0d和0x0a;
		 //0xaa 0xbb 0x31 0x32 0x33 0x0d 0x0a----长度UART1_REC_Length=5
	
	    UART1_REC_Length=  USART1_RX_STA&0x3fff;
      //计算和,得到校验和
		 //为什么是length-1?因为length长度的数就是传来的校验和
		 //帧头和帧尾不算,帧尾前面的数据也不算,从第2个算起,(0x31+0x32)%256
			for(t=2;t<(UART1_REC_Length-1);t++)
			{
    
    
				 checksumtemp+=USART1_RX_BUF[t];
				
				/*---------------将接收到的数据发送到电脑上----------------------------*/
				/*
				USART_SendData(USART1, USART1_RX_BUF[t]);         //向串口1发送数据
				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
				*/
			}
			checksumtemp=checksumtemp%256;//得到校验和
			che=checksumtemp;

	
			//判断接收到的和的数据,是不是和自己计算的相等,如果相等,说明数据接收没出错
			if(checksumtemp==USART1_RX_BUF[UART1_REC_Length-1])
			{
    
    
				UART1_REC_Check_Flag=1;//接收校验正常,将标记=1
				usart1_funAction();
				//处理完之后,将标记清0,允许后面再接收
				USART1_RX_STA=0;
				UART1_REC_Flag=0;//接收一次标记完成
				UART1_REC_Check_Flag=0;				
			}
			else
			{
    
    
				UART1_REC_Check_Flag=0;//否则,将标记=0;
				return;//判断校验不对,那么重新返回,结束函数
			}
	
}
/************************************************
函数名称 :usart_send()
功    能 :串口发送函数
参    数 :发送的字节
返 回 值 :无
作    者 :
*************************************************/
void usart1_send(u8 byte)
{
    
    
  USART_SendData(USART1,byte);
  while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);//发送完成标志位
}
//处理功能
void usart1_funAction()
{
    
    
			//判断功能码
				switch(USART1_RX_BUF[2])//第二个是功能码:
				{
    
    
							//--------------------收到openmv发来的ok的的应答信号
					case UART1_Rec_RQ:
					     UART1_OK_Flag=1;
				       UART1_Fun_Flag=0;
					break;
					//*---------------------第1个功能:二维码识别123+321------------------------
					case UART1_Rec_Fun0:
					{
    
    
						UART1_Fun_Flag=1;
					}
					break;
		    	//*---------------------第2个功能:物料颜色扫描(上层+下层)------------------------
					case UART1_Rec_Fun1:
						UART1_Fun_Flag=2;		
					break;		
					default:break;
					
				}
			
}


#endif	

 




uart.h

#ifndef __USART_H
#define __USART_H

#include "stdio.h"	
#include "stm32f4xx_conf.h"
#include "sys.h" 

//********************************************************************************
//V1.3修改说明 
//支持适应不同频率下的串口波特率设置.
//加入了对printf的支持
//增加了串口接收命令功能.
//修正了printf第一个字符丢失的bug
//V1.4修改说明
//1,修改串口初始化IO的bug
//2,修改了USART_RX_STA,使得串口最大接收字节数为2的14次方
//3,增加了USART_REC_LEN,用于定义串口最大允许接收的字节数(不大于2的14次方)
//4,修改了EN_USART1_RX的使能方式
// 	

#define USART_REC_LEN  		200  	//定义最大接收字节数 200
/*
--------------------------------串口1的信息-----------------------------------------------

---------------------------------------*/

#define EN_USART1_RX 			1		//使能(1)/禁止(0)串口1接收
#define UART1_Monitor 		1   //使能(1)/禁止(0)串口1监控
//串口1的引脚,端口,时钟transmit
#define UART1_TXD_PIN             GPIO_Pin_9     		    // LED1 引脚      
#define UART1_TXD_PORT            GPIOA                 // LED1 GPIO端口     
#define UART1_TXD_CLK             RCC_AHB1Periph_GPIOA  // LED1 GPIO端口时钟_
#define UART1_TXD_CLK_ENABLE()    {RCC_AHB1PeriphClockCmd(UART1_TXD_CLK,ENABLE);} //使能GPIOA时钟
#define UART1_TXD_PINSOURCE       GPIO_PinSource9

#define UART1_RXD_PIN            GPIO_Pin_10     		    // LED1 引脚      
#define UART1_RXD_PORT            GPIOA                 // LED1 GPIO端口     
#define UART1_RXD_CLK             RCC_AHB1Periph_GPIOA  // LED1 GPIO端口时钟_
#define UART1_RXD_CLK_ENABLE()    {RCC_AHB1PeriphClockCmd(UART1_RXD_CLK,ENABLE);} //使能GPIOA时钟
#define UART1_RXD_PINSOURCE       GPIO_PinSource10

#define UART1_CLK_ENABLE()   {RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);}
//0x21+0x22---------
//0x00---0xff:255个功能码
//实际接收最大是200个字节,实际接收多少?
//(0x23+0x31+0x32+0x33+0x2b+0x32+0x31+0x33)%256=0x7a
//=
//和校验码0x7a----ascii:字母z
//帧尾0x0d+0x0a

//电脑发数据:帧头+数据(功能码+实际数据+校验码)+帧尾
//32接收到帧头和帧尾,认为是完整的一帧数据
//后面再计算一次校验码(同样的公式),如果32的校验码=电脑发过来32接收到的校验
//说明:中间的数据是完整的。
//然后再判别功能码,对实际数据进行处理

#define UART1_Rec_Head0 0x21 //帧头0  ascii码:!
#define UART1_Rec_Head1 0x22 //帧头1  ascii码:"

#define UART1_Rec_Fun0    0x23  //功能码:二维码的数据:ascii---#
#define UART1_Rec_Fun1    0x24  //上层颜色的数据+下层的颜色:ascii----$
#define UART1_Rec_RQ  0x26  //收到openmv二维码应答信号

#define UART1_Rec_Tail0 0x0d  //帧尾0 回车
#define UART1_Rec_Tail1 0x0a  //帧头1

extern u8  UART1_REC_Flag;  //接收标记位  1,接收一个数据
extern u8  UART1_REC_Check_Flag;//校验后确保正确的标记,1,正确,0错误
extern u16 UART1_REC_Length;
extern u8  UART1_OK_Flag;
extern u8  UART1_Fun_Flag;

extern u8  USART1_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符 
extern u16 USART1_RX_STA;  //接收状态标记	

extern u8 scan_QRcode_UP;//上层二维码的搬运顺序
extern u8 scan_QRcode_DOWN;//下层二维码的搬运顺序
extern u8 scan_UpColor_num;//上层颜色代码
extern u8 scan_DownColor_num;//下层颜色代码

void uart1_init(u32 bound);
void usart1_send(u8 byte);
void usart1_CheckRecAction();
void usart1_funAction();

//测试:
/*---------------
!"#123+123z(回车换行)
!"#123+123z
*/
//十六进制23+31+32+33+2b+31+32+33=17A=(十进制)378%256=122(十进制)=0x7A=z(ascii)

/*-----------------------------------------------------------------------*/

#endif



main.c

/*
实验室217-2学习代码,希望感兴趣的同学,循序渐进完成。
理解代码,测试代码,修改代码,然后自己完成新的代码;
*/
#include "stm32f4xx.h"
#include "sys.h" //位操作
#include "delay.h"//反客科技提供
#include "delayzd.h"//正点原子提供
#include "led.h"   
#include "beep.h"   
#include "key.h" //独立按键中断------- 
#include "NVIC.h"  
#include "usart.h"  
#include "Lcd_Driver.h"//LCD 显示屏
#include "motor.h"  //电机操作
#include "pwm.h"//PWM
#include "tracksensor.h" //循迹模块传感器
#include "timer.h" //定时器3监控串口

//***************************************引用按键
//定义全局变量
u16 ptt=0;
u8 task_flag=0; //任务标签0-255

u8 motornum=0;
float motorcycle[4]={
    
    1,1,1,1};

u8 che=0;

//
//*****************************函数声明,后面定义
//第一个测试:LED测试
void test1();
//第2个测试:蜂鸣器测试
void test2();
//第2个测试:蜂鸣器测试
void test3();
//*****************************************************************************************************
//
//
int main(void)
{
    
    	
	u16 t=0;
	u8 checktemp0=0;
	u8 keyflag=0;
	u8 runflag=0;//启动标记
	
  Delay_Init();		//延时函数初始化
  delay_init(168);
	
	LED_Init();			   //LED初始化
	BEEP_Init();
	KEY_INT_Init();
	uart1_init(115200);
	Delay_ms(10);
	
	MotorInit(8000);//8000HZ---T1
	Tracksensor_Init();//

	Lcd_Init();//初始化函数
  Lcd_Clear(WHITE);//清屏,颜色
	
  ledflash(3,300);//开机闪烁3次,闪烁频率300ms


	NVIC_Config();
	delay_ms(100);
	
	//初始化:扫描的二维码,用红色显示屏幕显示++++数据
	LCD_ShowCharAsc96(0,0,RED,WHITE,'1');//1	
	LCD_ShowCharAsc96(48,0,RED,WHITE,'+');//2
	LCD_ShowCharAsc96(96,0,RED,WHITE,'+');//3
	LCD_ShowCharAsc96(144,0,RED,WHITE,'+');//+	
	LCD_ShowCharAsc96(0,85,RED,WHITE,'+');//3		
	LCD_ShowCharAsc96(48,85,RED,WHITE,'+');//2		
	LCD_ShowCharAsc96(96,85,RED,WHITE,'+');//1
	
	//初始化:扫描的颜色,用绿色显示屏幕显示++++数据
	LCD_ShowCharAsc96(0,165,GREEN,WHITE,'+');//1	
	LCD_ShowCharAsc96(48,165,GREEN,WHITE,'+');//2
	LCD_ShowCharAsc96(96,165,GREEN,WHITE,'+');//3
	LCD_ShowCharAsc96(144,165,GREEN,WHITE,'+');//+	
	LCD_ShowCharAsc96(0,235,GREEN,WHITE,'+');//3		
	LCD_ShowCharAsc96(48,235,GREEN,WHITE,'+');//2		
	LCD_ShowCharAsc96(96,235,GREEN,WHITE,'+');//1
	delay_ms(100);

	while (1)
	{
    
    
		
		//等待按键启动小车
		while(runflag==0)//
		{
    
    
			  ledflash(3,500);
			  if(keynum==KEY1Value)
				{
    
    
				  runflag=1;//跳出循环,不然一直等待
				}			
		}
		
		if(runflag==1)//小车任务启动开始搬运,搬运结束,再置为0
		{
    
    
		
		  //循迹,跑到第一个地方,进行扫码
			/*
			
			  自己写
			
			*/	
			
			//小车停止
	
			ledflash(5,100);//开机闪烁3次,闪烁频率100ms
			//给openmv发扫码命令,告诉openmv开始扫码
			//发UART1_Rec_Head0+UART1_Rec_Head1+0x23+0x23+UART1_Rec_Tail0+UART1_Rec_Tail1:
			//帧头0x21+0x22;命令0x23,代表开始扫描二维码,和校验码(0x23)0x0d+0x0a
			//发一次,等待50ms,再发一次,一直等待openmv给OK命令,不然一直发。
		   while(UART1_OK_Flag==0)//UART1_OK_Flag在串口中进行变化,跳出循环
			 {
    
    
					usart1_send(UART1_Rec_Head0);
				  usart1_send(UART1_Rec_Head1);
				  usart1_send(0x23);//功能码		 
				  usart1_send(0x23);//校验码			 
				  usart1_send(UART1_Rec_Tail0);
				  usart1_send(UART1_Rec_Tail1);
				//  ledflash(2,300);
				  delay_ms(50);	
		      LCD_ShowNumAsc32(164,250,RED,WHITE,che,4);//数字32字体  x123  
				 
			 }
			 
			 UART1_OK_Flag=0;//清0给下一次应答使用
			 LCD_ShowCharAsc96(96,235,GREEN,WHITE,'1');//1
			 //等待openmv发过来二维码,识别到二维码,就UART1_Fun_Flag=1,等于1,跳出循环
			 while(UART1_Fun_Flag!=1)
			 {
    
    
	
			 }
			 
			 UART1_Fun_Flag=0;//清0给下一次使用
	
			 	//显示二维码数据在屏幕上
				//	  Lcd_Clear(WHITE);//清屏,颜色
	          //LCD_ShowStringQRcode96(0,0,RED,WHITE,"312+231");	

						LCD_ShowCharAsc96(0,0,RED,WHITE,USART1_RX_BUF[3]);//1	
						LCD_ShowCharAsc96(48,0,RED,WHITE,USART1_RX_BUF[4]);//2
						LCD_ShowCharAsc96(96,0,RED,WHITE,USART1_RX_BUF[5]);//3
						LCD_ShowCharAsc96(144,0,RED,WHITE,USART1_RX_BUF[6]);//+	
						LCD_ShowCharAsc96(0,85,RED,WHITE,USART1_RX_BUF[7]);//3		
						LCD_ShowCharAsc96(48,85,RED,WHITE,USART1_RX_BUF[8]);//2		
						LCD_ShowCharAsc96(96,85,RED,WHITE,USART1_RX_BUF[9]);//1
					
				//------------------------------------------------------------------------------得到上层的顺序代码
					  if(USART1_RX_BUF[3]=='1'&&USART1_RX_BUF[4]=='2'&&      USART1_RX_BUF[5]=='3')
							scan_QRcode_UP=1;
						else if(USART1_RX_BUF[3]=='1'&&USART1_RX_BUF[4]=='3'&& USART1_RX_BUF[5]=='2')
							scan_QRcode_UP=2;
						else if(USART1_RX_BUF[3]=='2'&&USART1_RX_BUF[4]=='1'&& USART1_RX_BUF[5]=='3')
							scan_QRcode_UP=3;
						else if(USART1_RX_BUF[3]=='2'&&USART1_RX_BUF[4]=='3'&& USART1_RX_BUF[5]=='1')
							scan_QRcode_UP=4;
						else if(USART1_RX_BUF[3]=='3'&&USART1_RX_BUF[4]=='1'&& USART1_RX_BUF[5]=='2')
							scan_QRcode_UP=5;
						else if(USART1_RX_BUF[3]=='3'&&USART1_RX_BUF[4]=='2'&& USART1_RX_BUF[5]=='1')
							scan_QRcode_UP=6;
						
		   	//判断下层的顺序代码		  
						if(USART1_RX_BUF[7]=='1'&&USART1_RX_BUF[8]=='2'&&USART1_RX_BUF[9]=='3')
							scan_QRcode_DOWN=1;
						else if(USART1_RX_BUF[7]=='1'&&USART1_RX_BUF[8]=='3'&&USART1_RX_BUF[9]=='2')
							scan_QRcode_DOWN=2;
						else if(USART1_RX_BUF[7]=='2'&&USART1_RX_BUF[8]=='1'&&USART1_RX_BUF[9]=='3')
							scan_QRcode_DOWN=3;
						else if(USART1_RX_BUF[7]=='2'&&USART1_RX_BUF[8]=='3'&&USART1_RX_BUF[9]=='1')
							scan_QRcode_DOWN=4;
						else if(USART1_RX_BUF[7]=='3'&&USART1_RX_BUF[8]=='1'&&USART1_RX_BUF[9]=='2')
							scan_QRcode_DOWN=5;
						else if(USART1_RX_BUF[7]=='3'&&USART1_RX_BUF[8]=='2'&&USART1_RX_BUF[9]=='1')
							scan_QRcode_DOWN=6;	
						
			 delay_ms(500);				
		   //-----------------------------------------------------------------------------(小车运动到第二点,循迹
				 //循迹,跑到第2个地方,进行扫描颜色
			/*
			
			  自己写
			
			*/
			
			//小车停止
		
			delay_ms(2000);

			ledflash(5,100);//开机闪烁5次,闪烁频率100ms						
			//给openmv发颜色命令,告诉openmv开始扫描颜色
			//发的命令是0x21+0x22+0x24+0x24+0x0d+0x0a:
			//帧头0x21+0x22;命令0x24,代表开始扫描颜色,和校验码(0x24)0x0d+0x0a
			//发一次,等待50ms,再发一次,一直等待openmv给OK命令,不然一直发。
			UART1_OK_Flag=0;
		   while(UART1_OK_Flag==0)//UART1_OK_Flag在串口中进行变化,跳出循环
			 {
    
    
					usart1_send(UART1_Rec_Head0);
				  usart1_send(UART1_Rec_Head1);
				  usart1_send(0x24);//32+4=36
				  usart1_send(0x24);//校验码	32+4=36				 
				  usart1_send(UART1_Rec_Tail0);
				  usart1_send(UART1_Rec_Tail1);
				  //ledflash(5,100);
				  delay_ms(50);	
		      LCD_ShowNumAsc32(164,250,RED,WHITE,che,4);//数字32字体  x123  
				 
			 }
			 
			 
			 
			 
			 
			 UART1_OK_Flag=0;//清0给下一次应答使用
			 LCD_ShowCharAsc96(96,235,BLUE,WHITE,'1');//1
			 //等待openmv发过来颜色,就UART1_Fun_Flag=2,等于2,跳出循环
			 while(UART1_Fun_Flag!=2)
			 {
    
    
	
			 }
			 
			 UART1_Fun_Flag=0;//清0给下一次使用
			 LCD_ShowCharAsc96(96,235,RED,WHITE,'1');//1

	
			 //绿色显示颜色代码
			LCD_ShowCharAsc96(0,165,GREEN,WHITE,USART1_RX_BUF[3]);//1	
			LCD_ShowCharAsc96(48,165,GREEN,WHITE,USART1_RX_BUF[4]);//2
			LCD_ShowCharAsc96(96,165,GREEN,WHITE,USART1_RX_BUF[5]);//3
			LCD_ShowCharAsc96(144,165,GREEN,WHITE,USART1_RX_BUF[6]);//+	
			LCD_ShowCharAsc96(0,235,GREEN,WHITE,USART1_RX_BUF[7]);//3		
			LCD_ShowCharAsc96(48,235,GREEN,WHITE,USART1_RX_BUF[8]);//2		
			LCD_ShowCharAsc96(96,235,GREEN,WHITE,USART1_RX_BUF[9]);//1
					
							//得到上层的颜色代码
			if(USART1_RX_BUF[3]=='1'&&USART1_RX_BUF[4]=='2'&&      USART1_RX_BUF[5]=='3')//123
							scan_UpColor_num=1;
			else if(USART1_RX_BUF[3]=='1'&&USART1_RX_BUF[4]=='3'&& USART1_RX_BUF[5]=='2')//132
							scan_UpColor_num=2;
						else if(USART1_RX_BUF[3]=='2'&&USART1_RX_BUF[4]=='1'&& USART1_RX_BUF[5]=='3')//213
							scan_UpColor_num=3;
						else if(USART1_RX_BUF[3]=='2'&&USART1_RX_BUF[4]=='3'&& USART1_RX_BUF[5]=='1')//231
							scan_UpColor_num=4;
						else if(USART1_RX_BUF[3]=='3'&&USART1_RX_BUF[4]=='1'&& USART1_RX_BUF[5]=='2')//312
							scan_UpColor_num=5;
						else if(USART1_RX_BUF[3]=='3'&&USART1_RX_BUF[4]=='2'&& USART1_RX_BUF[5]=='1')//321
							scan_UpColor_num=6;
						
		   	//判断下层的颜色代码		  
				if(USART1_RX_BUF[7]=='1'&&USART1_RX_BUF[8]=='2'&&USART1_RX_BUF[9]=='3')
							scan_DownColor_num=1;
						else if(USART1_RX_BUF[7]=='1'&&USART1_RX_BUF[8]=='3'&&USART1_RX_BUF[9]=='2')
							scan_DownColor_num=2;
						else if(USART1_RX_BUF[7]=='2'&&USART1_RX_BUF[8]=='1'&&USART1_RX_BUF[9]=='3')
							scan_DownColor_num=3;
						else if(USART1_RX_BUF[7]=='2'&&USART1_RX_BUF[8]=='3'&&USART1_RX_BUF[9]=='1')
							scan_DownColor_num=4;
						else if(USART1_RX_BUF[7]=='3'&&USART1_RX_BUF[8]=='1'&&USART1_RX_BUF[9]=='2')
							scan_DownColor_num=5;
						else if(USART1_RX_BUF[7]=='3'&&USART1_RX_BUF[8]=='2'&&USART1_RX_BUF[9]=='1')
							scan_DownColor_num=6;
						
						
				//---------------小车启动,到达第三点,进行搬运
						
						/*
						
						
						//等等等等
						
						
						*/
						
						
			//搬运结束			
		  runflag=0;
		}
			

		
	}

	
}




void flame()
{
    
    
	u16 t=0;
	u8 checktemp0=0;
		//------------------------------------------------------------------------------------------------
 //------------------------------小车跑到第一个地方,扫描二维码------
 //第一个任务:跑到二维码处,扫描二维码,显示二维码
 //如果按下开始按键,小车开始运动
 task_flag=1;
 while(task_flag==1)
 {
    
    
	 //第一个按键中断
	 if(keynum==KEY1Value)//如果第一个按键开机启动按键打开
	 {
    
     
		 //--------------------第一步:小车跑到第一个二维码的位置
		 /*
		      用户定义, 添加对应代码	 
		 */
		 
		 //--------------------第二步:小车通过串口1发送检测的命令发送给openmv
		 //帧头0+帧头1+0x31+'p'+'o'+'s'+'1'+校验码+帧尾0+帧尾1
		 //命令格式!"1pos1ma(回车+换行)
		 //两种方式(二选一):可以一个个字节发送,也可以发送字符串printf("!"1pos1")
		 //第一种方式:一个个字节发送
		 
		 //openmv端需要:打开串口;等待串口传来数据;接收数据;解码;正常发来OK,不正常不发OK。
		 //openmv上述流程需要在50ms内完成,时间在timer.c中的定时器中断中修改。
		 //openmv正常发来OK次数10次,每次间隔30ms(小于50),默认stm32端在5次中必须有一次是接收解码正常
		 //具体效果需要进行测试,不成功那么就调试openmv或者32的定时间隔的时间
		 Uart1CmdSendFlag=1;
		 while(Uart1CmdSendFlag==1)//收到之后,在timer.c中收到ok就Uart1CmdSendFlag=0跳出循环
		 {
    
    		 
			 usart1_send(UART1_Rec_Head0);
			 usart1_send(UART1_Rec_Head1);
			 usart1_send('1');//功能码0x31
			 usart1_send('p');
			 usart1_send('o');
			 usart1_send('s');
			 usart1_send('1');
		//	 checktemp0=('1'+'p'+'o'+'s'+'1')%256;
			 //0x31+0x70+0x6f+0x73+0x31=0x01B4=436%256=180=0xB4
			// usart1_send(checktemp0);//发送校验码
			 usart1_send(0xB4);//校验码
			 usart1_send(UART1_Rec_Tail0);
			 usart1_send(UART1_Rec_Tail1);		 
			 Delay_ms(1);
			  //使能定时器3,50ms之后判别
			 TIM_Cmd(TIM3,ENABLE);
			 
			 //判别是不是到了50ms,不然一直在里面,等于50ms,就退出循环,继续判断是不是需要发送命令;
			 //在定时器3里面进行改变
			 while(countTIM3flag==0);	 
			 //关闭定时器3,等发送再打开
			 TIM_Cmd(TIM3,DISABLE);
		 }
		 //-------------------收到openmv发过来的ok命令,Uart1CmdSendFlag=0,清标记位	 
		 countTIM3flag=0;
		 Uart1CmdSendFlag=1;
		 checktemp0=0;
		 UART1_OK_Flag=0; 
		 
		 
	 //-------------------------第三步:等待openmv发来的二维码数据
		 UART1_Fun_Flag=0;
		 while(UART1_Fun_Flag==0);
		 //默认等于0,在usart1_action()接收到二维码的信息,UART1_Fun_Flag=1,跳出循环
		 //不然一直串口接收等待二维码的结果
		 //也是openmv端,默认发10次结果,每次发送,间隔50ms,默认5次必须有一次接到并解析成功
		 
		 UART1_Fun_Flag=0;//清理标记,等待下次再次判断
		
		//-----------------显示二维码的数据
    task_flag=2;//完成第一个任务,扫描并且显示二维码
	 }
 }
 
 
 
 //*-----------------------第二个任务----------------------------
 /*任务需求:
 1、小车跑到原料区;打开照明灯;(一个视场能拍照完成,所以到一个地方可以实现)
 2、小车给openmv通信,发送2pos2命令;然后一直等待OK命令,
 3、openmv接收到命令,解析成功,发送OK给stm32;
 
 4、openmv进行颜色识别,将结果10ci发送给32;
 5、stm32接收到颜色的命令,开始搬运物料到车上
 6、stm32搬运完物料,完成第3个任务,清理相关标记,任务标记=3,开始第三个任务;
 */
 //------------------------------------------------------------
  Uart1CmdSendFlag=1;
  while(task_flag==2)//---------------------------------------------(跑到原料区,然后搬上车)
	{
    
    
		/*-------------------小车跑到原料区
		   自己写
		    
		*/
		
		/*-------------------小车打开照明灯,不然openmv拍照不太好
		
		 自己写
		
		*/
		
		/*-------------------小车发送2pos2命令给openmv*/	
		while(Uart1CmdSendFlag==1)
		{
    
    
		   usart1_send(UART1_Rec_Head0);
			 usart1_send(UART1_Rec_Head1);
			 usart1_send('2');//功能码
			 usart1_send('p');
			 usart1_send('o');
			 usart1_send('s');
			 usart1_send('2');
			 checktemp0=('2'+'p'+'o'+'s'+'2')%256;//32+70+6f+73+32=1B6=438%256=182=0xB6
			 usart1_send(checktemp0);//发送校验码
			// usart1_send(0xB4);//校验码
			 usart1_send(UART1_Rec_Tail0);
			 usart1_send(UART1_Rec_Tail1);			 
			 Delay_ms(1);
			  //使能定时器3,50ms之后判别
			 TIM_Cmd(TIM3,ENABLE);
			 //判别是不是到了50ms,不然一直在里面,等于50ms,就退出循环,继续判断是不是需要发送命令;
			 //在定时器3里面进行改变
			 while(countTIM3flag==0);			 
			 //关闭定时器3,等发送再打开
			 TIM_Cmd(TIM3,DISABLE);
		}
		
		 //-------------------收到openmv发过来的ok命令,Uart1CmdSendFlag=0,清标记位	 
		 countTIM3flag=0;
		 Uart1CmdSendFlag=1;//
		 checktemp0=0;
		 UART1_OK_Flag=0; 
		
	 //-------------------------------------------第三步:等待openmv发来的颜色数据
		 UART1_Fun_Flag=0;
		 while(UART1_Fun_Flag==0);
		 //默认等于0,在usart1_action()接收到颜色的信息,UART1_Fun_Flag=2,跳出循环
		 //不然一直串口接收等待颜色的结果
		 //也是openmv端,默认发10次结果,每次发送,间隔50ms,默认5次必须有一次接到并解析成功
		 Delay_ms(100);
		 UART1_Fun_Flag=0;//清理标记,等待下次再次判断
		
		//-------在usart1_action里面显示扫描到的颜色信息的数据
		
		//----------根据扫描到的颜色信息,stm32进行舵机搬运
		/*-----------舵机搬运程序-----------------------------------------------------------------*/
		//根据扫描上层的扫描结果,以及扫描二维码的任务,搬运上层物料到粗加工区
		//根据二维码扫描的内容,以及颜色扫描的顺序,进行搬运
		
		//货架:x  x  x
		//车:  2  1  3
		//     绿  红 蓝
		
		switch(scan_QRcode_UP)//------------------------------------------(搬上车)
		{
    
    
		//---------------------------------二维码顺序是123
			case 1://二维码顺序是123
			{
    
    
				switch(scan_UpColor_num)
				{
    
    
				   case 1://颜色也是123
					 {
    
    
					    /* 搬运顺序123
						 		//货架:            1  2  3
								//车物料(托盘):  2  1  3
								//                 绿 红 蓝
						 */
						 //机械手回0,松开手
						 //机械手伸到货架左边,抓取零件,机械手回到小车的中料盘,放下零件
						 //货架中---车左
						 //货架右---车右
						 //机械手回0						 
					 }
					 break;
					 //--------------------------
					 case 2://132
					 {
    
    
					   /*       搬运顺序123
						 		//货架:1  3  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货架左---车中
						 //货架右---车左
						 //货架中---车右
						 //机械手回0
					 }
					 break;
					 //----------------------------------
					 case 3://213
					 {
    
    
						    /*
						 		//货架:2  1  3
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //中---中
						 //左---左
						 //右---右
						 //机械手回0
					 
					 }
					 break;
					 
					 //--------------------
					 case 4://231
					 {
    
    
					     /*
						 		//货架:2  3  1
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //右---中
						 //左---左
						 //中---右
						 //机械手回0
					 }
					 break;
					 //--------------------------
					 case 5://312
					 {
    
    
					   /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //中---中
						 //右---左
						 //左---右
						 //机械手回0
					 }
					 break;
					 //=====================
					 case 6://321
					 {
    
    
					  /*
						 		//货架:3  2  1
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //右---中
						 //中---左
						 //左---右
						 //机械手回0
					 }
					 break;
					 
					 //---------------------------
					 default:break;
				}
			
			}
			break;
			//--------------------------------------------------------------------二维码顺序是132
			case 2://二维码顺序是132
			{
    
    
				switch(scan_UpColor_num)//货物颜色
				{
    
    
				   case 1://颜色123
					 {
    
    
					    /*如果顺序是132
						 		//货架:1  2  3
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货左1----车中1
						 //货右3----车右3
						 //货中2----车左2
						 //机械手回0
						 
					 }
					 break;
					 //--------------------------
					 case 2://132
					 {
    
    
					   /*
						 		//货架:1  3  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
							 //机械手回0,松开手
						 //货左1----车中1
						 //货中3----车右3
						 //货右2----车左2
						 //机械手回0
					 }
					 break;
					 //----------------------------------
					 case 3://213
					 {
    
    
						    /*
						 		//货架:2  1  3
								//车:  2  1  3
								//     绿  红 蓝
						 */
							
							 //机械手回0,松开手
						 //货中1----车中1
						 //货右3----车右3
						 //货左2----车左2
						 //机械手回0
					 
					 }
					 break;			 
					 //--------------------
					 case 4://231
					 {
    
    
					     /*顺序132
						 		//货架:2  3  1
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货右1---车中1
						 //货中3---车右3
						 //货左2---车左2
						 //机械手回0
					 }
					 break;
					 //--------------------------
					 case 5://312
					 {
    
    
					   /*顺序132
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货中1---车中1
						 //货左3---车右3
						 //货右2---车左2
						 //机械手回0
					 }
					 break;
					 //=====================
					 case 6://321
					 {
    
    
					  /*。。。。顺序132
						 		//货架:3  2  1
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货右1---车中1
						 //货左3---车右3
						 //货中2---车左2
						 //机械手回0
					 }
					 break;
					 
					 //---------------------------
					 default:break;
				}
			
			}
			break;
			
			//--------------------------------------------------二维码顺序是213
			case 3://二维码顺序是213
			{
    
    
					switch(scan_UpColor_num)//货物颜色
				{
    
    
				   case 1://颜色123
					 {
    
    
					    /*  顺序213
						 		//货架:1  2  3
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货中2----车左2
						 //货左1----车中1
						 //货右3----车右3
						 //机械手回0
						 
					 }
					 break;
					 //--------------------------
					 case 2://132
					 {
    
    
					   /*顺序213
						 		//货架:1  3  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
							 //机械手回0,松开手
						 //货右2----车左2
						 //货左1----车中1
						 //货中3----车右3
						 //机械手回0
					 }
					 break;
					 //----------------------------------
					 case 3://213
					 {
    
    
						    /*  顺序213
						 		//货架:2  1  3
								//车:  2  1  3
								//     绿  红 蓝
						 */
								 //机械手回0,松开手
						 //货左2----车左2
						 //货中1----车中1
						 //货右3----车右3
						 //机械手回0
					 
					 }
					 break;			 
					 //--------------------
					 case 4://231
					 {
    
    
					     /*顺序213
						 		//货架:2  3  1
								//车:  2  1  3
								//     绿  红 蓝
						 */
							 //机械手回0,松开手
						 //货左2----车左2
						 //货右1----车中1
						 //货中3----车右3
						 //机械手回0
					 }
					 break;
					 //--------------------------
					 case 5://312
					 {
    
    
					   /*顺序213
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货右2----车左2
						 //货中1----车中1
						 //货左3----车右3
						 //机械手回0
					 }
					 break;
					 //=====================
					 case 6://321
					 {
    
    
					  /*顺序213
						 		//货架:3  2  1
								//车:  2  1  3
								//     绿  红 蓝
						 */
					   //机械手回0,松开手
						 //货中2----车左2
						 //货右1----车中1
						 //货左3----车右3
						 //机械手回0
					 }
					 break;
					 
					 //---------------------------
					 default:break;
				}
			}
			break;
			//-------------------------------------------------二维码顺序是231
			case 4://二维码顺序是231
			{
    
    
				switch(scan_UpColor_num)
				{
    
    
				   case 1://颜色也是123
					 {
    
    
					  
					 }
					 break;
					 //--------------------------
					 case 2://132
					 {
    
    
					 
					 }
					 break;
					 //----------------------------------
					 case 3://213
					 {
    
    
					 
					 }
					 break;
					 
					 //--------------------
					 case 4://231
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 5://312
					 {
    
    
					 
					 }
					 break;
					 //=====================
					 case 6://321
					 {
    
    
					 
					 }
					 break;
					 
					 //---------------------------
					 default:break;
				 }
			
			}
			break;
			//--------------------------------------------二维码顺序是312
			case 5://二维码顺序是312
			{
    
    
					switch(scan_UpColor_num)
					{
    
    
				   case 1://颜色也是123
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 2://132
					 {
    
    
					 
					 }
					 break;
					 //----------------------------------
					 case 3://213
					 {
    
    
					 
					 }
					 break;
					 
					 //--------------------
					 case 4://231
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 5://312
					 {
    
    
					 
					 }
					 break;
					 //=====================
					 case 6://321
					 {
    
    
					 
					 }
					 break;
					 
					 //---------------------------
					 default:break;
				 }
			}
			break;
			//-----------------------------------------------------------二维码顺序是321
			case 6://二维码顺序是321
			{
    
    
					switch(scan_UpColor_num)
					{
    
    
				   case 1://颜色也是123
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 2://132
					 {
    
    
					 
					 }
					 break;
					 //----------------------------------
					 case 3://213
					 {
    
    
					 
					 }
					 break;
					 
					 //--------------------
					 case 4://231
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 5://312
					 {
    
    
					 
					 }
					 break;
					 //=====================
					 case 6://321
					 {
    
    
					 
					 }
					 break;
					 
					 //---------------------------
					 default:break;
				 }
			}
			break;
			//--------------------------
			default:break;
		
		}
			
    task_flag=3;//完成第2个任务,扫描并且显示识别到的颜色,绿色显示,搬上车,准备第3个任务	,移动到粗加工区
	}
	
	
	//---------------------------------------------------------------  (循迹移动到粗加工区)
	if(task_flag==3)
	{
    
    
		/*-----------------------------
		(完成代码:)循迹,走到粗加工区,准备放下来
		*/
		task_flag=4;//准备第四个任务,按照上层的顺序,放下到指定的颜色区域,车正方向看,左边到右边顺序是:蓝色、红色、绿色
	}
		//---------------------------------------------------------------------------------------------------------------------下货
	//-------------------------------------------------------------------(在车上,放下到粗加工区)
	//
	//准备第4个任务:按照上层的搬运顺序,放下到指定的颜色区域,车正方向看,左边到右边顺序是:蓝色、红色、绿色
	if(task_flag==4)
	{
    
    
		/*-----------------------------
		(完成代码:)放下到粗加工区
		*/
			switch(scan_QRcode_UP)
		{
    
    
		//---------------------------------二维码顺序是123
			case 1://二维码顺序是123
			{
    
    
				
					    /*
						 		//圆环:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //机械手伸到小车中间料盘1----抓物料----小车机械手伸到货架中间1,放手
						 //车左2---货右2
						 //车右3---货左3
						 //机械手回0		
			
			}
			break;
			//------------------------------------------二维码顺序是132
			case 2://二维码顺序是132
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //机械手伸到小车中间料盘1----抓物料----小车机械手伸到货架中间1,放手
						 //车右3---货左3
						 //车左2---货右2
						 //机械手回0
				
			}
			break;
			//--------------------------------------------------二维码顺序是213
			case 3://二维码顺序是213
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //机械手伸到小车左边料盘2----抓物料----小车机械手伸到货架右边2,放手
						 //车中1---货中1
						 //车右3---货左3
						 //机械手回0
			}
			break;
			//-------------------------------------------------二维码顺序是231
			case 4://二维码顺序是231
			{
    
    
             /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //车左2---货右2
						 //车右3---货左3
						 //车中1---货中1
						 //机械手回0
			}
			break;
			//--------------------------------------------二维码顺序是312
			case 5://二维码顺序是312
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //车右3---货左3
						 //车中1---货中1
						 //车左2---货右2
						 //机械手回0
			}
			break;
			//-----------------------------------------------------------二维码顺序是321
			case 6://二维码顺序是321
			{
    
    
				/*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //车右3---货左3
						 //车左2---货右2
						 //车中1---货中1
						 //机械手回0
				
			}
			break;
			//--------------------------
			default:break;
		
		}
		
		
		task_flag=5;//第五个任务,移动到半加工区域
	}
	
	Delay_ms(100);
	//-------------------------------------------------------------------(在粗加工区搬上车)
	//
	//准备第4个任务:按照上层的搬运顺序,放下到指定的颜色区域,车正方向看,左边到右边顺序是:蓝色、红色、绿色
	if(task_flag==5)
	{
    
    
		/*-----------------------------
		(完成代码:)(在粗加工区搬上车)
		*/
			switch(scan_QRcode_UP)
		{
    
    
		//---------------------------------二维码顺序是123
			case 1://二维码顺序是123
			{
    
    		
					    /*
						 		//圆环:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //圆环中1---车中1:
				    //圆环右2----车左2:
				    //圆环左3----车右3:
			}
			break;
			//------------------------------------------二维码顺序是132
			case 2://二维码顺序是132
			{
    
    
			  /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货中1---车中1:
				    //货左3----车右3:
				    //货右2----车左2:
				
			}
			break;
			//--------------------------------------------------二维码顺序是213
			case 3://二维码顺序是213
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货右2---车左2:
				    //货中1----车中1:
				    //货左3----车右3:
			}
			break;
			//-------------------------------------------------二维码顺序是231
			case 4://二维码顺序是231
			{
    
    
             /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货右2---车左2:
				    //货左3----车右3:
				    //货中1----车中1:
			}
			break;
			//--------------------------------------------二维码顺序是312
			case 5://二维码顺序是312
			{
    
    
			 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货左3---车右3:
				    //货中1----车中1:
				    //货右2----车左2:
			}
			break;
			//-----------------------------------------------------------二维码顺序是321
			case 6://二维码顺序是321
			{
    
    
			 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货左3---车右3:
				    //货右2----车左2:
				    //货中1----车中1:
				
			}
			break;
			//--------------------------
			default:break;
		
		}
		
		
		task_flag=6;//第五个任务,移动到半加工区域
	}
	
	Delay_ms(100);
			//--------------------------------------------------------------(移动到半加工区)
	//准备第6个任务:移动到半加工区
	if(task_flag==6)
	{
    
    
		/*-----------------------------
		(完成代码:)循迹移动到半加工区
		*/
		task_flag=7;//第6个任务,在半加工区放下来按照上层的搬运顺序,放下到指定的颜色区域,车正方向看,左边到右边顺序是:蓝色、红色、绿色
	}
	
				//--------------------------------
	//---------------------------------------------------------------(在车上放下物料到半加工区)
	if(task_flag==7)
	{
    
    
		/*-----------------------------
		(完成代码:)放下物料到半加工区
		*/
	
			switch(scan_QRcode_UP)
		{
    
    
		//---------------------------------二维码顺序是123
			case 1://二维码顺序是123
			{
    
    
				
					    /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //机械手伸到小车中间料盘1----抓物料----小车机械手伸到货架中间1,放手
						 //车左2---货右2
						 //车右3---货左3
						 //机械手回0	
			}
			break;
			//------------------------------------------二维码顺序是132
			case 2://二维码顺序是132
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //机械手伸到小车中间料盘1----抓物料----小车机械手伸到货架中间1,放手
						 //车右3---货左3
						 //车左2---货右2
						 //机械手回0				
			}
			break;
			//--------------------------------------------------二维码顺序是213
			case 3://二维码顺序是213
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //机械手伸到小车左边料盘2----抓物料----小车机械手伸到货架右边2,放手
						 //车中1---货中1
						 //车右3---货左3
						 //机械手回0
			}
			break;
			//-------------------------------------------------二维码顺序是231
			case 4://二维码顺序是231
			{
    
    
             /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //车左2---货右2
						 //车右3---货左3
						 //车中1---货中1
						 //机械手回0
			}
			break;
			//--------------------------------------------二维码顺序是312
			case 5://二维码顺序是312
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //车右3---货左3
						 //车中1---货中1
						 //车左2---货右2
						 //机械手回0
			}
			break;
			//-----------------------------------------------------------二维码顺序是321
			case 6://二维码顺序是321
			{
    
    
				/*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //车右3---货左3
						 //车左2---货右2
						 //车中1---货中1
						 //机械手回0
				
			}
			break;
			//--------------------------
			default:break;
		
		}
	
		
		task_flag=8;//第8个任务,空车返回到原料区
	}
	
		//---------------------------------------------------------------(返回到原料区)
	if(task_flag==8)
	{
    
    
		/*-----------------------------
		(完成代码:)循迹移动到原料区
		*/
		task_flag=9;//第8个任务,搬运下层物料到车上
	}
	
	//----------------------------------------------------------------(将下一层的搬上车)
	if(task_flag==9)
	{
    
    
		/*-----------------------------
		(完成代码:)搬运下层物料到车上
		*/
			switch(scan_QRcode_DOWN)
		{
    
    
		//---------------------------------
			case 1://二维码顺序是123
			{
    
    
				switch(scan_DownColor_num)
				{
    
    
				   case 1://颜色也是123
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 2://132
					 {
    
    
					 
					 }
					 break;
					 //----------------------------------
					 case 3://213
					 {
    
    
					 
					 }
					 break;
					 
					 //--------------------
					 case 4://231
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 5://312
					 {
    
    
					 
					 }
					 break;
					 //=====================
					 case 6://321
					 {
    
    
					 
					 }
					 break;
					 
					 //---------------------------
					 default:break;
 
				
				}
			
			}
			break;
			//------------------------------------------
			case 2://二维码顺序是132
			{
    
    
				switch(scan_DownColor_num)
				{
    
    	
				   case 1://颜色也是123
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 2://132
					 {
    
    
					 
					 }
					 break;
					 //----------------------------------
					 case 3://213
					 {
    
    
					 
					 }
					 break;
					 
					 //--------------------
					 case 4://231
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 5://312
					 {
    
    
					 
					 }
					 break;
					 //=====================
					 case 6://321
					 {
    
    
					 
					 }
					 break;
					 
					 //---------------------------
					 default:break;
				 }
			}
			break;
			//--------------------------------------------------
			case 3://二维码顺序是213
			{
    
    
				switch(scan_DownColor_num)
				{
    
    
				   case 1://颜色也是123
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 2://132
					 {
    
    
					 
					 }
					 break;
					 //----------------------------------
					 case 3://213
					 {
    
    
					 
					 }
					 break;
					 
					 //--------------------
					 case 4://231
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 5://312
					 {
    
    
					 
					 }
					 break;
					 //=====================
					 case 6://321
					 {
    
    
					 
					 }
					 break;
					 
					 //---------------------------
					 default:break;
				 }
			}
			break;
			//-------------------------------------------------
			case 4://二维码顺序是231
			{
    
    
				switch(scan_DownColor_num)
				{
    
    
				   case 1://颜色也是123
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 2://132
					 {
    
    
					 
					 }
					 break;
					 //----------------------------------
					 case 3://213
					 {
    
    
					 
					 }
					 break;
					 
					 //--------------------
					 case 4://231
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 5://312
					 {
    
    
					 
					 }
					 break;
					 //=====================
					 case 6://321
					 {
    
    
					 
					 }
					 break;
					 
					 //---------------------------
					 default:break;
				 }
			
			}
			break;
			//--------------------------------------------
			case 5://二维码顺序是312
			{
    
    
					switch(scan_DownColor_num)
					{
    
    
				   case 1://颜色也是123
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 2://132
					 {
    
    
					 
					 }
					 break;
					 //----------------------------------
					 case 3://213
					 {
    
    
					 
					 }
					 break;
					 
					 //--------------------
					 case 4://231
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 5://312
					 {
    
    
					 
					 }
					 break;
					 //=====================
					 case 6://321
					 {
    
    
					 
					 }
					 break;
					 
					 //---------------------------
					 default:break;
				 }
			}
			break;
			//-----------------------------------------------------------
			case 6://二维码顺序是321
			{
    
    
					switch(scan_DownColor_num)
					{
    
    
				   case 1://颜色也是123
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 2://132
					 {
    
    
					 
					 }
					 break;
					 //----------------------------------
					 case 3://213
					 {
    
    
					 
					 }
					 break;
					 
					 //--------------------
					 case 4://231
					 {
    
    
					 
					 }
					 break;
					 //--------------------------
					 case 5://312
					 {
    
    
					 
					 }
					 break;
					 //=====================
					 case 6://321
					 {
    
    
					 
					 }
					 break;
					 
					 //---------------------------
					 default:break;
				 }
			}
			break;
			//--------------------------
			default:break;
		
		}
		task_flag=10;//第9个任务,移动到粗加工区
	}
		//-------------------------------------------------------------(移动到粗加工区)
	if(task_flag==10)
	{
    
    
		/*-----------------------------
		(完成代码:)移动到粗加工区
		*/
		task_flag=11;//第10个任务,按照顺序,放下对应的颜色圆环中
	}
	
			//----------------------------------------------------------(搬下到粗加工中)
	if(task_flag==11)
	{
    
    
		/*-----------------------------
		(完成代码:)
		*/
		
		/*-----------------------------
		(完成代码:)放下到粗加工区
		*/
			switch(scan_QRcode_DOWN)
		{
    
    
		//---------------------------------二维码顺序是123
			case 1://二维码顺序是123
			{
    
    
				
					    /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //机械手伸到小车中间料盘1----抓物料----小车机械手伸到货架中间1,放手
						 //车左2---货右2
						 //车右3---货左3
						 //机械手回0
				 
				
			
			}
			break;
			//------------------------------------------二维码顺序是132
			case 2://二维码顺序是132
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //机械手伸到小车中间料盘1----抓物料----小车机械手伸到货架中间1,放手
						 //车右3---货左3
						 //车左2---货右2
						 //机械手回0
				
			}
			break;
			//--------------------------------------------------二维码顺序是213
			case 3://二维码顺序是213
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //机械手伸到小车左边料盘2----抓物料----小车机械手伸到货架右边2,放手
						 //车中1---货中1
						 //车右3---货左3
						 //机械手回0
			}
			break;
			//-------------------------------------------------二维码顺序是231
			case 4://二维码顺序是231
			{
    
    
             /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //车左2---货右2
						 //车右3---货左3
						 //车中1---货中1
						 //机械手回0
			}
			break;
			//--------------------------------------------二维码顺序是312
			case 5://二维码顺序是312
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //车右3---货左3
						 //车中1---货中1
						 //车左2---货右2
						 //机械手回0
			}
			break;
			//-----------------------------------------------------------二维码顺序是321
			case 6://二维码顺序是321
			{
    
    
				/*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //车右3---货左3
						 //车左2---货右2
						 //车中1---货中1
						 //机械手回0
				
			}
			break;
			//--------------------------
			default:break;
		
		}
		
		
		task_flag=12;//第11个任务,按照顺序,放上车中,
	}
	
	
		
			//---------------------------------------------------------------------(搬上车)
	if(task_flag==12)
	{
    
    
		/*-----------------------------
		(完成代码:)按照顺序,按照顺序,放上车中,
		*/
		/*-----------------------------
		(完成代码:)(在粗加工区搬上车)
		*/
			switch(scan_QRcode_DOWN)
		{
    
    
		//---------------------------------二维码顺序是123
			case 1://二维码顺序是123
			{
    
    		
					    /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货中1---车中1:
				    //货右2----车左2:
				    //货左3----车右3:
			}
			break;
			//------------------------------------------二维码顺序是132
			case 2://二维码顺序是132
			{
    
    
			  /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货中1---车中1:
				    //货左3----车右3:
				    //货右2----车左2:
				
			}
			break;
			//--------------------------------------------------二维码顺序是213
			case 3://二维码顺序是213
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货右2---车左2:
				    //货中1----车中1:
				    //货左3----车右3:
			}
			break;
			//-------------------------------------------------二维码顺序是231
			case 4://二维码顺序是231
			{
    
    
             /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货右2---车左2:
				    //货左3----车右3:
				    //货中1----车中1:
			}
			break;
			//--------------------------------------------二维码顺序是312
			case 5://二维码顺序是312
			{
    
    
			 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货左3---车右3:
				    //货中1----车中1:
				    //货右2----车左2:
			}
			break;
			//-----------------------------------------------------------二维码顺序是321
			case 6://二维码顺序是321
			{
    
    
			 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //货左3---车右3:
				    //货右2----车左2:
				    //货中1----车中1:
				
			}
			break;
			//--------------------------
			default:break;
		
		}
		task_flag=13;//第12个任务,移动到半加工区中
	}
	
			//----------------------------------------------------------------(移动到半加工区)
	if(task_flag==13)
	{
    
    
		/*-----------------------------
		(完成代码:)移动到半加工区中,
		*/
		task_flag=13;//第13个任务,按照顺序,放下来到圆环中,根据实力,选择码垛,还是不码垛
	}
	
		//---------------------------------(车上搬下来,根据实力,选择是不是选择码垛,)
	if(task_flag==14)
	{
    
    
		
			switch(scan_QRcode_DOWN)
		{
    
    
		//---------------------------------二维码顺序是123
			case 1://二维码顺序是123
			{
    
    
				
					    /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //机械手伸到小车中间料盘1----抓物料----小车机械手伸到货架中间1,放手
						 //车左2---货右2
						 //车右3---货左3
						 //机械手回0	
			}
			break;
			//------------------------------------------二维码顺序是132
			case 2://二维码顺序是132
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //机械手伸到小车中间料盘1----抓物料----小车机械手伸到货架中间1,放手
						 //车右3---货左3
						 //车左2---货右2
						 //机械手回0				
			}
			break;
			//--------------------------------------------------二维码顺序是213
			case 3://二维码顺序是213
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //机械手伸到小车左边料盘2----抓物料----小车机械手伸到货架右边2,放手
						 //车中1---货中1
						 //车右3---货左3
						 //机械手回0
			}
			break;
			//-------------------------------------------------二维码顺序是231
			case 4://二维码顺序是231
			{
    
    
             /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //车左2---货右2
						 //车右3---货左3
						 //车中1---货中1
						 //机械手回0
			}
			break;
			//--------------------------------------------二维码顺序是312
			case 5://二维码顺序是312
			{
    
    
				 /*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //车右3---货左3
						 //车中1---货中1
						 //车左2---货右2
						 //机械手回0
			}
			break;
			//-----------------------------------------------------------二维码顺序是321
			case 6://二维码顺序是321
			{
    
    
				/*
						 		//货架:3  1  2
								//车:  2  1  3
								//     绿  红 蓝
						 */
						 //机械手回0,松开手
						 //车右3---货左3
						 //车左2---货右2
						 //车中1---货中1
						 //机械手回0
				
			}
			break;
			//--------------------------
			default:break;
		
		}
	
		
		task_flag=15;//第15个任务,空车,返回到返回去中
	}
					//--------------------------------------------------------------(第15个任务,空车,回返回区)
	if(task_flag==15)
	{
    
    
		/*-----------------------------
		(完成代码:)第14个任务,空车,返回到返回去中
		*/
		task_flag=0;//任务结束,滴滴滴报警。
		
	}
}



//*****************************函数声明,后面定义
//第一个测试:LED测试
void test1()
{
    
    
  LED1=LED_ON;
	LED2=LED_ON;
	LED3=LED_ON;
	LED4=LED_ON;
	Delay_ms(1000);

	LED1=LED_OFF;
	LED2=LED_OFF;
	LED3=LED_OFF;
	LED4=LED_OFF;
	Delay_ms(1000);
}
//*****************************函数声明,后面定义
//第2个测试:蜂鸣器测试
void test2()
{
    
    
  BEEP=BEEP_ON;
	Delay_ms(500);

  BEEP=BEEP_OFF;
	Delay_ms(500);
}

//*****************************函数声明,后面定义
//第3个测试:按键查询的测试
void test3()
{
    
    
 
   int keyvalue=0;
  // keyvalue=KEY_SCAN();
  switch(keyvalue)
  	{
    
    
		case KEY1Value://KEY2Value
			LED1=LED_ON;
			break;
		case KEY1ValueLong:
			LED1=LED_OFF;
			break;
		
		case KEY2Value:
			LED2=LED_ON;
			break;
		case KEY2ValueLong:
			LED2=LED_OFF;
			break;

		case KEY3Value:
			LED1=LED_ON;
			break;
		case KEY3ValueLong:
			LED1=LED_OFF;
			break;
		
		case KEY4Value:
			LED2=LED_ON;
			break;
		case KEY4ValueLong:
			LED2=LED_OFF;
			break;

		case KEY5Value:
			LED1=LED_ON;
			break;
		case KEY5ValueLong:
			LED1=LED_OFF;
			break;
		default:break;
			
  	}
}



猜你喜欢

转载自blog.csdn.net/lmf666/article/details/112687464
mv