⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 这是一个正确的飞思卡尔智能车程序,希望对比赛有帮助!!!
💻 C
📖 第 1 页 / 共 2 页
字号:
                	  	}
                	  if(Mid_right==32) BlackLocation[m]=127; //白色标志位
               		}
					    if(BlackLocation[m] != 127)
							    Mid_def = BlackLocation[m];
            	}     
            	else 
            	{    
                 
	       			leftflag = rightflag = 0;
               		for(;(Mid_right<32)||(Mid_left>0);Mid_left--,Mid_right++)
               		  {
               		    
                	      	if(leftflag == 0 && LineValue[m][Mid_left]==0 && Mid_left >=0)//&&LineValue[m][Mid_left-1]==1 ) 
                	              blacklocationl=Mid_left;
                	      	 else 
                	               leftflag = 1;
                	      	if(rightflag == 0 && LineValue[m][Mid_right]==0 && Mid_right <=32)//&& LineValue[m][Mid_right+1] == 1)
                	      	  	blacklocationr=Mid_right; 
                	        else 
                	      		rightflag=1;
                	      	if((rightflag == 1) &&  (leftflag == 1))
                		           break;
               		}
               		BlackLocation[m]=( blacklocationl+ blacklocationr)>>1;
					if(BlackLocation[m] != 127)
						Mid_def = BlackLocation[m];
                 }
           }
	    }
}

////////////BL_abs///////////////////////
byte BL_abs(byte temp_a ,  byte temp_b)
  {
      if(temp_a>temp_b) return (temp_a-temp_b);
      else return (temp_b-temp_a);
  }


////////////BlackLocation_Deal/////////////
void  CCD_BL_Deal(void)
  {
    for(i=LINE_MAX-1;i>=30;i--)
      if(BlackLocation[i]!=127 && BL_abs(BlackLocation[i],BlackLocation[i-3])<3)
       break;
    for(;i>0;i--)
      {
            if(BL_abs(BlackLocation[i],BlackLocation[i-1])>3)  
             BlackLocation[i-1]=BlackLocation[i] ;
      
      }
    ErrorSum = 0;
    for(i=0;i<LINE_MAX;i++)
      { 
        Error_N_1[i]=Error_N[i];
        Error_N[i] =BlackLocation[i]-16;
        if(Error_N_1[i] <100 )
        ErrorSum+=Error_N_1[i];
      }   
      

  }
  
////////////Cal_Duty/////////////
void Cal_Duty(void)
  {
      PreSpeedFlag=SpeedFlag;
      PORTA_BIT7=0;
      if(Error_N[2]>-12 && Error_N[2]<12          //12时候不会冲出去
                                  && Error_N_1[2]!=127 && MidFlag)//NearFlag)//
          {   
             // PORTA_BIT7=1; 
              if(SpeedFlag==1)   Error_N_1[2] = Error_N[2]; 
              Duty= Mid_PWM+15*Error_N[2]
                                        +10*10*(Error_N_1[2]-Error_N[2])/10;
              Cal_Speed=100;
              SpeedFlag=0;
              Length++;
              return;
          }
      PreLength=Length;
      Length=0;      
      if(Error_N[LINE_M]>-12&& Error_N[LINE_M]<12 && NearFlag 
                                   && Error_N_1[LINE_M]!=127) 
          {
              if(SpeedFlag==2)   Error_N_1[LINE_M] = Error_N[LINE_M];
              //Duty= Mid_PWM+30*Error_N[17];
              Duty= Mid_PWM+32*Error_N[LINE_M];
                                        //+32*3*(Error_N_1[17]-Error_N[17])/10;
              Cal_Speed=80;
              //PORTA_BIT7=1;
              if(Error_N[LINE_M]>-7 && Error_N[LINE_M]<7)  MidFlag=1;
              else MidFlag=0;
              SpeedFlag=1;
              return;
          }
        
        MidFlag=0;
        SpeedFlag=2;
        NearFlag=0;
        if(Error_N[LINE_B]>100)  
          {
            //PORTA_BIT7=1;
            if( Error_N_1[LINE_B] >0 && Error_N_1[LINE_B]<100 ) Duty=Right_Max;
            if( Error_N_1[LINE_B] < 0) Duty=Left_Max;
            return; 
          }//||Error_N_1[49]>200
        if(Error_N[LINE_B]>-5 && Error_N[LINE_B]<5) 
            NearFlag=1;
        Duty= Mid_PWM+35*Error_N[LINE_B];
        Cal_Speed=60;
        
  }
  
