智能车制作
标题: 第一次做智能车。。有没有人能教教人家呢? [打印本页]
作者: 太平洋底人 时间: 2013-7-16 23:34
标题: 第一次做智能车。。有没有人能教教人家呢?
第一次做智能车。。。网上找了段程序,,,有没有人能教教人家呢?
//主函数//
void main(void) {
DisableInterrupts; //禁止中断
PWMDTY23=3800; //占空比寄存器
PLL_Init(); //锁相环初始化
DDRA=0X00; //定义A的脚为输入脚
boma(); //拨码开关
PACBInit(); // PT7 获得脉冲值
RTI_init(); //RTI 产生 10ms 的中断定时
PWM_rudder_init(); //舵机初始化
PWM_init_motor(); //电机初始化
AD_Init(); //AD转换
DDRB=0XFF; //定义B的脚为输出脚
PORTB=0X03; //1号与2号灯亮
delay(5000); //4000 3s左右??应该是5ms吧??
PORTB=0xFC; //3号与4号灯亮
Checkstart(); //检测起跑线
EnableInterrupts; //使能中断
/* put your own code here */
for(;;) {
while(!ATD0STAT2_CCF0); //等待转换结束while(ATDOSTAT2_CCF0==1)
left1=ATD0DR0; //读取结果寄存器left1的值
while(!ATD0STAT2_CCF2); // 等待转换结束while(ATDOSTAT2_CCF1==1)
left2=ATD0DR2; //读取结果寄存器的值
while(!ATD0STAT2_CCF1); // 等待转换结束while(ATDOSTAT2_CCF2==1)
right1=ATD0DR1; //读取结果寄存器的值
while(!ATD0STAT2_CCF3); // 等待转换结束while(ATDOSTAT2_CCF3==1)
right2=ATD0DR3; //读取结果寄存器的值
AR_LEFT=left1+left2;
AR_RIGHT=right1+right2;
CR=(AR_RIGHT-AR_LEFT)/10;
if(Pulse_count>65)Flag_gaosu=1;
else Flag_gaosu=0;
if(AR_RIGHT<110||AR_LEFT<95) //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ left93
{ if(pref>3800) //if(AR_RIGHT<110)
f=4500; //f=3100;
if(pref<3800) //if(AR_LEFT<95)
f=3100; //f=4500;
mkp=b_mkp[5];
mki=b_mki[5];
mkd=b_mkd[5];
ideal_speed=s_table[5];
}
else{
Roadjudge(); //先对道路进行判断
rudder_ctrl(); //调整舵机
motor_ctrl1(); //调整电机的pid参数
}
if(f>4500)f=4500;
if(f<3100)f=3100;
PWMDTY23=f;
pref=PWMDTY23;
motor_ctrl2();
}
} /* loop forever */
#pragma CODE_SEG__NEAR_SEG NON_BANKED //??
interrupt 7 void Int_TimerOverFlow(void)
{
Pulse_count= PACNT; //脉冲计数赋值
PACNT = 0X0000;
CRGFLG_RTIF=1; //??
if(ting<1100)ting++;
else ting=1100;
}
interruptVectorNumber_Vtimch0 void stop(void)
{
DisableInterrupts;
TFLG1_C0F=1; //清除中断标志位
//PORTB=0X03;//1号与2号灯亮
// delay(20);
// PORTB=0xFC;//3号与4号灯亮
// ganhuang++;
//if(ganhuang%4==0){
// ganhuang=0;
//PORTB=0xFC;//3号与4号灯亮
//ganhuang=0;
//TIE=TIE&0X0FE;
flag=1;
if(ting==1100)
{
flag=2;
PORTB=0xF6;
for(i=0;i<3000;i++)
{
while(!ATD0STAT2_CCF0); // 等待转换结束while(ATDOSTAT2_CCF0==1)
left1=ATD0DR0;//读取结果寄存器left1的值
while(!ATD0STAT2_CCF2); // 等待转换结束while(ATDOSTAT2_CCF1==1)
left2=ATD0DR2;//读取结果寄存器的值
while(!ATD0STAT2_CCF1); // 等待转换结束while(ATDOSTAT2_CCF2==1)
right1=ATD0DR1;//读取结果寄存器的值
while(!ATD0STAT2_CCF3); // 等待转换结束while(ATDOSTAT2_CCF3==1)
right2=ATD0DR3;//读取结果寄存器的值
AR_LEFT=left1+left2;
AR_RIGHT=right1+right2;
CR=(AR_RIGHT-AR_LEFT)/10;
rkp=9;
rkd=0;
f=3800+rkp*CR+rkd*(CR-preCR);
preCR=CR;
if(f>4500)f=4500;
if(f<3100)f=3100;
PWMDTY23=f;
pref=PWMDTY23;
//mkp=20;
//mki=0;
//mkd=0;
//ideal_speed=0;
//motor_ctrl2();
PWMDTY01=0;
PWMDTY45=0;
delay(2);
}
}
EnableInterrupts;
}
// asm cli;
#pragma CODE_SEGDEFAULT
不知后面什么意思啊???有没有人能教教人家呢??ting是干嘛用的呢?为什么ting==1100后进行那一大堆呢??
作者: 理工小别 时间: 2013-7-16 23:46
我表示我刚没细看你的程序
你这样发别人是不会看的 尤其是到了这个时候 大家都在忙决赛 就算从比赛下来的也没心情看你这么长得代码
还有如果你不是女生 不要拿个女生的头像在这卖萌
用我们老师的一句话来说就是 你起码要说出你这是遇到什么问题 需要解决什么问题 关键是你自己有什么想法
谁都当过小白 但你这样当小白就不好了
作者: 有熊出没 时间: 2013-7-17 09:42
理工小别 发表于 2013-7-16 23:46 
我表示我刚没细看你的程序
你这样发别人是不会看的 尤其是到了这个时候 大家都在忙决赛 就算从比赛下来的也 ...
嗯,讲得不错~~
作者: 824427451 时间: 2013-7-17 10:24
理工小别 发表于 2013-7-16 23:46 
我表示我刚没细看你的程序
你这样发别人是不会看的 尤其是到了这个时候 大家都在忙决赛 就算从比赛下来的也 ...
把我想说的都说了,。谢了
作者: wen123 时间: 2013-7-17 16:41

作者: 太平洋底人 时间: 2013-7-18 13:55
我表示我知道错了,,,不装萌了。别再批评了,好吗?
我只是想问一下那个ting变量在那里是干嘛用的??为什么判断它之后要进行那么一串??
欢迎光临 智能车制作 (http://dns.znczz.com/) |
Powered by Discuz! X3.2 |