蓝宙TSL1401设计巡线

2019-08-14 02:03发布

在ADC库函数的例子里面加了下面这个函数来实现在白纸上寻找黑线位置,CCD总是有问题找不到,劳烦各路大神帮忙看一下
u16 CCD_Find(void)
{
u16 ao_d[128];
u16 n,max,min,mid,find=0,bla=0;
GPIO_SetBits(GPIOB,GPIO_Pin_13);
delay_us(50);
GPIO_SetBits(GPIOB,GPIO_Pin_14);
    delay_us(50);
GPIO_ResetBits(GPIOB,GPIO_Pin_13);
delay_us(50);
for(n=0;n<129;n++)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
   delay_us(50);
GPIO_SetBits(GPIOB,GPIO_Pin_14);
        delay_us(50);
}
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
delay_us(50);
GPIO_SetBits(GPIOB,GPIO_Pin_13);
delay_us(50);
GPIO_SetBits(GPIOB,GPIO_Pin_14);
    delay_us(50);
GPIO_ResetBits(GPIOB,GPIO_Pin_13);
delay_us(50);
for(n=0;n<128;n++)
{
ao_d[n]=Get_Adc_Average(ADC_Channel_1,10);
UART0_TX_Oscilloscope(ao_d[n]/10,0);
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
   delay_us(50);
GPIO_SetBits(GPIOB,GPIO_Pin_14);
        delay_us(50);
}
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
delay_us(50);
GPIO_SetBits(GPIOB,GPIO_Pin_14);
max=0;
for(n=0;n<128;n++)
{
if(max<ao_d[n])
   max=ao_d[n];
}
min=max;
for(n=0;n<128;n++)
{
if(min>ao_d[n])    
   min=ao_d[n];
}
mid=(max+min)/2;
for(n=128;n>0;n--)
{
if(ao_d[n-1]<mid)
{
 find=n;
 bla++;
}
}
bla=bla/2;
find=find+bla;
return find;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
46条回答
彩笔
1楼-- · 2019-08-18 16:44
 精彩回答 2  元偷偷看……
彩笔
2楼-- · 2019-08-18 20:02
回复【36楼】byond03:
---------------------------------
检测弯道就要靠偏移量了,最好是能记录车子在直道上走了多远,在它快要进入弯道前,将判定值做一个调整,尽量避免它在直道上误以为自己进入了弯道
byond03
3楼-- · 2019-08-18 23:27
temp= Kp*error+Kd*(error+pre_error-2*last_error);舵机的话如果用pd调,error和error+pre_error-2*last_error根据车的情况来说分别是什么呢,尤其是对后者即将的偏差来说
byond03
4楼-- · 2019-08-19 03:49
回复【39楼】彩笔:
---------------------------------
我的车是骑线走得,感觉偏移就是find-64嘛,这个值要怎么在处理下呢?
彩笔
5楼-- · 2019-08-19 08:06
回复【40楼】byond03:
-------------------------------
这个我也不太懂,我传的那个函数,就是设定目标值,也就是你要得到的位置,再加上设定参数,使用你想要的调节方式,这些不能完全看代码,最好实际调一下车,根据实际情况找适合你的参数
彩笔
6楼-- · 2019-08-19 09:45
 精彩回答 2  元偷偷看……

一周热门 更多>