学前班
最后登录1970-1-1
在线时间 小时
注册时间2017-5-27
|
5火花
火花
我想做一个识别白色PVC管子上的黑色圆点的程序,大概思路也有,用火哥的429板子,先摄像头采集数据到SDRAM,然后读取SDRAM的数据并操作,这些数据是存到0xD0000000地址上数据大小是480*800*2个字节,下面是我编的一个recognization的程序大家看看有什么好的办法?主要问题是如何在一帧图像采集完之后调用xiang()这个函数处理数据,处理完之后可以继续正常采集数据,我的现在做不到继续采集数据,大家看看有什么好的办法? |
- #include "Recognization.h"
- #include "./beep/bsp_beep.h"
- #include "./lcd/bsp_lcd.h"
- #include "./systick/bsp_SysTick.h"
- static uint16_t temp0=0;
- #define SAMPLE_NUM 2000
- void xiang(void)
- {
- uint16_t temp1=0;
- u16 d;
-
- temp1=SDRAM_Read();
- d=Calcu_Absolute_Value(temp1,temp0);
-
- if(d<100){
- /*蜂鸣器端口初始化 */
- BEEP_GPIO_Config();
-
- /* 控制IO */
- BEEP_TOGGLE;
- Delay_ms(20);
- }
-
-
- while(temp0){
- temp0=temp1;
- }
-
- DCMI_Cmd(ENABLE);
- DCMI_CaptureCmd(ENABLE);
- }
- uint16_t SDRAM_Read(void)
- {
- uint32_t temp_r=0,temp_g=0,temp_b=0;
- uint16_t temp;
- uint32_t* pBuffer;
-
- __IO uint16_t *write_pointer =(uint16_t *) LCD_FRAME_BUFFER;
- __IO uint16_t *write_pointer2 =(uint16_t *) LCD_FRAME_BUFFER2;
- __IO uint16_t *write_pointer3 = (uint16_t *)LCD_FRAME_BUFFER2;
-
-
-
-
- /* 检查SDRAM标志,等待至SDRAM空闲 */
- while(FMC_GetFlagStatus(FMC_Bank2_SDRAM, FMC_FLAG_Busy) != RESET)
- {
- }
-
- /*读取数据 */
-
- for(; *write_pointer != LCD_FRAME_BUFFER+BUFFER_OFFSET; ){
-
-
-
- *(uint16_t *)(write_pointer2)=*(uint16_t *)(write_pointer);
- write_pointer += 2;
- write_pointer2 += 2;
-
-
-
-
- *pBuffer++= *(__IO uint16_t *)(write_pointer3);
- temp_r+=(*pBuffer>>11);
- temp_g+=((*pBuffer&0x07e0)>>5);
- temp_b+=(*pBuffer&0x001f);
- write_pointer3 += 2;}
-
- temp=((temp_r/SAMPLE_NUM)<<11)|((temp_g/SAMPLE_NUM)<<5)|(temp_b/SAMPLE_NUM);
- return temp;
-
-
-
- }
-
-
- u16 Calcu_Absolute_Value(u16 a,u16 b)
- {
- if(a>b) return a-b;
- else return b-a;
- }
复制代码
|
|