Beispiel #1
0
 void main(void)
{

  ENTR_CRT_SECTION();
  /* Setup STM32 system (clock, PLL and Flash configuration) */
  SystemInit();

  /* Set the Vector Table base location at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  


  // I2C1 init
  I2C1_Init();

  EXT_CRT_SECTION();

  // GLCD init
  GLCD_PowerUpInit(0x0); //(
  GLCD_Backlight(BACKLIGHT_ON);
  GLCD_SetFont(&Terminal_9_12_6,0x000F00,0x00FF0);
  GLCD_SetWindow(10,10,131,131);

  // Init Accl sensor
  if(FALSE == Accl_Init())
  {
    // Initialization fault
    GLCD_TextSetPos(0,0);
    GLCD_print("\fLIS3LV020 Init.\r\nfault\r\n");
    while(1);
  }
    //Init CarControl and Delay
  Car_Init();
  DWT_Init();
  HCSR04_Init();
    // SysTick end of count event each 0.5s with input clock equal to 9MHz (HCLK/8, default)
  SysTick_Config(150000);
  SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);

  DWT_Delayms(1000);
  while(1)
  {

    //while(1){GLCD_print("Current state: %d \r",GPIO_ReadInputDataBit(JS_LEFT_PORT, JS_LEFT_MASK));} 
    //car_feedback=accl_feedback();
 /*   A = accX[1];
    B = velX[1];
    C = posX[1]; */
if(SysTickF1)
{
        SysTickF1 = FALSE;
        //GLCD_TextSetPos(0,0);
            GLCD_print("%d, %d \r", get_Xvel(), accl_feedback());
            DWT_Delayms(500);
            
}
    if(NewInstr) //
    {
      DWT_Delayms(1000);
      NewInstr = FALSE;
    
    //GoCar(Test, TestTurn);
    // 1. Give command (desired state)
    //desiredState;

    // 2. Run machine learning to test action
    action = goToState(car_instr);
    GoCars(action);
    //  testExp();
    int runTime = 0;
    while (runTime < 1){
        DWT_Delayms(700);
        runTime++;
    }
            GLCD_TextSetPos(0,0);
            GLCD_print("\f%d,%d;%d,%d\r\n", get_X_accFeedback(0), get_Y_accFeedback(0), get_X_vel(0), get_Y_vel(0));
            GLCD_print("%d,%d;%d,%d\r\n", get_X_accFeedback(1), get_Y_accFeedback(1), get_X_vel(1), get_Y_vel(1));
            GLCD_print("%d,%d;%d,%d\r\n", get_X_accFeedback(2), get_Y_accFeedback(2), get_X_vel(2), get_Y_vel(2));
            GLCD_print("%d,%d;%d,%d\r\n", get_X_accFeedback(3), get_Y_accFeedback(3), get_X_vel(3), get_Y_vel(3));
            GLCD_print("%d,%d;%d,%d\r\n", get_X_accFeedback(4), get_Y_accFeedback(4), get_X_vel(4), get_Y_vel(4));
            GLCD_print("%d,%d;%d,%d\r\n", get_X_accFeedback(5), get_Y_accFeedback(5), get_X_vel(5), get_Y_vel(5));
            GLCD_print("%d,%d;%d,%d\r\n", get_X_accFeedback(6), get_Y_accFeedback(6), get_X_vel(6), get_Y_vel(6));
      //      GLCD_print("%d,%d;%d,%d\r\n", get_X_accFeedback(7), get_Y_accFeedback(7), get_X_vel(7), get_Y_vel(7));
                car_instr=car_stop;
    GoCars(car_instr);
            DWT_Delayms(2000);
    }
    //GoCars(3); //Stopping the car
    
    
    // 3. Wait x ms
    //Wait in ML-method testAllActions
    
    // 4. Return value from accelerometer
    //Return value from accelerometer in ML-method testAllActions
    
    // 5. Evaluate action compared to state
    //Already implemented in ML-file. No need to alter (probably)
    
    // 6. Repeat 3-5 until all actions has been tested
    //Already implemented in ML-file. No need to alter (probably)
    
    // 7. Choose the correct state
    //Already implemented in ML-file. No need to alter (probably)
  }
}
Beispiel #2
0
int main(void)
{
	u8 len=0;
	u8 temp[100];
	u8 t=0;
	u8 flag=0;
	char mode='O';
	long value=0;
	u8 counter=0;
	//char val2str[]="50";
	char SelfCheck='O';
	int D_val=0;
	u8 SelfCheckCounter=0;
	/////////////////////以上变量定义///////////////////////////
	
	delay_init(72);
	USART1_Init(19200);//与地面站传递命令
	USART2_Init(115200);//与X86板子传递命令
	USART3_Init(115200);//调试用
	HCSR04_Init();
	ResetOLED();
	OLED_Init();
	Key_Init();
	///////////////以上初始化///////////////////////
	OLED_ShowString(35,20,"READY",24);
	OLED_Refresh_Gram();
	delay_ms(1000);
	OLED_Clear();
	/////////////////////////////欢迎界面,提示准备工作/////////////////////////////////
	while(KEY==1)
	{
		OLED_ShowString(0,0,"Self checking now...",12);
		OLED_Refresh_Gram();
		if(USART_RX2_STA&0x8000)
		{					   
			len=USART_RX2_STA&0x3fff;//得到此次接收到的数据长度
			for(t=0;t<len;t++)
			{
				temp[t]=Rx2Buf[t];
				while((USART2->SR&0X40)==0);//等待发送结束
			}
			flag=1;
			USART_RX2_STA=0;
		}//接受来自X86的命令,用于自检。
		
		if(flag==1)
		{
			SelfCheck=TempOrPressure(temp);
				{
					if(SelfCheck=='C')
					{
						value=ValueOfMea(temp);
						if(value==1)
						{
							OLED_ShowString(0,15,"Environment ok",12);
							SelfCheckCounter++;
						}
						if(value==2)
						{
							OLED_ShowString(0,30,"The data chain ok",12);
						}
						if(value==0)
						{
							OLED_ShowString(0,42,"Checking fail...",12);
						}
					}
				}
			memset(temp,0,sizeof(u8)*100);
			flag=0;
		}//先对开发环境进行自检,在VS下下发ok标志即可。
		OLED_Refresh_Gram();
		
		if(SelfCheckCounter==1)//如果已经通过了开发环境自检
		{
			while(KEY==1)//不按强制退出就一直自检,直到成功
			{
				if(DataChain_SelfTest()==1)//数据链自检完成
					break;
				else
					continue;
			}
			SelfCheckCounter=0;
			break;//在不按按键强制退出的情况下,只有自检成功了才能退出。
		}
	}
	OLED_Clear();
	/////////////////////////以上对上位机的自检,按键强制结束//////////////////
	
	OLED_ShowString(0,0,"Parameters",16);
	OLED_ShowString(0,16,"X=",12);
	OLED_ShowString(0,28,"Y=",12);
  OLED_ShowString(0,40,"S=",12);
  OLED_ShowString(0,52,"D=",12);
	OLED_Refresh_Gram();
	flag=0;//复位flag
	///////////显示参数////////////////////////////////
	//AutoLaunch();
	////////////////////////以上开始起飞/////////////////////////////////

	while(1)
	{
		if(USART_RX2_STA&0x8000)
		{					   
			len=USART_RX2_STA&0x3fff;//得到此次接收到的数据长度
			for(t=0;t<len;t++)
			{
				temp[t]=Rx2Buf[t];
				while((USART2->SR&0X40)==0);//等待发送结束
			}
			flag=1;
			USART_RX2_STA=0;
			//printf3("%s\r\n",temp);
		}//接受来自X86的命令
		
		
		if(flag==1)
		{
			mode=TempOrPressure(temp);
			if(mode=='S')
			{
				value=ValueOfMea(temp);
					{
						#ifdef __TRANSPARENT_MODE
							printf1("\"S\":\"%ld\"\r\n",value);
						#endif
						
						#ifdef __COMMAND_MODE
							E17_SendMsg(CMD_S_PARAM,value);
						#endif						
					}
				OLED_ShowNum(20,40,value,6,12);
//				counter++;
			}  
			
			if(mode=='X')
			{
				value=ValueOfMea(temp);
					{
						#ifdef __TRANSPARENT_MODE
							printf1("\"X\":\"%ld\"\r\n",value);
						#endif
						#ifdef __COMMAND_MODE
							E17_SendMsg(CMD_X_PARAM,value);
						#endif	
					}
				OLED_ShowNum(20,16,value,6,12);
//				counter++;
			}
			else if(mode=='Y')
			{
				value=ValueOfMea(temp);
					{
						#ifdef __TRANSPARENT_MODE
							printf1("\"Y\":\"%ld\"\r\n",value);
						#endif
						#ifdef __COMMAND_MODE
							E17_SendMsg(CMD_Y_PARAM,value);
						#endif	
					}
				OLED_ShowNum(20,28,value,6,12);
//				counter++;
			}
			{
				  delay_ms(10);//太小在透传情况下可能出问题?
					{
						D_val=HCSR04_GetDistance_Filter();
						#ifdef __TRANSPARENT_MODE
							printf1("\"D\":\"%ld\"\r\n",D_val);
						#endif
						
						#ifdef __COMMAND_MODE
							E17_SendMsg(CMD_D_PARAM,value);			
						#endif	
					}
				OLED_ShowNum(20,52,D_val,6,12);
//				counter=0;
			}//去掉了判断,每个周期都要做判断,同时进行距离的pid调控。
			OLED_Refresh_Gram();
			memset(temp,0,sizeof(u8)*100);
			flag=0;
		}
	}
}