【AT-START-F403A测评】之 4、二维码扫描测试
[复制链接]
本帖最后由 lmyyz 于 2020-10-12 16:19 编辑
我们先看一下原厂给的演示例程,main主函数:
int main(void)
{
static u8 bartype=0;
u8 result[1024]={0} ;
u8 result_compare[1024]={0} ;
u8 Play_times = 0 ;
AT32_Board_Init();
NVIC_Configuration();
UART_Print_Init(115200);
KEY_And_LED_Crl_Init();
EXTIX_Init();
//sensor clock
Clock_Output_Config(); //24Mhz
LCD_SPI1_Init();
LCD_Init();
LCD_display_initial_info();
//camera spi
BF3901_SPI_Init();
BF3901_SCCB_Init();
SCCB_WR_Reg(0x12,0x80);
while(BF3901_Init())//3?ê??ˉBF3901
{
LCD_ShowString(5,70,200,16,16,"BF3901 Error!!");
Delay_ms(200);
}
LCD_ShowString(5,70,200,16,16,"BF3901 Init OK");
printf("1SRAM IN:%d\r\n",my_mem_perused(SRAMIN));
Artery_QR_init();
printf("2SRAM IN:%d\r\n",my_mem_perused(SRAMIN));
LCD_ShowString(5,120,200,20,16,"Please push the USER key to test QR decode!!");
//USB configure
AT32_USB_GPIO_init(); //USB GPIO configure
Delay_ms(500);
USB_Interrupts_Config(); //Enable USB Interrut
Set_USBClock(0); //Set USB Clock, USB Clock must 48MHz
USB_Init(); //USB protocol and register initialize
while(Key_run != 0x55); //
Key_run = 0x22;
DMA_SPIx_Enable();
Delay_ms(500);
LCD_Clear(WHITE);
BlockWrite((lcddev.width-LCD_WIDTH)/2,(lcddev.width+LCD_WIDTH)/2-1,(lcddev.height-LCD_HEIGHT)/2,(lcddev.height+LCD_HEIGHT)/2-1); // 240*320
EXTI14_Init();
while(1)
{
camera_refresh();//
//run ATK_QR
while(Get_Frame == 1)
{
Artery_QR__decode(240,240,bmp,bartype,result);
if(result[0]==0)
{
#if defined(Only_detect_QR)
printf("Not detect ! ");
bartype=0;
Get_Frame = 0;
#elif defined(Detect_all)
bartype++; ?
if(bartype>=5)
{
printf("Not detect ! ");
bartype=0;
Get_Frame = 0;
}
#endif
if(Key_run == 0x55)
{
LCD_Clear(WHITE);
BlockWrite((lcddev.width-LCD_WIDTH)/2,(lcddev.width+LCD_WIDTH)/2-1,(lcddev.height-LCD_HEIGHT)/2,(lcddev.height+LCD_HEIGHT)/2-1); // 240*320
Delay_sec(2);
Key_run = 0x22;
}
}
else if(result[0]!=0)//ê?±e3?à′á?£???ê??á1?
{
//?ì·??ù?÷
GPIO_SetBits(GPIOE, GPIO_Pins_15);
Delay_ms(600);Delay_ms(600);
GPIO_ResetBits(GPIOE, GPIO_Pins_15);
if(Buffercmp(result_compare,result,sizeof(result)) == 1)
{
Play_times++;
}else{
Play_times=1;
}
// Dispaly data to LCD
LCD_Clear(WHITE);
LCD_ShowString(5,10,200,16,16,"The times:");
LCD_ShowNum(130,10,Play_times,2,16);
LCD_ShowString(5,30,200,16,16,"The result :");
LCD_ShowString(5,50,200,100,16,result);
LCD_ShowString(5,190,200,20,16,"Please push the USER key to test QR decode!!");
printf("\r\nresult:\r\n%s\r\n",result);
// Transmit data to USB
usb_printf("The times:%d\r\n",Play_times);
usb_printf("The result :\r\n");
recvLen = strlen((const char*)result);
sendLen = CDC_Send_DATA(result, recvLen);
usb_printf("\r\n\r\n");
AT32_LEDn_Toggle(LED3);
memcpy(result_compare,result,sizeof(result));
Key_run = 0x66;
if(Key_run != 0x66)
{
Delay_sec(3);
LCD_Clear(WHITE);
BlockWrite((lcddev.width-LCD_WIDTH)/2,(lcddev.width+LCD_WIDTH)/2-1,(lcddev.height-LCD_HEIGHT)/2,(lcddev.height+LCD_HEIGHT)/2-1); // 240*320
}
Get_Frame = 0;
}
}
if(Key_run == 0x11)
{
Get_Frame = 0;
Line_Refresh_Flg = RX_IDLE_FLG;
Delay_sec(3);
LCD_Clear(WHITE);
BlockWrite((lcddev.width-LCD_WIDTH)/2,(lcddev.width+LCD_WIDTH)/2-1,(lcddev.height-LCD_HEIGHT)/2,(lcddev.height+LCD_HEIGHT)/2-1); // 240*320
Delay_sec(2);
Key_run = 0x22;
}
}
}
总结一下:显示初始化IO口,lcd接口,摄像头BF3901接口,(吐槽一下,把摄像头换成OV的难道不香么,到现在BF3901的PDF资料我都没找到 )。
初始化结束后按一下按键正式进入二维码扫描功能。流程如下:摄像头一直扫描图像,一边扫描一遍显示在lcd屏上,扫描完一帧(这里设置的是240*240像素)后开始处理图像信息,通过二维码识别.lib返回最终的结果,不成功的话继续扫描。接下来我们一起看看二维码识别的效果怎么样!
=================================================
华丽的分割线
=================================================
让我们来看一下扫描效果:果然扫描成功了
自动扫描二维码.mp4
(965.23 KB, 下载次数: 6)
|