/////////////SpeedCtrl////////////
void SpeedCtrl(void)
  {    //PORTA_BIT7=0;
       if(SpeedFlag==0)
          {
            Max_Speed= 110;
            Min_Speed=  90;
          }
        if(SpeedFlag==1)
          {
            Max_Speed= 85;
            Min_Speed=  70;
          }
        if(SpeedFlag==2) 
          {
            Max_Speed= 70;
            Min_Speed= 50;
           }
            
        if(SpeedFlag!=0 && PreSpeedFlag==0 )// PreLength > (byte)temp3) 
                                                                                   //&& Length==0)
          { 
            //PORTA_BIT7=1;
            SetSpeed(0);
           // Count=(byte)temp4;
            //SpeedTerminal=0; 
            //Length=0;
            return;
          }
         if(Count>0)
          {
            Count--;
            return;
          }
      // if(Speed < Cal_Speed) SpeedTerminal=1;
      //  if(SpeedTerminal)
      //    {
            if(Speed>Cal_Speed)
            SetSpeed(Min_Speed);
            else 
            SetSpeed(Max_Speed);
       //   }
   }       
/////////////Main////////////////
void main(void)
 {
   byte b=0;
   DDRA=0xFF;
   DDRB=0xFF;
   PORTB=0xff;
   init_Bus();
  // IintEEPROM();
   InitPWM();
   init_ECT();
   init_ATD(); 
   InitSCI();
   init_IRQ();
   Delay_ms(2000);
   /*key();
   temp0 =ReadEEPROM(1)+15 ;
   PORTB =~(byte)temp0;
   Delay_ms(1000);
   temp1 = ReadEEPROM(2) + 10 ;
   PORTB =~(byte)temp1;
   Delay_ms(1000);
   temp2 =ReadEEPROM(3) + 10 ;
   PORTB =~(byte)temp2;
   Delay_ms(1000);
   temp3 = ReadEEPROM(4) * 10 ;
   PORTB =~(byte)temp3;
   Delay_ms(1000);
   temp4 = ReadEEPROM(5) ;
   PORTB =~(byte)temp4;
   Delay_ms(1000); */
   // SetSpeed(100);
   SetSpeed(70);
   EnableInterrupts;
   
  for(;;) 
  {
      PORTA_BIT7=0;
      init_ATD();
      CCD_Info();
      CCD_BlackLocation();
      CCD_BL_Deal();
      Cal_Duty();
      SetDutycycle(Duty);
      /* b=b^1;
      PORTB=~b;
      Speed_array[b]= PACN0;
      PACN0=0;
      Speed=Speed_array[0]+Speed_array[1];     */
      //SpeedCtrl();
     SetSpeed(70);
      //TxSCI_1B(Speed);
      //Delay_ms(100);
      
      //SpeedConctrl
      //if(Speed<Cal_Speed)  SetSpeed(180);
      //else SetSpeed(0);
      
     /* for(i=0;i<LINE_MAX;i++)
          {
            TxSCI_1B(BlackLocation[i]);
             for(x=0;x<500;x++)
              Delay_6us();
          }
           for(i=0;i<80;i++)
          {
            TxSCI('!') ;
          }
       for(i=0;i<LINE_MAX;i++)
          {
            TxSCI_1B(Error_N[i]);
             for(x=0;x<500;x++)
              Delay_6us();
          }
           for(i=0;i<80;i++)
          {
            TxSCI('!');
          }
        TxSCI_2B(Duty);
        for(x=0;x<2000;x++)
              Delay_6us();
              */
      b=~b;
      PORTB=b;
  /*  for(i=0;i<80;i++)
         //  {
           TxSCI('@');
         //  }
      for(m=0;m<LINE_MAX;m++)
      //  {
          TxSCI_1B(BlackLocation[m]);
          for(i=0;i<40;i++)
         //  {
           TxSCI('@');
         //  }
         TxSCI_2B(Duty);   
         for(i=0;i<20;i++)
         //  {
           TxSCI('@');
         //  }   
         for(m=0;m<LINE_MAX;m++)        
           for(n=0;n<33;n++)
            {
              TxSCI(LineValue[m][n]);
             
             // for(x=0;x<800;x++)
             // Delay_6us();
            }     */
        //  for(x=0;x<2000;x++)
       //       Delay_6us();
           //for(i=0;i<47;i++)
          // {
           // TxSCI_over();
          // }
       }
/*      
///////////////////////////////Far          
      for(i=0;i<35;i++)
        {
          TxSCI(LineValue_Far[i]);
          for(x=0;x<5000;x++)
          Delay_6us();
        }
        TxSCI('F') ;
        for(i=0;i<44;i++)
        {
            TxSCI_over();
        }
////////////////////////////////Mid        
        for(i=0;i<35;i++)
        {
          TxSCI(LineValue_Mid[i]);
          for(x=0;x<5000;x++)
          Delay_6us();
        }  
      TxSCI('M') ;
      for(i=0;i<44;i++)
        {
            TxSCI_over();
        }
//////////////////////////////////Near        
        for(i=0;i<35;i++)
        {
          TxSCI(LineValue_Near[i]);
          for(x=0;x<5000;x++)
          Delay_6us();
        }
      TxSCI('N') ;
      for(i=0;i<44;i++)
        {
            TxSCI_over();
        }
   }
    */
 }


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -