蓝宙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-17 19:34
PID调节
彩笔
2楼-- · 2019-08-17 23:50
 精彩回答 2  元偷偷看……
byond03
3楼-- · 2019-08-18 05:13
回复【33楼】彩笔:
---------------------------------
又来请教你了,我在看蓝宙的主程序的时候,发现他们用了一些中断,包括ccd的中断,想问下你在车行走的时候需要用中断吗?什么时候要用到?还想请你解释一下
彩笔
4楼-- · 2019-08-18 08:01
回复【34楼】byond03:
---------------------------------
智能车的话,如果处理器允许用可以用中断,但是只是绕圈跑就没必要用中断,一般情况下要实现几种功能的话会设置中断,比如走直道时用一种调速方案,当检测到进入弯道后,触发中断切换到第二种调速方案
byond03
5楼-- · 2019-08-18 09:33
回复【35楼】彩笔:
---------------------------------
恩,我现在要实现的一点就是对弯道的检测,然后降到一定速度,就是直道和弯道是两个定值的速度(初步先不打算用pid调直流电机了),但是要怎么检测车进入弯道呢?还是靠偏移量的多少吗?就说这个外部中断是个怎样的量触发呢?
byond03
6楼-- · 2019-08-18 15:30
回复【35楼】彩笔:
---------------------------------
再就是我看了下pid调舵机的算法,怎么感觉就是一个公式来计算占空比的变化啊,但是偏移量不就是|find-64|吗?这个要怎么用呢?

一周热门 更多>