📄 main.c
字号:
}
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 + -